Last fixes

This commit is contained in:
M@d D3n 2017-09-21 09:50:14 +03:00
parent 315d1fded7
commit 3323b45943
93 changed files with 8817 additions and 3841 deletions

View File

@ -265,7 +265,6 @@ AddDefaultCharset utf-8
ExpiresByType image/svg+xml "access plus 1 month"
</IfModule>
<FilesMatch "\.(backup|cache|class|fields|functions|inc|modules|lib|session|templates)$">
Order allow,deny
</FilesMatch>
@ -274,6 +273,16 @@ AddDefaultCharset utf-8
SecFilterScanPOST Off
</IfModule>
# ------------------------------------------------------------------------------
# | mod_deflate.c |
# ------------------------------------------------------------------------------
<IfModule mod_deflate.c>
<FilesMatch "\.(css|js|x?html?|php)$">
SetOutputFilter DEFLATE
</FilesMatch>
</IfModule>
# ------------------------------------------------------------------------------
# | Rewrite engine |
# ------------------------------------------------------------------------------
@ -320,6 +329,10 @@ AddDefaultCharset utf-8
RewriteRule \.(ico)$ - [NC,L]
# If-Modified-Since
RewriteRule .* - [E=HTTP_IF_MODIFIED_SINCE:%{HTTP:If-Modified-Since}]
RewriteRule .* - [E=HTTP_IF_NONE_MATCH:%{HTTP:If-None-Match}]
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

View File

@ -66,4 +66,4 @@ BLOCK_ALIAS = "Алиас"
BLOCK_I = "Опционално. Алиасът позволява да се използва лесно запомнящсе таг [tag:BLOCK:alias] [tag:BLOCK:id]. Алиасът не може да бъде число, може да съдържа само цифри, латински букви, долна черта, тире и е с дължина не-повече от 20 символа и трябва да бъде уникален в пределите на блоковете."
BLOCK_ACCEPT = "Этот алиас можно использовать"
BLOCK_ER_SYN = "Грешен алиас!<br> Алиасът не трябва да е число, да съдържа само цифри, латински букви, долна черта, тире и е с дължина не-повече от 20 символа"
BLOCK_ER_EXISTS ="Грешен алиас!<br> Този алиас вече е използван в друга контактна форма"
BLOCK_ER_EXISTS ="Грешен алиас!<br> Този алиас вече е използван в друг визуален блок"

View File

@ -283,4 +283,19 @@ DOC_SEARCH_FIELD_LIKE = "Съдържа"
DOC_SEARCH_FIELD_EQ = "Равно на"
DOC_SEARCH_FIELD_TEXT = "Стойност"
DOC_TEMPLATE_DEFAULT = "Използвай по подразбиране"
DOC_SHOW_LANG = "Покажи"
DOC_SHOW_LANG = "Покажи"
// 3.2
DOC_TABS_META = "Meta данни"
DOC_TABS_URL = "URL на документа"
DOC_TABS_DATE = "Дата на публикация"
DOC_TABS_OTHER = "Други параметри"
DOC_WITHOUT_TITLE = "Документ без наименование"
DOC_SAVE_ADD = "Добавил"
DOC_SAVE_EDIT = "Редактирал"
DOC_SAVE_LOG_DOC = " документ"
DOC_LANG = "Език"
DOC_LANG_ID = "Език на документа:"
DOC_LANG_SELECT = "Изберете език"

View File

@ -180,12 +180,21 @@ REQUEST_REPORT_ERR_RUBRIC= "Не е избрана рубрика"
REQUEST_BY_PARENT = "Родителски документ"
REQUEST_SHOW_STAT = "Покажи статистиката"
// v 3.2
NAVI_ALIAS = "Алиас"
NAVI_I = "Опционално. Алиасът позволява да се използва лесно запомнящсе таг [tag:sysblock:alias] вместо [tag:sysblock:id]. Алиасът не може да бъде чосло, може да съдържа само цифри, латински букви, долна черта, тире и е с дължина не-повече от 20 символа и трябва да бъде уникален в пределите на модула."
NAVI_ACCEPT = "Този алиас можр да се използва"
NAVI_ER_SYN = "Грешен алиас!<br> Алиасът не трябва да е число, да съдържа само цифри, латински букви, долна черта, тире и е с дължина не-повече от 20 символа"
NAVI_ER_EXISTS = "Грешен алиас!<br> Този алиас вече е използван в друга контактна форма"
REQUEST_HEADER_EXTERNAL = "Външно обръщание
// v 3.1.9
REQUEST_ALIAS = "Алиас"
REQUEST_I = "Опционално. Алиасът позволява да се използва лесно запомнящсе таг [tag:sysblock:alias] вместо [tag:sysblock:id]. Алиасът не може да бъде чосло, може да съдържа само цифри, латински букви, долна черта, тире и е с дължина не-повече от 20 символа и трябва да бъде уникален в пределите на модула."
REQUEST_ACCEPT = "Този алиас можр да се използва"
REQUEST_ER_SYN = "Грешен алиас!<br> Алиасът не трябва да е число, да съдържа само цифри, латински букви, долна черта, тире и е с дължина не-повече от 20 символа"
REQUEST_ER_EXISTS = "Грешен алиас!<br> Този алиас вече е използван за друга заявка"
REQUEST_HEADER_EXTERNAL = "Външно обръщание"
REQUEST_EXTERNAL = "Разреши външно обръщение"
REQUEST_ONLY_AJAX = "Изпълнение само чрез Ajax"
REQUEST_ONLY_AJAX = "Изпълнение само чрез Ajax"
// v 3.2
REQUEST_PAGINATION = "Постранична навигация"
REQUEST_NAVI_TPL = "Шаблон за постранична навигация"
REQUEST_OTHER = "Още"
REQUEST_SHOW_SQL = "Покажи SQL заявката"
REQUEST_DOC_ON_PAGE = "Брой елементи на заявката на страница"
REQUEST_PAGES_CURENT = "Номер страница"
REQUEST_PAGES_TOTAL = "Общ брой страници"

View File

@ -69,8 +69,9 @@ SYSBLOCK_ERROR = "Грешка"
SYSBLOCK_SUCCESS = "Изпълнено"
// v 3.2
NAVI_ALIAS = "Алиас"
NAVI_I = "Опционално. Алиасът позволява да се използва лесно запомнящсе таг [tag:sysblock:alias] вместо [tag:sysblock:id]. Алиасът не може да бъде чосло, може да съдържа само цифри, латински букви, долна черта, тире и е с дължина не-повече от 20 символа и трябва да бъде уникален в пределите на модула."
NAVI_ACCEPT = "Този алиас можр да се използва"
NAVI_ER_SYN = "Грешен алиас!<br> Алиасът не трябва да е число, да съдържа само цифри, латински букви, долна черта, тире и е с дължина не-повече от 20 символа"
NAVI_ER_EXISTS = "Грешен алиас!<br> Този алиас вече е използван в друга контактна форма
SYSBLOCK_DESCRIPTION = "Кратко описание"
SYSBLOCK_ALIAS = "Алиас"
SYSBLOCK_I = "Опционално. Алиасът позволява да се използва лесно запомнящсе таг [tag:sysblock:alias] вместо [tag:sysblock:id]. Алиасът не може да бъде чосло, може да съдържа само цифри, латински букви, долна черта, тире и е с дължина не-повече от 20 символа и трябва да бъде уникален в пределите на модула."
SYSBLOCK_ACCEPT = "Този алиас може да се използва"
SYSBLOCK_ER_SYN = "Грешен алиас!<br> Алиасът не трябва да е число, може да съдържа само цифри, латински букви, долна черта, тире и е с дължина не-повече от 20 символа"
SYSBLOCK_ER_EXISTS = "Грешен алиас!<br> Този алиас вече е използван в друг системен блок"

View File

@ -96,7 +96,7 @@ function insertLinkCK(data) {ldelim}
{elseif $smarty.request.selecturl == 1}
<input onclick="insertLinkCK('index.php?id={$item->Id}&doc={$item->document_alias}');" class="whiteBtn" type="button" value="{#DOC_BUTTON_INSERT_LINK#}" />
{elseif $smarty.request.alias == 1}
<input onclick="insertLink({ldelim}{$smarty.request.target|escape}:'/{$item->document_alias}'{rdelim});" class="whiteBtn" type="button" value="{#DOC_BUTTON_INSERT_LINK#}" />
<input onclick="insertLink({ldelim}{$smarty.request.target|escape}:'{$ABS_PATH}{$item->document_alias}'{rdelim});" class="whiteBtn" type="button" value="{#DOC_BUTTON_INSERT_LINK#}" />
{elseif $smarty.request.function == 1}
<input onclick="insertFunction('{$smarty.request.target|escape}', '{$item->Id}');" class="whiteBtn" type="button" value="{#DOC_BUTTON_INSERT_LINK#}" />
{else}

View File

@ -23,7 +23,7 @@
<script type="text/javascript">
function openLinkWin(target) {ldelim}
function openLinkWin(target, rtrn='', data='') {ldelim}
if (typeof width == 'undefined' || width == '')
var width = screen.width * 0.8;
@ -33,7 +33,9 @@ function openLinkWin(target) {ldelim}
var left = ( screen.width - width ) / 2;
var top = ( screen.height - height ) / 2;
window.open('index.php?do=docs&action=showsimple&target='+target+'&selurl=1&pop=1','pop','left='+left+',top='+top+',width='+width+',height='+height+',scrollbars=1,resizable=1');
data = data.length ? data : 'selurl';
window.open('index.php?do=docs&action=showsimple&target='+target+'&'+data+'=1&pop=1','pop','left='+left+',top='+top+',width='+width+',height='+height+',scrollbars=1,resizable=1');
{rdelim}
function openLinkWinId(target, doc) {ldelim}
@ -548,7 +550,7 @@ $(document).ready(function(){ldelim}
<td nowrap="nowrap" colspan="3">
<div style="margin:2px 0 3px;">
<select style="width: 400px;" name="rubric_tmpl_id" id="rubric_tmpl_id">
<option value="0" {if $smarty.request.action == 'new'}selected="selected"{/if}>Использовать по умолчанию</option>
<option value="0" {if $smarty.request.action == 'new'}selected="selected"{/if}>{#DOC_TEMPLATE_DEFAULT#}</option>
{foreach from=$rubric_tmpls item=tmpl}
<option value="{$tmpl->id}"{if $document->rubric_tmpl_id == $tmpl->id}selected="selected"{/if}>{$tmpl->title}</option>
{/foreach}

View File

@ -2,7 +2,7 @@ $().ready(function() {
// отдельный файловый менеджер
$('#finder').elfinder({
url : ave_path+'lib/redactor/elfinder/inc/connector.php',
url : ave_path+'lib/redactor/elfinder/php/connector.php',
lang : 'ru',
height : 500,
title : 'Файловый менеджер'
@ -13,7 +13,7 @@ $().ready(function() {
$('.dialog_images').click(function() {
var id = $(this).attr("rel");
$('<div/>').dialogelfinder({
url : ave_path+'lib/redactor/elfinder/inc/connector.php',
url : ave_path+'lib/redactor/elfinder/php/connector.php',
lang : 'ru',
width : 1100,
height: 600,

View File

@ -1,7 +1,7 @@
$(function() {
// отдельный файловый менеджер
$('#finder').elfinder({
url : ave_path+'lib/redactor/elfinder/inc/connector_template.php',
url : ave_path+'lib/redactor/elfinder/php/connector_template.php',
lang : 'ru',
height : 500,
title : 'Файловый менеджер'

View File

@ -1,7 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>{#SUB_TITLE#} ({$smarty.session.user_name|escape})</title>

View File

@ -67,10 +67,10 @@
</select>
{/if}
{if $def.TYPE=="string"}
<input class="mousetrap" name="GLOB[{$_var}]" type="text" id="{$_var}" style="width:550px" value="{php} echo(constant ($this->_tpl_vars['_var']));{/php}" size="100" />
<input class="mousetrap" name="GLOB[{$_var}]" type="text" id="{$_var}" style="width:550px" value="{php} echo(constant ($this->_tpl_vars['_var']));{/php}" size="100" autocomplete="off" />
{/if}
{if $def.TYPE=="integer"}
<input class="mousetrap" name="GLOB[{$_var}]" type="text" id="{$_var}" style="width:550px" value="{php} echo(constant ($this->_tpl_vars['_var']));{/php}" size="100" />
<input class="mousetrap" name="GLOB[{$_var}]" type="text" id="{$_var}" style="width:550px" value="{php} echo(constant ($this->_tpl_vars['_var']));{/php}" size="100" autocomplete="off" />
{/if}
{if $def.TYPE=="bool"}
<input type="radio" name="GLOB[{$_var}]" value="1" {php} echo(constant($this->_tpl_vars['_var']) ? 'checked' : "");{/php} /><label style="cursor: pointer;">{#SETTINGS_YES#}</label>

View File

@ -1056,7 +1056,7 @@ class AVE_Core
$main_content = preg_replace_callback('/\[tag:fld:([a-zA-Z0-9-_]+)\]/', 'document_get_field', $main_content);
$main_content = preg_replace_callback('/\[tag:fld:([a-zA-Z0-9-_]+)\]\[([0-9]+)]\[([0-9]+)]/', 'return_element', $main_content);
$main_content = preg_replace_callback('/\[tag:watermark:(.+?):([a-zA-Z]+):([0-9]+)\]/', 'watermarks', $main_content);
$main_content = preg_replace_callback('/\[tag:([r|c|f|t]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $main_content);
$main_content = preg_replace_callback('/\[tag:([r|c|f|t|s]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $main_content);
// Возвращаем поле из БД документа
$main_content = preg_replace_callback('/\[tag:doc:([a-zA-Z0-9-_]+)\]/u',

File diff suppressed because it is too large Load Diff

View File

@ -68,47 +68,79 @@ class AVE_Settings
global $AVE_Template;
// Сохраняем настройки
if (@$_REQUEST['more']) {
$set='<?php';
foreach($_REQUEST['GLOB'] as $k=>$v){
switch ($GLOBALS['CMS_CONFIG'][$k]['TYPE']) {
case 'bool' : $v=$v ? 'true' : 'false'; break;
case 'integer' : $v=intval($v); break;
case 'string' : $v="'".add_slashes($v)."'";break;
case 'dropdown' : $v="'".add_slashes($v)."'";break;
default : $v="'".add_slashes($v)."'";break;
}
$set.="
//".$GLOBALS['CMS_CONFIG'][$k]['DESCR']."\r\n";
$set.=" define('".$k."',".$v.");\r\n\r\n";
}
$set.='?>';
$result = file_put_contents(BASE_DIR.'/inc/config.inc.php',$set);
if (isset($_REQUEST['more']))
{
$set = '<?php' . "\r\n\r\n";
if ($result > 0) {
foreach($_REQUEST['GLOB'] as $k => $v)
{
switch ($GLOBALS['CMS_CONFIG'][$k]['TYPE'])
{
case 'bool' :
$v = $v ? 'true' : 'false';
break;
case 'integer' :
$v = intval($v);
break;
case 'string' :
$v = "'" . add_slashes($v) . "'";
break;
case 'dropdown' :
$v = "'" . add_slashes($v) . "'";
break;
default :
$v = "'" . add_slashes($v) . "'";
break;
}
$set .= "//" . $GLOBALS['CMS_CONFIG'][$k]['DESCR'] . "\r\n";
$set .= "define('" . $k . "', " . $v . ");\r\n\r\n";
}
$set .= '?>';
$result = file_put_contents(BASE_DIR . '/inc/config.inc.php', $set);
if ($result > 0)
{
$message = $AVE_Template->get_config_vars('SETTINGS_SAVED');
$header = $AVE_Template->get_config_vars('SETTINGS_SUCCESS');
$theme = 'accept';
reportLog($AVE_Template->get_config_vars('SETTINGS_SAVE_DOP'));
}else{
$message = $AVE_Template->get_config_vars('SETTINGS_SAVED_ERR');
$header = $AVE_Template->get_config_vars('SETTINGS_ERROR');
$theme = 'error';
}
else
{
$message = $AVE_Template->get_config_vars('SETTINGS_SAVED_ERR');
$header = $AVE_Template->get_config_vars('SETTINGS_ERROR');
$theme = 'error';
}
if (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] = '1') {
echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
} else {
$AVE_Template->assign('message', $message);
header('Location:index.php?do=settings&sub=case&cp=' . SESSION);
if (isAjax())
{
echo json_encode(array(
'message' => $message,
'header' => $header,
'theme' => $theme)
);
}
else
{
$AVE_Template->assign('message', $message);
header('Location:index.php?do=settings&sub=case&cp=' . SESSION);
}
exit;
// Выводим настройки
} else {
$AVE_Template->assign('CMS_CONFIG',$GLOBALS['CMS_CONFIG']);
$AVE_Template->assign('content', $AVE_Template->fetch('settings/settings_case.tpl'));
}
}
else
{
$AVE_Template->assign('CMS_CONFIG', $GLOBALS['CMS_CONFIG']);
$AVE_Template->assign('content', $AVE_Template->fetch('settings/settings_case.tpl'));
}
}
/**

View File

@ -883,6 +883,51 @@ class Image_Toolbox {
$cpy_w_offset = 0;
$cpy_h_offset = 0;
}
elseif ($mode == 4) {
//smart crop
($width >= $height)
? ($this->_img['target']['bias'] = IMAGE_TOOLBOX_BIAS_HORIZONTAL)
: ($this->_img['target']['bias'] = IMAGE_TOOLBOX_BIAS_VERTICAL);
if ($this->_img['main']['bias'] == $this->_img['target']['bias'] || !$autorotate)
{
$this->_img['target']['width'] = $width;
$this->_img['target']['height'] = $height;
}
else
{
$this->_img['target']['width'] = $height;
$this->_img['target']['height'] = $width;
}
$this->_img['target']['aspectratio'] = $this->_img['target']['width'] / $this->_img['target']['height'];
if ($this->_img['main']['width'] / $this->_img['target']['width'] >= $this->_img['main']['height'] / $this->_img['target']['height'])
{
$cpy_h = $this->_img['main']['height'];
$cpy_w = (integer) $this->_img['main']['height'] * $this->_img['target']['aspectratio'];
$cpy_w_offset = (integer) ($this->_img['main']['width'] - $cpy_w) / 2;
$cpy_h_offset = 0;
}
else
{
$cpy_w = $this->_img['main']['width'];
$cpy_h = (integer) $this->_img['main']['width'] / $this->_img['target']['aspectratio'];
$cpy_h_offset = (integer) ($this->_img['main']['height'] - $cpy_h) / 2;
$cpy_w_offset = 0;
}
if ($this->_img['main']['width'] >= $this->_img['target']['height'])
{
$cpy_w_offset = (integer) ($this->_img['main']['width'] - $cpy_w) / 2;
$cpy_h_offset = 0;
}
else
{
$cpy_w_offset = 0;
$cpy_h_offset = (integer) ($this->_img['main']['height'] - $cpy_h) / 2;
}
}
} elseif (($width == 0 && $height > 0) || ($width > 0 && $height == 0) && is_int($width) && is_int($height)) {
//keep aspectratio
if ($autorotate == true) {
@ -915,13 +960,18 @@ class Image_Toolbox {
//create resized picture
$functionname = $this->_imagecreatefunction;
$dummy = $functionname($this->_img['target']['width'] + 1, $this->_img['target']['height'] + 1);
if ($this->_img['main']['type'] == 3) {
if ($this->_img['main']['type'] == 3)
{
imagealphablending($dummy, false);
imagesavealpha($dummy, true);
}
$resize_function = $this->_resize_function;
$resize_function($dummy, $this->_img["main"]["resource"], 0, 0, $cpy_w_offset, $cpy_h_offset, $this->_img["target"]["width"], $this->_img["target"]["height"], $cpy_w, $cpy_h);
if ($mode == 2) {
$this->_img['target']['resource'] = $functionname($width, $height);
$fillcolor = $this->_hexToPHPColor($bgcolor);

View File

@ -186,7 +186,7 @@
$image_item
);
$image_item = preg_replace_callback('/\[tag:([r|c|f|t]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $image_item);
$image_item = preg_replace_callback('/\[tag:([r|c|f|t|s]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $image_item);
}
}
@ -260,7 +260,7 @@
$image_item
);
$image_item = preg_replace_callback('/\[tag:([r|c|f|t]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $image_item);
$image_item = preg_replace_callback('/\[tag:([r|c|f|t|s]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $image_item);
}
}

View File

@ -160,7 +160,7 @@ function get_field_image_multi($field_value, $action, $field_id=0, $tpl='', $tpl
$image_item
);
$image_item = preg_replace_callback('/\[tag:([r|c|f|t]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $image_item);
$image_item = preg_replace_callback('/\[tag:([r|c|f|t|s]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $image_item);
}
}

View File

@ -125,7 +125,7 @@ function get_field_image_multi_new_3inputs($field_value, $action, $field_id=0, $
$image_item
);
$image_item = preg_replace_callback('/\[tag:([r|c|f|t]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $image_item);
$image_item = preg_replace_callback('/\[tag:([r|c|f|t|s]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $image_item);
}
}
$res[] = $image_item;

View File

@ -80,7 +80,7 @@ function get_field_image_single($field_value, $action, $field_id=0, $tpl='', $tp
$field_value
);
$field_value = preg_replace_callback('/\[tag:([r|c|f|t]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $field_value);
$field_value = preg_replace_callback('/\[tag:([r|c|f|t|s]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $field_value);
}
$tpl_file = get_field_tpl($tpl_dir, $field_id, 'doc');
@ -124,7 +124,7 @@ function get_field_image_single($field_value, $action, $field_id=0, $tpl='', $tp
$field_value
);
$field_value = preg_replace_callback('/\[tag:([r|c|f|t]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $field_value);
$field_value = preg_replace_callback('/\[tag:([r|c|f|t|s]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $field_value);
}
$maxlength = null;

View File

@ -74,7 +74,7 @@ function parse_block($id)
{
//-- парсим теги полей документа в шаблоне рубрики
$return = preg_replace_callback('/\[tag:fld:([a-zA-Z0-9-_]+)\]/', 'document_get_field', $return);
$return = preg_replace_callback('/\[tag:([r|c|f|t]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $return);
$return = preg_replace_callback('/\[tag:([r|c|f|t|s]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $return);
}
$gen_time = Debug::endTime('SYSBLOCK_' . $id);

File diff suppressed because it is too large Load Diff

View File

@ -411,7 +411,7 @@ function showrequestelement($mixed, $template = '', $tparams = '')
$item = preg_replace('/\[tag:doc:\d*\]/', '', $item);
$item = preg_replace('/\[tag:langfile:\d*\]/', '', $item);
$item = preg_replace_callback('/\[tag:([r|c|f|t]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $item);
$item = preg_replace_callback('/\[tag:([r|c|f|t|s]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $item);
if ($tparams != '')
{

View File

@ -27,17 +27,16 @@ function parse_sysblock($id)
$eval_sysblock = false;
if ($id != '')
{
$eval_sysblock = true;
$cache_file = BASE_DIR . '/cache/sql/sysblock/' . $id . '.cache';
if(! file_exists(dirname($cache_file)))
if (! file_exists(dirname($cache_file)))
mkdir(dirname($cache_file), 0766, true);
if(file_exists($cache_file))
if (file_exists($cache_file))
{
$return = file_get_contents($cache_file);
}
@ -79,9 +78,11 @@ function parse_sysblock($id)
{
//-- парсим теги полей документа в шаблоне рубрики
$return = preg_replace_callback('/\[tag:fld:([a-zA-Z0-9-_]+)\]/', 'document_get_field', $return);
$return = preg_replace_callback('/\[tag:([r|c|f|t]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $return);
$return = preg_replace_callback('/\[tag:([r|c|f|t|s]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $return);
}
$return = preg_replace_callback('/\[tag:block:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_block', $return);
if ($eval_sysblock)
$return = eval2var('?'.'>' . $return . '<'.'?');

View File

@ -1,82 +1,95 @@
<?php
/**
* AVE.cms
*
* @package AVE.cms
* @version 3.x
* @filesource
* @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
*
* @license GPL v.2
*/
/**
* AVE.cms
*
* @package AVE.cms
* @version 3.x
* @filesource
* @copyright © 2007-2017 AVE.cms, https://www.ave-cms.ru
*
* @license GPL v.2
*/
/**
* Формирование ссылки на миниатюру определённого размера,
* если размер не указан формируется миниатюра шириной 120px
*
* @param array $params параметры
* <ul>
* <li>link путь к оригиналу</li>
* <li>size размер миниатюры</li>
* </ul>
* @return string
*/
function make_thumbnail($params)
{
if (empty($params['link'])) return false;
if((strpos($params['link'],'/http://')===0 || strpos($params['link'],'/https://')===0)) {
/*
|----------------------------------------------------------------------------------
| Формирование ссылки на миниатюру определённого размера,
| если размер не указан формируется миниатюра шириной 120px
|----------------------------------------------------------------------------------
| @param array $params - параметры
|
| <ul>
| <li>link - путь к оригиналу</li>
| <li>size - размер миниатюры</li>
| </ul>
|
| @return string
*/
function make_thumbnail ($params)
{
if (empty($params['link']))
return false;
$md5 = md5($params['link']);
if ((strpos($params['link'], '/http://') === 0 || strpos($params['link'], '/https://') === 0))
{
$md5 = md5($params['link']);
$path = BASE_DIR . ABS_PATH . UPLOAD_DIR . '/ext/' . substr($md5, 0, 4);
$path = BASE_DIR . ABS_PATH . UPLOAD_DIR . '/ext/' . substr($md5, 0, 4);
if(!is_dir($path)){
if(!is_dir(dirname($path))) mkdir(dirname($path), 0777);
mkdir($path, 0777);
if (! is_dir($path))
{
if(! is_dir(dirname($path))) mkdir(dirname($path), 0777);
mkdir($path, 0777);
}
$link = ABS_PATH . UPLOAD_DIR . '/ext/' . substr($md5, 0, 4) . '/' . $md5 . '.jpg';
if (! file_exists(BASE_DIR . $link))
{
file_put_contents(BASE_DIR . $link . '.tmp', $params['link']);
}
$params['link'] = $link;
}
$link = ABS_PATH . UPLOAD_DIR . '/ext/' . substr($md5,0,4) . '/' . $md5 . '.jpg';
if (isset($params['size']))
{
$size = $params['size'];
if(!file_exists(BASE_DIR.$link)){
file_put_contents(BASE_DIR . $link . '.tmp', $params['link']);
if (! preg_match('/^[r|c|f|t|s]\d+x\d+r*$/', $size))
return false;
}
else
{
$size = 't128x128';
}
$params['link']=$link;
$nameParts = explode('.', basename($params['link']));
$countParts = count($nameParts);
if ($countParts < 2)
return false;
$nameParts[$countParts-2] .= '-' . $size;
return dirname($params['link']) . '/' . THUMBNAIL_DIR . '/' . implode('.', $nameParts);
}
if (isset($params['size']))
/*
|----------------------------------------------------------------------------------
| Формирование ссылки на миниатюру определённого размера
|----------------------------------------------------------------------------------
| @param array $params - параметры
|
| @return string
*/
function callback_make_thumbnail ($params)
{
$size = $params['size'];
if (!preg_match('/^[r|c|f|t]\d+x\d+r*$/', $size)) return false;
return ((is_array($params) && isset($params[2]))
? make_thumbnail(array('size' => $params[1], 'link' => $params[2]))
: '');
}
else
{
$size = 't128x128';
}
$nameParts = explode('.', basename($params['link']));
$countParts = count($nameParts);
if ($countParts < 2) return false;
$nameParts[$countParts-2] .= '-' . $size;
return dirname($params['link']) . '/' . THUMBNAIL_DIR . '/' . implode('.', $nameParts);
}
/**
* Формирование ссылки на миниатюру определённого размера
*
* @param array $params параметры
* @return string
*/
function callback_make_thumbnail($params)
{
return ((is_array($params) && isset($params[2])) ? make_thumbnail(array('size' => $params[1], 'link' => $params[2])) : '');
}
?>

View File

@ -89,51 +89,60 @@
)
);
$GLOBALS['CMS_CONFIG']['ADMIN_MENU'] = array('DESCR' =>'Использовать плавующее боковое меню','default'=>true,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['ADMIN_CAPTCHA'] = array('DESCR' =>'Использовать капчу при входе в админку','default'=>false,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['ADMIN_EDITMENU'] = array('DESCR' =>'Использовать всплывающие "Действия" в системе','default'=>true,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['ADMIN_MENU'] = array('DESCR' => 'Использовать плавующее боковое меню','default'=>true,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['ADMIN_CAPTCHA'] = array('DESCR' => 'Использовать капчу при входе в админку','default'=>false,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['ADMIN_EDITMENU'] = array('DESCR' => 'Использовать всплывающие "Действия" в системе','default'=>true,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['ATTACH_DIR'] = array('DESCR' =>'Директория для хранения вложений','default'=>'cache/attachments','TYPE'=>'string','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['UPLOAD_DIR'] = array('DESCR' =>'Директория для хранения файлов','default'=>'uploads','TYPE'=>'string','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['UPLOAD_SHOP_DIR'] = array('DESCR' =>'Директория для хранения миниатюр Магазина','default'=>'uploads/shop','TYPE'=>'string','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['UPLOAD_GALLERY_DIR'] = array('DESCR' =>'Директория для хранения миниатюр Галерей','default'=>'uploads/gallery','TYPE'=>'string','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['THUMBNAIL_DIR'] = array('DESCR' =>'Директория для хранения миниатюр изображений','default'=>'thumbnail','TYPE'=>'string','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['WATERMARKS_DIR'] = array('DESCR' =>'Директория для хранения оригиналов изображений (watermark)','default'=>'watermarks','TYPE'=>'string','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['WATERMARKS_FILE'] = array('DESCR' =>'Файл watermark','default'=>'uploads/watermark.png','TYPE'=>'string','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['ATTACH_DIR'] = array('DESCR' => 'Директория для хранения вложений','default'=>'cache/attachments','TYPE'=>'string','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['UPLOAD_DIR'] = array('DESCR' => 'Директория для хранения файлов','default'=>'uploads','TYPE'=>'string','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['UPLOAD_SHOP_DIR'] = array('DESCR' => 'Директория для хранения миниатюр Магазина','default'=>'uploads/shop','TYPE'=>'string','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['UPLOAD_GALLERY_DIR'] = array('DESCR' => 'Директория для хранения миниатюр Галерей','default'=>'uploads/gallery','TYPE'=>'string','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['SESSION_SAVE_HANDLER'] = array('DESCR' =>'Хранить сессии в БД','default'=>true,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['SESSION_LIFETIME'] = array('DESCR' =>'Время жизни сессии (Значение по умолчанию 24 часа)','default'=>60*60*24,'TYPE'=>'integer','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['COOKIE_LIFETIME'] = array('DESCR' =>'Время жизни cookie автологина (60*60*24*14 - 2 недели)','default'=>60*60*24*14,'TYPE'=>'integer','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['THUMBNAIL_DIR'] = array('DESCR' => 'Директория для хранения миниатюр изображений','default'=>'thumbnail','TYPE'=>'string','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['THUMBNAIL_SIZES'] = array('DESCR' => 'Разрешенные методы и размеры для миниатюр (через запятую)','default'=>'','TYPE'=>'string','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['THUMBNAIL_IPTC'] = array('DESCR' => 'Генерировать миниютарам IPTC','default'=>false,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['USERS_TIME_SHOW'] = array('DESCR' =>'Показывать кто был онлайн в течении: (Значение по умолчанию 24 часа)','default'=>60*60*24,'TYPE'=>'integer','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['WATERMARKS_DIR'] = array('DESCR' => 'Директория для хранения оригиналов изображений (watermark)','default'=>'watermarks','TYPE'=>'string','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['WATERMARKS_FILE'] = array('DESCR' => 'Файл watermark','default'=>'uploads/watermark.png','TYPE'=>'string','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['PROFILING'] = array('DESCR' =>'Вывод статистики','default'=>false,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['SQL_PROFILING'] = array('DESCR' =>'Вывод статистики выполненых запросов','default'=>false,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['SESSION_SAVE_HANDLER'] = array('DESCR' => 'Хранить сессии в БД','default'=>true,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['SESSION_LIFETIME'] = array('DESCR' => 'Время жизни сессии (Значение по умолчанию 24 часа)','default'=>60*60*24,'TYPE'=>'integer','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['COOKIE_LIFETIME'] = array('DESCR' => 'Время жизни cookie автологина (60*60*24*14 - 2 недели)','default'=>60*60*24*14,'TYPE'=>'integer','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['SEND_SQL_ERROR'] = array('DESCR' =>'Отправка писем с ошибками MySQL','default'=>false,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['PHP_DEBUGGING_FILE'] = array('DESCR' =>'Включить обработку ошибок PHP через обработчик cms','default'=>false,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['PHP_DEBUGGING'] = array('DESCR' =>'Включить стандартную обработку ошибок PHP','default'=>false,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['SMARTY_DEBUGGING'] = array('DESCR' =>'Консоль отладки Smarty','default'=>false,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['USERS_TIME_SHOW'] = array('DESCR' => 'Показывать кто был онлайн в течении: (Значение по умолчанию 24 часа)','default'=>60*60*24,'TYPE'=>'integer','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['MEMORY_LIMIT_PANIC'] = array('DESCR' =>'Пытаться очистить память если выходит за пределы ("-1" выключенно) в Мегабайтах (увеличивается нагрузка на MySQL)','default'=>-1,'TYPE'=>'dropdown','VARIANT'=>array('-1','6','12','28','54','100'));
$GLOBALS['CMS_CONFIG']['PROFILING'] = array('DESCR' => 'Вывод статистики','default'=>false,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['SQL_PROFILING'] = array('DESCR' => 'Вывод статистики выполненых запросов','default'=>false,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['SMARTY_COMPILE_CHECK'] = array('DESCR' =>'Контролировать изменения tpl файлов После настройки сайта установить - false','default'=>true,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['SMARTY_USE_SUB_DIRS'] = array('DESCR' =>'Создание папок для кэширования Установите это в false если ваше окружение PHP не разрешает создание директорий от имени Smarty. Поддиректории более эффективны, так что используйте их, если можете.','default'=>true,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['CACHE_DOC_TPL'] = array('DESCR' =>'Кэширование скомпилированных шаблонов документов','default'=>true,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['CACHE_DOC_FILE'] = array('DESCR' =>'Кэширование скомпилированных шаблонов документов в файлах','default'=>true,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['SYSTEM_CACHE_LIFETIME'] = array('DESCR' =>'Время жизни кеша запроса к настройкам системы (60*60*24*14 - 2 недели)','default'=>0,'TYPE'=>'integer','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['SEND_SQL_ERROR'] = array('DESCR' => 'Отправка писем с ошибками MySQL','default'=>false,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['PHP_DEBUGGING_FILE'] = array('DESCR' => 'Включить обработку ошибок PHP через обработчик cms','default'=>false,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['PHP_DEBUGGING'] = array('DESCR' => 'Включить стандартную обработку ошибок PHP','default'=>false,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['SMARTY_DEBUGGING'] = array('DESCR' => 'Консоль отладки Smarty','default'=>false,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['YANDEX_MAP_API_KEY'] = array('DESCR' =>'Yandex MAP API REY','default'=>'','TYPE'=>'string','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['GOOGLE_MAP_API_KEY'] = array('DESCR' =>'Google MAP API REY','default'=>'','TYPE'=>'string','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['MEMORY_LIMIT_PANIC'] = array('DESCR' => 'Пытаться очистить память если выходит за пределы ("-1" выключенно) в Мегабайтах (увеличивается нагрузка на MySQL)','default'=>-1,'TYPE'=>'dropdown','VARIANT'=>array('-1','6','12','28','54','100'));
$GLOBALS['CMS_CONFIG']['Memcached_Server'] = array('DESCR' =>'Адрес Memcached сервера','default'=>'','TYPE'=>'string','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['Memcached_Port'] = array('DESCR' =>'Порт Memcached сервера','default'=>'','TYPE'=>'string','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['SMARTY_COMPILE_CHECK'] = array('DESCR' => 'Контролировать изменения tpl файлов После настройки сайта установить - false','default'=>true,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['SMARTY_USE_SUB_DIRS'] = array('DESCR' => 'Создание папок для кэширования Установите это в false если ваше окружение PHP не разрешает создание директорий от имени Smarty. Поддиректории более эффективны, так что используйте их, если можете.','default'=>true,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['CACHE_DOC_TPL'] = array('DESCR' => 'Кэширование скомпилированных шаблонов документов','default'=>true,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['CACHE_DOC_FILE'] = array('DESCR' => 'Кэширование скомпилированных шаблонов документов в файлах','default'=>true,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['SYSTEM_CACHE_LIFETIME'] = array('DESCR' => 'Время жизни кеша запроса к настройкам системы (60*60*24*14 - 2 недели)','default'=>0,'TYPE'=>'integer','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['DB_EXPORT_GZ'] = array('DESCR' =>'Создание резервной копии базы данных со сжатием','default'=>false,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['DB_EXPORT_TPL'] = array('DESCR' =>'Шаблон имени файла экспорта бд (%SERVER%,%DATE%,%TIME%)','default'=>'%SERVER%_DB_BackUP_%DATE%_%TIME%','TYPE'=>'string','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['DB_EXPORT_PREFIX'] = array('DESCR' =>'Использовать префикс при экспорте бд','default'=>true,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['YANDEX_MAP_API_KEY'] = array('DESCR' => 'Yandex MAP API REY','default'=>'','TYPE'=>'string','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['GOOGLE_MAP_API_KEY'] = array('DESCR' => 'Google MAP API REY','default'=>'','TYPE'=>'string','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['CHECK_VERSION'] = array('DESCR' =>'Проверка наличия новых версий','default'=>true,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['Memcached_Server'] = array('DESCR' => 'Адрес Memcached сервера','default'=>'','TYPE'=>'string','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['Memcached_Port'] = array('DESCR' => 'Порт Memcached сервера','default'=>'','TYPE'=>'string','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['DB_EXPORT_GZ'] = array('DESCR' => 'Создание резервной копии базы данных со сжатием','default'=>false,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['DB_EXPORT_TPL'] = array('DESCR' => 'Шаблон имени файла экспорта бд (%SERVER%,%DATE%,%TIME%)','default'=>'%SERVER%_DB_BackUP_%DATE%_%TIME%','TYPE'=>'string','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['DB_EXPORT_PREFIX'] = array('DESCR' => 'Использовать префикс при экспорте бд','default'=>true,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['GZIP_COMPRESSION'] = array('DESCR' => 'Включить gzip компрессию','default'=>false,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['OUTPUT_EXPIRE'] = array('DESCR' => 'Отдавать заголовок на кеширование страницы', 'default'=>false, 'TYPE'=>'bool', 'VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['OUTPUT_EXPIRE_OFFSET'] = array('DESCR' => 'Время жизни кеширования страницы (60*60 - 1 час)','default'=>60*60, 'TYPE'=>'integer', 'VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['CHECK_VERSION'] = array('DESCR' => 'Проверка наличия новых версий','default'=>true,'TYPE'=>'bool','VARIANT'=>'');
include_once(dirname(dirname(__FILE__)) . '/inc/config.inc.php');
@ -142,4 +151,4 @@
if(! defined($k))
define($k, $v['default']);
}
?>
?>

View File

@ -17,7 +17,7 @@
exit;
// Подключаем файл настроек
require_once(BASE_DIR . '/inc/config.php');
require_once (BASE_DIR . '/inc/config.php');
if (PHP_DEBUGGING_FILE && ! defined('ACP'))
include_once BASE_DIR . '/inc/errors.php';
@ -35,7 +35,8 @@
foreach ($GLOBALS as $key => $value)
{
if (!isset($allowed[$key])) unset($GLOBALS[$key]);
if (!isset($allowed[$key]))
unset($GLOBALS[$key]);
}
}
@ -116,9 +117,9 @@
}
}
else
{
$_SERVER['HTTP_HOST'] = '';
}
{
$_SERVER['HTTP_HOST'] = '';
}
$ssl = is_ssl();
$schema = ($ssl) ? 'https://' : 'http://';
@ -140,16 +141,16 @@
set_host();
set_include_path(get_include_path() . '/' . BASE_DIR . '/lib');
set_include_path (get_include_path() . '/' . BASE_DIR . '/lib');
ini_set('arg_separator.output', '&amp;');
ini_set('session.cache_limiter', 'none');
ini_set('session.cookie_lifetime', 60*60*24*14);
ini_set('session.gc_maxlifetime', 60*24);
ini_set('session.use_cookies', 1);
ini_set('session.use_only_cookies', 1);
ini_set('session.use_trans_sid', 0);
ini_set('url_rewriter.tags', '');
ini_set ('arg_separator.output', '&amp;');
ini_set ('session.cache_limiter', 'none');
ini_set ('session.cookie_lifetime', 60*60*24*14);
ini_set ('session.gc_maxlifetime', 60*24);
ini_set ('session.use_cookies', 1);
ini_set ('session.use_only_cookies', 1);
ini_set ('session.use_trans_sid', 0);
ini_set ('url_rewriter.tags', '');
// Переключение для нормальной работы с русскими буквами в некоторых функциях
@ -175,35 +176,35 @@
/**
* Подкючаем необходимые файлы функций
*/
require_once(BASE_DIR . '/functions/func.breadcrumbs.php'); // Хлебные крошки
require_once(BASE_DIR . '/functions/func.common.php'); // Основные функции
require_once(BASE_DIR . '/functions/func.locale.php'); // Языковые функции
require_once(BASE_DIR . '/functions/func.documents.php'); // Функции по работе с документами
require_once(BASE_DIR . '/functions/func.fields.php'); // Функции по работе с полями
require_once(BASE_DIR . '/functions/func.helpers.php'); // Второстепенные функции
require_once(BASE_DIR . '/functions/func.hidden.php'); // Парс тега [hide]
require_once(BASE_DIR . '/functions/func.login.php'); // Авторизация пользователей
require_once(BASE_DIR . '/functions/func.logs.php'); // Системные сообщения
require_once(BASE_DIR . '/functions/func.mail.php'); // Отправка писем
require_once(BASE_DIR . '/functions/func.navigation.php'); // Функции по работе с меню навигации
require_once(BASE_DIR . '/functions/func.pagination.php'); // Постраничная навигация
require_once(BASE_DIR . '/functions/func.parserequest.php'); // Функции по работе с запросами
require_once(BASE_DIR . '/functions/func.block.php'); // Функции по работе с визуальными блоками
require_once(BASE_DIR . '/functions/func.sysblock.php'); // Функции по работе с системными блоками
require_once(BASE_DIR . '/functions/func.thumbnails.php'); // Функции по работе с превьюшками изображений
require_once(BASE_DIR . '/functions/func.users.php'); // Функции по работе с пользователями
require_once(BASE_DIR . '/functions/func.watermarks.php'); // Функции по работе с водными знаками
require_once (BASE_DIR . '/functions/func.breadcrumbs.php'); // Хлебные крошки
require_once (BASE_DIR . '/functions/func.common.php'); // Основные функции
require_once (BASE_DIR . '/functions/func.locale.php'); // Языковые функции
require_once (BASE_DIR . '/functions/func.documents.php'); // Функции по работе с документами
require_once (BASE_DIR . '/functions/func.fields.php'); // Функции по работе с полями
require_once (BASE_DIR . '/functions/func.helpers.php'); // Второстепенные функции
require_once (BASE_DIR . '/functions/func.hidden.php'); // Парс тега [hide]
require_once (BASE_DIR . '/functions/func.login.php'); // Авторизация пользователей
require_once (BASE_DIR . '/functions/func.logs.php'); // Системные сообщения
require_once (BASE_DIR . '/functions/func.mail.php'); // Отправка писем
require_once (BASE_DIR . '/functions/func.navigation.php'); // Функции по работе с меню навигации
require_once (BASE_DIR . '/functions/func.pagination.php'); // Постраничная навигация
require_once (BASE_DIR . '/functions/func.parserequest.php'); // Функции по работе с запросами
require_once (BASE_DIR . '/functions/func.block.php'); // Функции по работе с визуальными блоками
require_once (BASE_DIR . '/functions/func.sysblock.php'); // Функции по работе с системными блоками
require_once (BASE_DIR . '/functions/func.thumbnails.php'); // Функции по работе с превьюшками изображений
require_once (BASE_DIR . '/functions/func.users.php'); // Функции по работе с пользователями
require_once (BASE_DIR . '/functions/func.watermarks.php'); // Функции по работе с водными знаками
/**
* Создание папок и файлов
*/
foreach(array('cache', 'backup', 'session') as $dir)
foreach (array('cache', 'backup', 'session') as $dir)
{
write_htaccess_deny(BASE_DIR . '/' . $dir);
}
foreach(array('attachments', 'combine', 'module', 'redactor', 'smarty', 'sql', 'tpl') as $dir)
foreach (array('attachments', 'combine', 'module', 'redactor', 'smarty', 'sql', 'tpl') as $dir)
{
write_htaccess_deny(BASE_DIR . '/cache/' . $dir);
}
@ -211,40 +212,42 @@
global $AVE_DB;
// Класс для работы с MySQL (Global $AVE_DB)
require_once(BASE_DIR . '/class/class.database.php');
require_once (BASE_DIR . '/class/class.database.php');
// Если не существует объекта по работе с БД
if (! isset($AVE_DB))
{
// Подключаем конфигурационный файл с параметрами подключения
require_once(BASE_DIR . '/inc/db.config.php');
require_once (BASE_DIR . '/inc/db.config.php');
// Если параметры не указаны, прерываем работу
if (! isset($config)) exit;
if (! isset($config))
exit;
// Если константа префикса таблиц не задана, принудительно определяем ее на основании параметров в файле db.config.php
if (! defined('PREFIX')) define('PREFIX', $config['dbpref']);
if (! defined('PREFIX'))
define('PREFIX', $config['dbpref']);
// Создаем объект для работы с БД
try {
$AVE_DB = AVE_DB::getInstance($config)
// Назначаем кодировку
->setCharset('utf8')
// Назначаем БД
->setDatabaseName($config['dbname']);
$AVE_DB = AVE_DB::getInstance($config)
// Назначаем кодировку
->setCharset('utf8')
// Назначаем БД
->setDatabaseName($config['dbname']);
}
catch (AVE_DB_Exception $e)
{
ob_start();
header('HTTP/1.1 503 Service Temporarily Unavailable');
header('Status: 503 Service Temporarily Unavailable');
header('Retry-After: 3600');
header('X-Powered-By:');
echo $e->getMessage();
die;
}
{
ob_start();
header('HTTP/1.1 503 Service Temporarily Unavailable');
header('Status: 503 Service Temporarily Unavailable');
header('Retry-After: 3600');
header('X-Powered-By:');
echo $e->getMessage();
die;
}
unset($config);
unset ($config);
}
// Устанавливаем обновления системы
@ -254,7 +257,7 @@
if ($updaters)
{
sort($updaters);
sort ($updaters);
foreach ($updaters as $ufile)
{
@ -275,15 +278,15 @@
if (! SESSION_SAVE_HANDLER)
{
// Класс для работы с сессиями
require(BASE_DIR . '/class/class.session.files.php');
require (BASE_DIR . '/class/class.session.files.php');
$ses_class = new AVE_Session();
}
else
{
// Класс для работы с сессиями
require(BASE_DIR . '/class/class.session.php');
$ses_class = new AVE_Session_DB();
}
{
// Класс для работы с сессиями
require (BASE_DIR . '/class/class.session.php');
$ses_class = new AVE_Session_DB();
}
/* Изменяем save_handler, используем функции класса */
session_set_save_handler (
@ -328,18 +331,21 @@
//Запоминаем время последнего визита пользователя
if(! empty($_SESSION['user_id']))
if (! empty($_SESSION['user_id']))
{
$AVE_DB->Query("
UPDATE " . PREFIX . "_users
SET last_visit = '" . time() . "'
WHERE Id = '" . intval($_SESSION['user_id']) . "'
UPDATE
" . PREFIX . "_users
SET
last_visit = '" . time() . "'
WHERE
Id = '" . intval($_SESSION['user_id']) . "'
");
}
//Запоминаем язык браузера
$browlang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$browlang = explode("-", $browlang);
$browlang = explode('-', $browlang);
$browlang = $browlang[0];
$_SESSION['accept_langs'] = array();
@ -355,13 +361,13 @@
lang_default ASC
", SYSTEM_CACHE_LIFETIME);
while($row = $sql->FetchRow())
while ($row = $sql->FetchRow())
{
if(trim($row->lang_key) > '')
if (trim($row->lang_key) > '')
{
$_SESSION['accept_langs'][trim($row->lang_key)] = trim($row->lang_alias_pref);
if(! @defined('DEFAULT_LANGUAGE') && $row->lang_default == 1)
if (! @defined('DEFAULT_LANGUAGE') && $row->lang_default == 1)
define('DEFAULT_LANGUAGE', trim($row->lang_key));
}
}
@ -389,20 +395,20 @@
set_locale();
// Класс Шаблонов SMARTY
require(BASE_DIR . '/class/class.template.php');
require (BASE_DIR . '/class/class.template.php');
// Класс пагинации
require(BASE_DIR . '/class/class.paginations.php');
require (BASE_DIR . '/class/class.paginations.php');
// Класс Модулей
require(BASE_DIR . '/class/class.modules.php');
require (BASE_DIR . '/class/class.modules.php');
$AVE_Module = new AVE_Module;
// Debug
require(BASE_DIR . '/class/class.debug.php');
require (BASE_DIR . '/class/class.debug.php');
$Debug = new Debug;
// Hooks
require(BASE_DIR . '/class/class.hooks.php');
require (BASE_DIR . '/class/class.hooks.php');
$Hooks = new Hooks;
?>
?>

View File

@ -1,53 +1,56 @@
<?php
/**
* AVE.cms
*
* @package AVE.cms
* @version 3.x
* @filesource
* @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
*
* @license GPL v.2
*/
/**
* AVE.cms
*
* @package AVE.cms
* @version 3.x
* @filesource
* @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
*
* @license GPL v.2
*/
header("Content-type: text/xml");
@date_default_timezone_set('Europe/Moscow');
header("Content-type: text/xml");
@date_default_timezone_set('Europe/Moscow');
define('START_MICROTIME', microtime());
define('START_MICROTIME', microtime());
define('BASE_DIR', str_replace("\\", "/", rtrim($_SERVER['DOCUMENT_ROOT'],'/')));
define('BASE_DIR', str_replace("\\", "/", rtrim($_SERVER['DOCUMENT_ROOT'],'/')));
define('ABS_PATH', str_ireplace(BASE_DIR,'/',str_replace("\\", "/", dirname(dirname(__FILE__)))));
if (! @filesize(BASE_DIR . '/inc/db.config.php'))
{
header('Location: Location:install/index.php');
exit;
}
if (! @filesize(BASE_DIR . '/inc/db.config.php'))
{
header('Location: Location:install/index.php');
exit;
}
if (substr($_SERVER['REQUEST_URI'], 0, strlen('/index.php?')) != '/index.php?')
{
$_SERVER['REQUEST_URI'] = str_ireplace('_', '-', $_SERVER['REQUEST_URI']);
}
if(substr($_SERVER['REQUEST_URI'], 0, strlen('/index.php?')) != '/index.php?')
{
$_SERVER['REQUEST_URI'] = str_ireplace('_','-',$_SERVER['REQUEST_URI']);
}
require_once (BASE_DIR . '/inc/init.php');
require_once(BASE_DIR . '/inc/init.php');
if (! defined('ABS_PATH'))
define ('ABS_PATH', str_ireplace(BASE_DIR,'/',str_replace("\\", "/", dirname(dirname(__FILE__)))));
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off')
{
$domain = 'https://'.$_SERVER['SERVER_NAME'];
}
else
{
$domain = 'http://'.$_SERVER['SERVER_NAME'];
}
if (isset ($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off')
{
$domain = 'https://' . $_SERVER['SERVER_NAME'];
}
else
{
$domain = 'http://' . $_SERVER['SERVER_NAME'];
}
echo '<?xml version="1.0" encoding="UTF-8"?>';
?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<?php
$publish = get_settings('use_doctime') ? 'AND doc.document_expire > UNIX_TIMESTAMP()' : '';
$publish = get_settings('use_doctime')
? 'AND doc.document_expire > UNIX_TIMESTAMP()'
: '';
$sql = "
SELECT
@ -56,10 +59,13 @@ echo '<?xml version="1.0" encoding="UTF-8"?>';
doc.document_changed,
doc.document_sitemap_freq,
doc.document_sitemap_pr
FROM " . PREFIX . "_documents doc
LEFT JOIN " . PREFIX . "_rubrics rub
FROM
" . PREFIX . "_documents doc
LEFT JOIN
" . PREFIX . "_rubrics rub
ON rub.Id = doc.rubric_id
LEFT JOIN " . PREFIX . "_rubric_permissions rubperm
LEFT JOIN
" . PREFIX . "_rubric_permissions rubperm
ON rubperm.rubric_id = doc.rubric_id
WHERE
rub.rubric_template NOT LIKE ''
@ -69,7 +75,8 @@ echo '<?xml version="1.0" encoding="UTF-8"?>';
AND doc.Id != " . PAGE_NOT_FOUND_ID . "
AND (document_meta_robots NOT LIKE '%noindex%' or document_meta_robots NOT LIKE '%nofollow%')
AND (rubperm.user_group_id = 2 AND rubperm.rubric_permission LIKE '%docread%')
ORDER BY doc.Id ASC, doc.document_changed DESC
ORDER BY
doc.Id ASC, doc.document_changed DESC
";
$changefreq = array(
@ -84,7 +91,7 @@ echo '<?xml version="1.0" encoding="UTF-8"?>';
$res = $AVE_DB->Query($sql);
while($row = $res->FetchAssocArray()):
while ($row = $res->FetchAssocArray()):
$document_alias = ABS_PATH . $row['document_alias'] . URL_SUFF;
$document_alias = $domain . str_ireplace(ABS_PATH . '/' . URL_SUFF, '/', $document_alias);
$date = $row["document_changed"] ? date("Y-m-d", $row["document_changed"]) : date("Y-m-d");

View File

@ -27,14 +27,14 @@
$retval .= chr($length >> 8) . chr($length & 0xFF);
}
else
{
$retval .= chr(0x80) .
chr(0x04) .
chr(($length >> 24) & 0xFF) .
chr(($length >> 16) & 0xFF) .
chr(($length >> 8) & 0xFF) .
chr($length & 0xFF);
}
{
$retval .= chr(0x80) .
chr(0x04) .
chr(($length >> 24) & 0xFF) .
chr(($length >> 16) & 0xFF) .
chr(($length >> 8) & 0xFF) .
chr($length & 0xFF);
}
return $retval . $value;
}
@ -68,39 +68,66 @@
return is_dir($path) || (mkdir(dirname($path), $mode) && _mkdir($path, $mode));
}
require(dirname(__FILE__).'/config.php');
//-- Подгружаем настройки системы
require(dirname(__FILE__) . '/config.php');
//-- Разрешенные расширения файлов
$allowedExt = array('jpg', 'jpeg', 'png', 'gif', 'JPG', 'JPEG', 'PNG', 'GIF');
//-- Разрешенные размеры миниатюр
$allowedSize = THUMBNAIL_SIZES
? explode(',', trim(THUMBNAIL_SIZES))
: array();
//-- Разрешения для админпанели
$allowedAdmin = array(
't128x128',
'f128x128',
);
//-- Ссылка на файл
$imagefile = urldecode($_SERVER['REQUEST_URI']);
if(! empty($_REQUEST['thumb']))
//-- Вызов чере $_GET параметры
//-- ToDo
if (! empty($_REQUEST['thumb']))
{
$imagefile = '/'.
rtrim(
dirname($_REQUEST['thumb'])
.'/'.THUMBNAIL_DIR.'/'
.(str_replace(
. '/' . THUMBNAIL_DIR . '/'
. (str_replace(
'.',
(empty($_REQUEST['mode']) ? '-c' : '-'.$_REQUEST['mode']).((empty($_REQUEST['width'])&& empty($_REQUEST['height'])) ? '128' : intval(@$_REQUEST['width'])).'x'.((empty($_REQUEST['width'])&& empty($_REQUEST['height'])) ? '128' : intval(@$_REQUEST['height'])).'.',
(empty($_REQUEST['mode'])
? '-t'
: '-' . $_REQUEST['mode']) . ((empty($_REQUEST['width']) && empty($_REQUEST['height']))
? '128'
: intval(@$_REQUEST['width'])) . 'x' . ((empty($_REQUEST['width']) && empty($_REQUEST['height']))
? '128'
: intval(@$_REQUEST['height'])) . '.',
basename($_REQUEST['thumb'])
)
),
'/');
}
if($_SERVER['REQUEST_URI'] == '/inc/thumb.php')
//-- Если пришел прямой вызов файла, то сразу отрубаем его
if ($_SERVER['REQUEST_URI'] == '/inc/thumb.php')
die('No image');
$baseDir = str_replace("\\", "/", dirname(dirname(__FILE__)));
//-- Базовая папка
$baseDir = str_replace('\\', '/', dirname(dirname(__FILE__)));
if(file_exists($baseDir . $imagefile))
//-- Если файл существует, показываем его
if (file_exists($baseDir . $imagefile))
{
$img_data = @getimagesize($baseDir . $imagefile);
header('Content-Type:' . $img_data['mime'], true);
header("Last-Modified: " . gmdate("D, d M Y H:i:s".filemtime($baseDir . $imagefile))." GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s" . filemtime($baseDir . $imagefile)) . " GMT");
header("Content-Length: " . (string) filesize($baseDir . $imagefile), true);
readfile($baseDir . $imagefile);
exit;
}
@ -122,23 +149,40 @@
exit(0);
$matches = array();
preg_match('/-(r|c|f|t)(\d+)x(\d+)(r)*$/i', $nameParts[$countParts-2], $matches);
//-- Смотрим переданные параметры
preg_match('/-(r|c|f|t|s)(\d+)x(\d+)(r)*$/i', $nameParts[$countParts-2], $matches);
if (!isset($matches[0]))
//-- Если нет параметров, отдаем 404
if (! isset($matches[0]))
{
header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
exit(0);
}
$check = ltrim($matches[0], '-');
//-- Проверяем разрешен ли данный размер для миниатюры
if (! empty($allowedSize) && ! in_array($check, $allowedSize))
{
if (! in_array($check, $allowedAdmin))
{
header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
exit(0);
}
}
//-- Если есть параметр rotate
if (isset($matches[4]))
{
list($size, $method, $width, $height, $rotate) = $matches;
list ($size, $method, $width, $height, $rotate) = $matches;
}
//-- Иначе
else
{
list($size, $method, $width, $height) = $matches;
$rotate = false;
}
{
list ($size, $method, $width, $height) = $matches;
$rotate = false;
}
$nameParts[$countParts-2] = substr($nameParts[$countParts-2], 0, -strlen($size));
$imageName = implode('.', $nameParts);
@ -149,27 +193,30 @@
{
$l= "$imagePath/$imageName";
if(file_exists($l.'.tmp'))
if (file_exists($l . '.tmp'))
{
include_once(BASE_DIR.'/functions/func.common.php');
$abs_path = dirname((!strstr($_SERVER['PHP_SELF'], $_SERVER['SCRIPT_NAME']) && (@php_sapi_name() == 'cgi')) ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME']);
$abs_path = dirname((!strstr($_SERVER['PHP_SELF'], $_SERVER['SCRIPT_NAME']) && (@php_sapi_name() == 'cgi'))
? $_SERVER['PHP_SELF']
: $_SERVER['SCRIPT_NAME']);
define('ABS_PATH', rtrim(str_replace("\\", "/", $abs_path), '/') . '/');
$url = trim(file_get_contents($l.'.tmp'),ABS_PATH);
$url = trim(file_get_contents($l . '.tmp'), ABS_PATH);
$img=CURL_file_get_contents($url);
$img = CURL_file_get_contents($url);
if($img)
if ($img)
{
file_put_contents("$imagePath/$imageName",$img);
setEXIFF("$imagePath/$imageName");
$save = true;
}
@unlink($l.'.tmp');
@unlink($l . '.tmp');
}
}
@ -177,12 +224,16 @@
if (! file_exists("$imagePath/$imageName"))
{
header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
$imageName = 'noimage.gif';
if (!file_exists("$imagePath/$imageName"))
{
$imagePath = $baseDir . '/' . UPLOAD_DIR . '/images';
}
if (!file_exists("$imagePath/$imageName")) exit(0);
if (!file_exists("$imagePath/$imageName"))
exit(0);
$save = false;
}
@ -191,6 +242,7 @@
$thumb = new Image_Toolbox("$imagePath/$imageName");
//-- Методы генерации миниатюр
switch ($method)
{
case 'r':
@ -204,9 +256,14 @@
case 'f':
$thumb->newOutputSize((int)$width, (int)$height, 2, false, '#ffffff');
break;
case 't':
$thumb->newOutputSize((int)$width, (int)$height, 3, false);
break;
case 's':
$thumb->newOutputSize((int)$width, (int)$height, 4, (boolean)$rotate);
break;
}
//Blend
@ -222,48 +279,58 @@
$thumb->output();
//-- Если можно сохранять миниатюру
if ($save)
{
if (!file_exists($thumbPath) && !mkdir($thumbPath, 0777)) exit(0);
if (! file_exists($thumbPath) && ! mkdir($thumbPath, 0777))
exit(0);
if ($thumb->save("$thumbPath/$thumbName"))
{
$old = umask(0);
chmod("$thumbPath/$thumbName", 0777);
umask($old);
}
if($thumb->_img['main']['type']==2){
if ($thumb->_img['main']['type']==2)
{
$image = getimagesize("$thumbPath/$thumbName", $info);
if(!isset($info['APP13']))
if (! isset($info['APP13']))
{
if(!isset($AVE_DB)){
@require(BASE_DIR . '/class/class.database.php');
$sitename=@$AVE_DB->Query("SELECT site_name FROM " . PREFIX . "_settings LIMIT 1")->GetCell();
}
// установка IPTC тэгов
$iptc = array(
'2#120' => iconv("UTF-8","WINDOWS-1251",$sitename),
'2#116' => "http://".$_SERVER['SERVER_NAME']
);
// Преобразование IPTC тэгов в двоичный код
$data = '';
foreach($iptc as $tag => $string)
//-- Если в настройках разрешена генерация IPTC тегов для миниатюр
if (THUMBNAIL_IPTC)
{
$tag = substr($tag, 2);
$data .= iptc_make_tag(2, $tag, $string);
if (! isset($AVE_DB))
{
@require(BASE_DIR . '/class/class.database.php');
$sitename= @$AVE_DB->Query("SELECT site_name FROM " . PREFIX . "_settings LIMIT 1")->GetCell();
}
// установка IPTC тэгов
$iptc = array(
'2#120' => iconv("UTF-8", "WINDOWS-1251", $sitename),
'2#116' => "http://" . $_SERVER['SERVER_NAME']
);
// Преобразование IPTC тэгов в двоичный код
$data = '';
foreach($iptc as $tag => $string)
{
$tag = substr($tag, 2);
$data .= iptc_make_tag(2, $tag, $string);
}
// Встраивание IPTC данных
$content = iptcembed($data, "$thumbPath/$thumbName");
// запись нового изображения в файл
$fp = fopen("$thumbPath/$thumbName", "wb");
fwrite($fp, $content);
fclose($fp);
}
// Встраивание IPTC данных
$content = iptcembed($data, "$thumbPath/$thumbName");
// запись нового изображения в файл
$fp = fopen("$thumbPath/$thumbName", "wb");
fwrite($fp, $content);
fclose($fp);
}
}
}
?>

View File

@ -11,14 +11,14 @@
* @license GPL v.2
*/
define('START_MICROTIME', microtime());
define('START_MEMORY', memory_get_usage());
define('BASE_DIR', str_replace("\\", "/", dirname(__FILE__)));
define ('START_MICROTIME', microtime());
define ('START_MEMORY', memory_get_usage());
define ('BASE_DIR', str_replace("\\", "/", dirname(__FILE__)));
// Проверяем уставлена ли CMS
if (! @filesize(BASE_DIR . '/inc/db.config.php'))
{
header('Location:install/index.php');
header ('Location:install/index.php');
exit;
}
@ -26,7 +26,7 @@
// подключаем файл обработки thumbnail
if (! empty($_REQUEST['thumb']))
{
require(BASE_DIR . '/inc/thumb.php');
require (BASE_DIR . '/inc/thumb.php');
exit;
}
@ -34,19 +34,19 @@
// Подключаем файл определения мобильных устройств
// далее пользуемся $MDetect
require_once(BASE_DIR . '/lib/mobile_detect/Mobile_Detect.php');
require_once (BASE_DIR . '/lib/mobile_detect/Mobile_Detect.php');
$MDetect = new Mobile_Detect;
// Подключаем файл инициализации
require(BASE_DIR . '/inc/init.php');
require (BASE_DIR . '/inc/init.php');
unset($GLOBALS['CMS_CONFIG']);
unset ($GLOBALS['CMS_CONFIG']);
// Проверяем нет ли в запросе папки UPLOADS_DIR
// подключаем файл для работы thumbsnail
if (strpos($_SERVER['REQUEST_URI'], ABS_PATH . UPLOAD_DIR . '/') === 0)
if (strpos ($_SERVER['REQUEST_URI'], ABS_PATH . UPLOAD_DIR . '/') === 0)
{
require(BASE_DIR . '/inc/thumb.php');
require (BASE_DIR . '/inc/thumb.php');
exit;
}
@ -54,11 +54,11 @@
$AVE_Template = new AVE_Template(BASE_DIR . '/templates/');
// Подключаем ядро системы
require(BASE_DIR . '/class/class.core.php');
require (BASE_DIR . '/class/class.core.php');
$AVE_Core = new AVE_Core;
// Проверям на вызов внешних модулей и системных блоков
if (empty($_REQUEST['module']) || empty($_REQUEST['sysblock']) || empty($_REQUEST['request']))
if (empty ($_REQUEST['module']) || empty ($_REQUEST['sysblock']) || empty ($_REQUEST['request']))
$AVE_Core->coreUrlParse($_SERVER['REQUEST_URI']);
$GLOBALS['page_id'] = array((isset($_REQUEST['id'])
@ -91,19 +91,24 @@
$content = ob_get_clean();
ob_start();
if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') && GZIP_COMPRESSION)
{
ob_start('ob_gzhandler');
}
else
ob_start();
eval('?>' . $content . '<?');
eval ('?>' . $content . '<?');
$render = ob_get_clean();
unset($content);
unset ($content);
// Ловим 404 ошибку
if (isset($_REQUEST['id']) AND ($_REQUEST['id']) == PAGE_NOT_FOUND_ID)
{
report404();
header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found', true);
header ($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found', true);
}
// Постраничка
@ -131,24 +136,29 @@
)
{
if ($_REQUEST['id'] == 1)
header('Location:' . ABS_PATH);
header ('Location:' . ABS_PATH);
else
header('Location:' . ABS_PATH . $AVE_Core->curentdoc->document_alias . URL_SUFF);
header ('Location:' . ABS_PATH . $AVE_Core->curentdoc->document_alias . URL_SUFF);
exit;
}
// Тут заменяем [tag:rubheader]
// на собранный $GLOBALS["user_header"]
$rubheader = (empty($GLOBALS["user_header"])
? ""
: implode(chr(10), $GLOBALS["user_header"]));
$rubheader = (empty($GLOBALS['user_header'])
? ''
: implode(chr(10), $GLOBALS['user_header']));
$render = str_replace('[tag:rubheader]', $rubheader, $render);
//Вывод конечного результата
echo $render;
//-- Header Engine
header('X-Engine: AVE.cms');
header('X-Engine-Copyright: 2007-' . date('Y') . ' (c) AVE.cms');
header('X-Engine-Site: https://ave-cms.ru');
//Вывод статистики загрузки и запросов SQL (только для администраторов)
if (! defined('ONLYCONTENT') && UGROUP == 1 && defined('PROFILING') && PROFILING)
echo get_statistic(1, 1, 1, 1);
$render .= get_statistic(1, 1, 1, 1);
//Вывод конечного результата
gzip_compress($render);
?>

View File

@ -277,7 +277,7 @@ if ($count_error > 0 && ! (isset($_REQUEST['force']) && 1 == $_REQUEST['force'])
$_REQUEST['step'] = isset($_REQUEST['step']) ? $_REQUEST['step'] : '';
// Минимальные требования к системе
define('PHP_version', '5.2.2');
define('PHP_version', '5.5');
define('MySQL_version', '5.0.0');
define('GD_version', '2.0');
define('PCRE_version', '7.0');

View File

@ -3,6 +3,7 @@
<link rel="stylesheet" href="{$ABS_PATH}lib/redactor/codemirror/lib/codemirror.css">
<link rel="stylesheet" href="{$ABS_PATH}lib/redactor/codemirror/addon/hint/show-hint.css">
<link rel="stylesheet" href="{$ABS_PATH}lib/redactor/codemirror/addon/dialog/dialog.css">
<link rel="stylesheet" href="{$ABS_PATH}lib/redactor/ckeditor/plugins/codemirror/css/codemirror.min.css">
{if $smarty.const.CODEMIRROR_THEME != '' && $smarty.const.CODEMIRROR_THEME != 'default'}
<link rel="stylesheet" href="{$ABS_PATH}lib/redactor/codemirror/theme/{$smarty.const.CODEMIRROR_THEME}.css">

View File

@ -1,6 +1,6 @@
/*!
* elFinder - file manager for web
* Version 2.1.23 (2017-03-31)
* Version 2.1.25 (2017-06-23)
* http://elfinder.org
*
* Copyright 2009-2017, Studio 42
@ -262,6 +262,11 @@
display: none;
}
.elfinder-resize-preset-container {
box-sizing: border-box;
border-radius: 5px;
}
/********************** COMMAND "EDIT" ****************************/
/* edit text file textarea */
.elfinder-file-edit {
@ -271,6 +276,7 @@
padding:2px;
border:1px solid #ccc;
box-sizing: border-box;
resize: none;
}
.elfinder-touch .elfinder-file-edit {
font-size: 16px;
@ -723,10 +729,13 @@ div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
.elfinder .elfinder-contextmenu .elfinder-contextmenu-item span { display:block; }
/* submenu item in rtl/ltr enviroment */
.elfinder .elfinder-contextmenu-sub .elfinder-contextmenu-item { padding-left:12px; padding-right:12px; }
.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-item { text-align:left; }
.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-item { text-align:right; }
.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-sub .elfinder-contextmenu-item { padding-left:12px; }
.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-sub .elfinder-contextmenu-item { padding-right:12px; }
.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon { padding-left:28px; }
.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon { padding-right:28px; }
.elfinder-touch .elfinder-contextmenu-ltr .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon { padding-left:36px; }
.elfinder-touch .elfinder-contextmenu-rtl .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon { padding-right:36px; }
/* command/submenu icon */
.elfinder .elfinder-contextmenu-extra-icon,
@ -973,6 +982,16 @@ div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
.elfinder-cwd .elfinder-navbar-root-local.elfinder-droppable-active .elfinder-cwd-icon {
background-position:1px -1px;
}
.elfinder-navbar-root-trash .elfinder-cwd-icon,
.elfinder-cwd .elfinder-navbar-root-trash.elfinder-droppable-active .elfinder-cwd-icon,
.elfinder-cwd-view-list .elfinder-navbar-root-trash td .elfinder-cwd-icon {
background-image:url("../img/volume_icon_trash.png");
background-position:0 0;
background-size: contain;
}
.elfinder-cwd .elfinder-navbar-root-trash.elfinder-droppable-active .elfinder-cwd-icon {
background-position:1px -1px;
}
.elfinder-navbar-root-ftp .elfinder-cwd-icon,
.elfinder-cwd .elfinder-navbar-root-ftp.elfinder-droppable-active .elfinder-cwd-icon,
.elfinder-cwd-view-list .elfinder-navbar-root-ftp td .elfinder-cwd-icon {
@ -1033,7 +1052,7 @@ div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
.elfinder-cwd .elfinder-navbar-root-network.elfinder-droppable-active .elfinder-cwd-icon,
.elfinder-cwd-view-list .elfinder-navbar-root-network td .elfinder-cwd-icon {
background-image:url("../img/toolbar.png");
background-position: 0 86%;
background-position: 0 81.1%; /* Don't forget change % when toolbar.png edited */
background-size: cover;
}
.elfinder-cwd .elfinder-navbar-root-network.elfinder-droppable-active .elfinder-cwd-icon {
@ -1671,6 +1690,10 @@ tr.elfinder-cwd-file td .elfinder-cwd-select {
user-select: text;
}
.elfinder .std42-dialog .ui-dialog-content form label {
border: none;
}
/* buttons */
.std42-dialog .ui-dialog-buttonpane {
border: 0 solid;
@ -1680,7 +1703,7 @@ tr.elfinder-cwd-file td .elfinder-cwd-select {
}
.elfinder-rtl .std42-dialog .ui-dialog-buttonpane { text-align: left; }
.std42-dialog .ui-dialog-buttonpane button { margin:.7em 0 0 .4em; padding: .2em; outline:0px solid; }
.std42-dialog .ui-dialog-buttonpane button { margin:.2em 0 0 .4em; padding: .2em; outline:0px solid; }
.std42-dialog .ui-dialog-buttonpane button span { padding:2px 9px; }
.std42-dialog .ui-dialog-buttonpane button span.ui-icon { padding: 2px; }
@ -2097,6 +2120,7 @@ button.elfinder-info-button {
/* root icon of each volume */
.elfinder-tree .elfinder-navbar-root-local .elfinder-navbar-icon { background-image:url("../img/volume_icon_local.png"); background-position:0 0; }
.elfinder-tree .elfinder-navbar-root-trash .elfinder-navbar-icon { background-image:url("../img/volume_icon_trash.png"); background-position:0 0; }
.elfinder-tree .elfinder-navbar-root-ftp .elfinder-navbar-icon { background-image:url("../img/volume_icon_ftp.png"); background-position:0 0; }
.elfinder-tree .elfinder-navbar-root-sql .elfinder-navbar-icon { background-image:url("../img/volume_icon_sql.png"); background-position:0 0; }
.elfinder-tree .elfinder-navbar-root-dropbox .elfinder-navbar-icon { background-image:url("../img/volume_icon_dropbox.png"); background-position:0 0; }
@ -2160,6 +2184,18 @@ button.elfinder-info-button {
opacity: .5; filter:Alpha(Opacity=50);
}
/* pager button */
.elfinder-navbar-pager {
width: 100%;
box-sizing: border-box;
padding-top: 3px;
padding-bottom: 3px;
}
.elfinder-touch .elfinder-navbar-pager {
padding-top: 10px;
padding-bottom: 10px;
}
.elfinder-places {
border: none;
margin: 0;
@ -2849,7 +2885,9 @@ embed.elfinder-quicklook-preview-audio {
.elfinder-button-icon-open { background-position: 0 -176px; }
.elfinder-button-icon-mkdir { background-position: 0 -192px; }
.elfinder-button-icon-mkfile { background-position: 0 -208px; }
.elfinder-button-icon-rm { background-position: 0 -224px; }
.elfinder-button-icon-rm { background-position: 0 -832px; }
.elfinder-button-icon-trash { background-position: 0 -224px; }
.elfinder-button-icon-restore { background-position: 0 -816px; }
.elfinder-button-icon-copy { background-position: 0 -240px; }
.elfinder-button-icon-cut { background-position: 0 -256px; }
.elfinder-button-icon-paste { background-position: 0 -272px; }
@ -2882,6 +2920,7 @@ embed.elfinder-quicklook-preview-audio {
.elfinder-button-icon-colwidth { background-position: 0 -768px; }
.elfinder-button-icon-fullscreen { background-position: 0 -784px; }
.elfinder-button-icon-unfullscreen{ background-position: 0 -800px; }
.elfinder-button-icon-empty { background-position: 0 -848px; }
/* button with dropdown menu*/
.elfinder .elfinder-menubutton { overflow:visible; }

File diff suppressed because one or more lines are too long

View File

@ -27,6 +27,10 @@
.elfinder-workzone { background:#fff; }
/* current directory */
/* Is in trash */
.elfinder-cwd-wrapper.elfinder-cwd-wrapper-trash {
background-color: #f0efef;
}
/* selected file in "icons" view */
.elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-hover { background:#ccc; }

Binary file not shown.

After

Width:  |  Height:  |  Size: 532 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 770 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 550 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 662 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 993 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 979 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 296 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 768 B

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -25,6 +25,7 @@
direction : 'ltr',
dateFormat : 'd.m.Y H:i', // Mar 13, 2012 05:27 PM
fancyDateFormat : '$1 H:i', // will produce smth like: Today 12:25 PM
nonameDateFormat : 'ymd-His', // to apply if upload file is noname: 120513172700
messages : {
/********************************** errors **********************************/
@ -56,6 +57,7 @@
'errLocked' : '"$1" is locked and can not be renamed, moved or removed.',
'errExists' : 'File named "$1" already exists.',
'errInvName' : 'Invalid file name.',
'errInvDirname' : 'Invalid folder name.', // from v2.1.24 added 12.4.2017
'errFolderNotFound' : 'Folder not found.',
'errFileNotFound' : 'File not found.',
'errTrgFolderNotFound' : 'Target folder "$1" not found.',
@ -81,6 +83,7 @@
'errMove' : 'Unable to move "$1".',
'errCopyInItself' : 'Unable to copy "$1" into itself.',
'errRm' : 'Unable to remove "$1".',
'errTrash' : 'Unable into trash.', // from v2.1.24 added 30.4.2017
'errRmSrc' : 'Unable remove source file(s).',
'errExtract' : 'Unable to extract files from "$1".',
'errArchive' : 'Unable to create archive.',
@ -108,12 +111,16 @@
'errFtpMkdir' : 'Unable to create remote directory on FTP: "$1"',
'errArchiveExec' : 'Error while archiving files: "$1"',
'errExtractExec' : 'Error while extracting files: "$1"',
'errNetUnMount' : 'Unable to unmount', // from v2.1 added 30.04.2012
'errNetUnMount' : 'Unable to unmount.', // from v2.1 added 30.04.2012
'errConvUTF8' : 'Not convertible to UTF-8', // from v2.1 added 08.04.2014
'errFolderUpload' : 'Try the modern browser, If you\'d like to upload the folder.', // from v2.1 added 26.6.2015
'errSearchTimeout' : 'Timed out while searching "$1". Search result is partial.', // from v2.1 added 12.1.2016
'errReauthRequire' : 'Re-authorization is required.', // from v2.1.10 added 24.3.2016
'errMaxTargets' : 'Max number of selectable items is $1.', // from v2.1.17 added 17.10.2016
'errRestore' : 'Unable to restore from the trash. Can\'t identify the restore destination.', // from v2.1.24 added 3.5.2017
'errEditorNotFound' : 'Editor not found to this file type.', // from v2.1.25 added 23.5.2017
'errServerError' : 'Error occurred on the server side.', // from v2.1.25 added 16.6.2017
'errEmpty' : 'Unable to empty folder "$1".', // from v2.1.25 added 22.6.2017
/******************************* commands names ********************************/
'cmdarchive' : 'Create archive',
@ -138,6 +145,8 @@
'cmdreload' : 'Reload',
'cmdrename' : 'Rename',
'cmdrm' : 'Delete',
'cmdtrash' : 'Into trash', //from v2.1.24 added 29.4.2017
'cmdrestore' : 'Restore', //from v2.1.24 added 3.5.2017
'cmdsearch' : 'Find files',
'cmdup' : 'Go to parent directory',
'cmdupload' : 'Upload files',
@ -152,6 +161,7 @@
'cmdcolwidth' : 'Reset column width', // from v2.1.13 added 12.06.2016
'cmdfullscreen': 'Full Screen', // from v2.1.15 added 03.08.2016
'cmdmove' : 'Move', // from v2.1.15 added 21.08.2016
'cmdempty' : 'Empty the folder', // from v2.1.25 added 22.06.2017
/*********************************** buttons ***********************************/
'btnClose' : 'Close',
@ -172,17 +182,22 @@
'btnFileName':'Filename', // from v2.1 added 22.5.2015
'btnSaveClose': 'Save & Close', // from v2.1 added 12.6.2015
'btnBackup' : 'Backup', // fromv2.1 added 28.11.2015
'btnRename' : 'Rename', // from v2.1.24 added 6.4.2017
'btnRenameAll' : 'Rename(All)', // from v2.1.24 added 6.4.2017
'btnPrevious' : 'Prev ($1/$2)', // from v2.1.24 added 11.5.2017
'btnNext' : 'Next ($1/$2)', // from v2.1.24 added 11.5.2017
'btnSaveAs' : 'Save As', // from v2.1.25 added 24.5.2017
/******************************** notifications ********************************/
'ntfopen' : 'Open folder',
'ntffile' : 'Open file',
'ntfreload' : 'Reload folder content',
'ntfmkdir' : 'Creating directory',
'ntfmkdir' : 'Creating folder',
'ntfmkfile' : 'Creating files',
'ntfrm' : 'Delete files',
'ntfcopy' : 'Copy files',
'ntfmove' : 'Move files',
'ntfprepare' : 'Prepare to copy files',
'ntfprepare' : 'Checking existing items',
'ntfrename' : 'Rename files',
'ntfupload' : 'Uploading files',
'ntfdownload' : 'Downloading files',
@ -203,6 +218,12 @@
'ntfzipdl' : 'Creating a file for download', // from v2.1.7 added 23.1.2016
'ntfparents' : 'Getting path infomation', // from v2.1.17 added 2.11.2016
'ntfchunkmerge': 'Processing the uploaded file', // from v2.1.17 added 2.11.2016
'ntftrash' : 'Doing throw in the trash', // from v2.1.24 added 2.5.2017
'ntfrestore' : 'Doing restore from tha trash', // from v2.1.24 added 3.5.2017
'ntfchkdir' : 'Checking destination folder', // from v2.1.24 added 3.5.2017
/*********************************** volumes *********************************/
'volume_Trash' : 'Trash', //from v2.1.24 added 29.4.2017
/************************************ dates **********************************/
'dateUnknown' : 'unknown',
@ -266,11 +287,13 @@
/********************************** messages **********************************/
'confirmReq' : 'Confirmation required',
'confirmRm' : 'Are you sure you want to remove files?<br/>This cannot be undone!',
'confirmRepl' : 'Replace old file with new one?',
'confirmRm' : 'Are you sure you want to permanently remove items?<br/>This cannot be undone!',
'confirmRepl' : 'Replace old item with new one?',
'confirmRest' : 'Replace existing item with the item in trash?', // fromv2.1.24 added 5.5.2017
'confirmConvUTF8' : 'Not in UTF-8<br/>Convert to UTF-8?<br/>Contents become UTF-8 by saving after conversion.', // from v2.1 added 08.04.2014
'confirmNonUTF8' : 'Character encoding of this file couldn\'t be detected. It need to temporarily convert to UTF-8 for editting.<br/>Please select character encoding of this file.', // from v2.1.19 added 28.11.2016
'confirmNotSave' : 'It has been modified.<br/>Losing work if you do not save changes.', // from v2.1 added 15.7.2015
'confirmTrash' : 'Are you sure you want to move items to trash bin?', //from v2.1.24 added 29.4.2017
'apllyAll' : 'Apply to all',
'name' : 'Name',
'size' : 'Size',
@ -325,8 +348,9 @@
'dropFiles' : 'Drop files here',
'or' : 'or',
'selectForUpload' : 'Select files',
'moveFiles' : 'Move files',
'copyFiles' : 'Copy files',
'moveFiles' : 'Move items',
'copyFiles' : 'Copy items',
'restoreFiles' : 'Restore items', // from v2.1.24 added 5.5.2017
'rmFromPlaces' : 'Remove from places',
'aspectRatio' : 'Aspect ratio',
'scale' : 'Scale',
@ -395,6 +419,11 @@
'saveAsEncoding' : 'Save with the selected encoding', // from v2.1.19 added 2.12.2016
'selectFolder' : 'Select folder', // from v2.1.20 added 13.12.2016
'firstLetterSearch': 'First letter search', // from v2.1.23 added 24.3.2017
'presets' : 'Presets', // from v2.1.25 added 26.5.2017
'tooManyToTrash' : 'It\'s too many items so it can\'t into trash.', // from v2.1.25 added 9.6.2017
'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017
'folderToEmpty' : 'Empty the folder "$1".', // from v2.1.25 added 22.6.2017
'filderIsEmpty' : 'There are no items in a folder "$1".', // from v2.1.25 added 22.6.2017
/********************************** mimetypes **********************************/
'kindUnknown' : 'Unknown',

View File

@ -1,8 +1,8 @@
/**
* Czech translation
* @author Jay Gridley <gridley.jay@hotmail.com>
* @author RobiNN <admin@robonetwork.cf>
* @version 2017-1-16
* @author RobiNN <kelcakrobo@gmail.com>
* @version 2017-04-21
*/
(function(root, factory) {
if (typeof define === 'function' && define.amd) {
@ -14,11 +14,12 @@
}
}(this, function(elFinder) {
elFinder.prototype.i18.cs = {
translator : 'Jay Gridley &lt;gridley.jay@hotmail.com&gt;, RobiNN &lt;admin@robonetwork.cf&gt;',
translator : 'Jay Gridley &lt;gridley.jay@hotmail.com&gt;, RobiNN &lt;kelcakrobo@gmail.com&gt;',
language : 'čeština',
direction : 'ltr',
dateFormat : 'd. m. Y H:i', // Mar 13, 2012 05:27 PM
fancyDateFormat : '$1 H:i', // will produce smth like: Today 12:25 PM
nonameDateFormat : 'ymd-His', // to apply if upload file is noname: 120513172700
messages : {
/********************************** errors **********************************/
@ -50,6 +51,7 @@
'errLocked' : '"$1" je uzamčený a nemůže být přejmenován, přesunut nebo smazán.',
'errExists' : 'Soubor s názvem "$1" již existuje.',
'errInvName' : 'Nesprávný název souboru.',
'errInvDirname' : 'Neplatný název adresáře.', // from v2.1.24 added 12.4.2017
'errFolderNotFound' : 'Složka nenalezena.',
'errFileNotFound' : 'Soubor nenalezen.',
'errTrgFolderNotFound' : 'Cílová složka "$1" nenalezena.',
@ -60,15 +62,15 @@
'errCopyFrom' : 'Kopírování souborů z oddílu "$1" není povoleno.',
'errCopyTo' : 'Kopírování souborů do oddílu "$1" není povoleno.',
'errMkOutLink' : 'Nelze vytvořit odkaz mimo kořenového svazku.', // from v2.1 added 03.10.2015
'errUpload' : 'Chyba nahrávání.', // old name - errUploadCommon
'errUpload' : 'Chyba nahrávání.', // old name - errUploadCommon
'errUploadFile' : 'Nepodařilo se nahrát "$1".', // old name - errUpload
'errUploadNoFiles' : 'Nejsou vybrány žádné soubory k nahrání.',
'errUploadTotalSize' : 'Překročena maximální povolená velikost dat.', // old name - errMaxSize
'errUploadFileSize' : 'Překročena maximální povolená velikost souboru.', // old name - errFileMaxSize
'errUploadFileSize' : 'Překročena maximální povolená velikost souboru.', // old name - errFileMaxSize
'errUploadMime' : 'Nepovolený typ souboru.',
'errUploadTransfer' : '"$1" chyba přenosu.',
'errUploadTemp' : 'Nelze vytvořit dočasný soubor pro upload.', // from v2.1 added 26.09.2015
'errNotReplace' : 'Objekt "$1" v tomto umístění již existuje a nelze jej nahradit s jiným typem objektu.',
'errNotReplace' : 'Objekt "$1" v tomto umístění již existuje a nelze jej nahradit s jiným typem objektu.', // new
'errReplace' : 'Nelze nahradit "$1".',
'errSave' : '"$1" nelze uložit.',
'errCopy' : '"$1" nelze zkopírovat.',
@ -82,18 +84,18 @@
'errNoArchive' : 'Soubor není archív nebo má nepodporovaný formát.',
'errCmdNoSupport' : 'Backend tento příkaz nepodporuje.',
'errReplByChild' : 'Složka "$1" nemůže být nahrazena souborem, který sama obsahuje.',
'errArcSymlinks' : 'Z bezpečnostních důvodů je zakázáno rozbalit archívy obsahující symlinky.',
'errArcSymlinks' : 'Z bezpečnostních důvodů je zakázáno rozbalit archívy obsahující symlinky.', // edited 24.06.2012
'errArcMaxSize' : 'Soubory archívu překračují maximální povolenou velikost.',
'errResize' : 'Nepodařilo se změnit velikost obrázku "$1".',
'errResizeDegree' : 'Neplatný stupeň rotace.', // added 7.3.2013
'errResizeRotate' : 'Nelze otočit obrázek.', // added 7.3.2013
'errResizeSize' : 'Neplatná velikost obrázku.', // added 7.3.2013
'errResizeNoChange' : 'Velikost obrazu se nezmění.', // added 7.3.2013
'errResizeDegree' : 'Neplatný stupeň rotace.', // added 7.3.2013
'errResizeRotate' : 'Nelze otočit obrázek.', // added 7.3.2013
'errResizeSize' : 'Neplatná velikost obrázku.', // added 7.3.2013
'errResizeNoChange' : 'Velikost obrazu se nezmění.', // added 7.3.2013
'errUsupportType' : 'Nepodporovaný typ souboru.',
'errNotUTF8Content' : 'Soubor "$1" nemá ani obsah kódovaný v UTF-8 a nelze změnit.', // added 9.11.2011
'errNotUTF8Content' : 'Soubor "$1" nemá ani obsah kódovaný v UTF-8 a nelze změnit.', // added 9.11.2011
'errNetMount' : 'Není možné se připojit "$ 1".', // added 17.04.2012
'errNetMountNoDriver' : 'Nepodporovaný protokol.', // added 17.04.2012
'errNetMountFailed' : 'Připojení se nezdařilo.', // added 17.04.2012
'errNetMountNoDriver' : 'Nepodporovaný protokol.', // added 17.04.2012
'errNetMountFailed' : 'Připojení se nezdařilo.', // added 17.04.2012
'errNetMountHostReq' : 'Hostitel se vyžaduje.', // added 18.04.2012
'errSessionExpires' : 'Relace byla ukončena z důvodu nečinnosti.',
'errCreatingTempDir' : 'Nelze vytvořit dočasný adresář: "$1"',
@ -106,7 +108,7 @@
'errConvUTF8' : 'Nelze převést na UTF-8', // from v2.1 added 08.04.2014
'errFolderUpload' : 'Pokud chcete nahrát do složky, zkuste použít prohlížeč Google Chrome.', // from v2.1 added 26.6.2015
'errSearchTimeout' : 'Vypršení časového limitu při hledání "$1". Je částečně výsledkem hledání.', // from v2.1 added 12.1.2016
'errReauthRequire' : 'Opětovné povolení je nutné.', // from v2.1.10 added 3.24.2016
'errReauthRequire' : 'Opětovné povolení je nutné.', // from v2.1.10 added 24.3.2016
'errMaxTargets' : 'Maximální počet volitelných předmětů je $1.', // from v2.1.17 added 17.10.2016
/******************************* commands names ********************************/
@ -155,17 +157,19 @@
'btnCancel' : 'Zrušit',
'btnNo' : 'Ne',
'btnYes' : 'Ano',
'btnMount' : 'Připojit', // added 18.04.2012
'btnMount' : 'Připojit', // added 18.04.2012
'btnApprove': 'Přejít do části 1 $ & schválit', // from v2.1 added 26.04.2012
'btnUnmount': 'Odpojit', // from v2.1 added 30.04.2012
'btnConv' : 'Převést', // from v2.1 added 08.04.2014
'btnCwd' : 'Tu', // from v2.1 added 22.5.2015
'btnVolume' : 'Médium', // from v2.1 added 22.5.2015
'btnAll' : 'Všechno', // from v2.1 added 22.5.2015
'btnCwd' : 'Tu', // from v2.1 added 22.5.2015
'btnVolume' : 'Médium', // from v2.1 added 22.5.2015
'btnAll' : 'Všechno', // from v2.1 added 22.5.2015
'btnMime' : 'MIME typ', // from v2.1 added 22.5.2015
'btnFileName':'Název souboru', // from v2.1 added 22.5.2015
'btnFileName':'Název souboru', // from v2.1 added 22.5.2015
'btnSaveClose': 'Uložit & zavřít', // from v2.1 added 12.6.2015
'btnBackup' : 'Zálohovat', // from v2.1 added 28.11.2015
'btnBackup' : 'Zálohovat', // fromv2.1 added 28.11.2015
'btnRename' : 'Přejmenovat', // from v2.1.24 added 6.4.2017
'btnRenameAll' : 'Přejmenovat vše', // from v2.1.24 added 6.4.2017
/******************************** notifications ********************************/
'ntfopen' : 'Otevírání složky',
@ -248,15 +252,15 @@
'sortdate' : 'dle data',
'sortFoldersFirst' : 'Napřed složky',
'sortperm' : 'dle povolení', // from v2.1.13 added 13.06.2016
'sortmode' : 'dle módu', // from v2.1.13 added 13.06.2016
'sortowner' : 'dle majitele', // from v2.1.13 added 13.06.2016
'sortgroup' : 'dle skupiny', // from v2.1.13 added 13.06.2016
'sortAlsoTreeview' : 'Také stromové zobrazení', // from v2.1.15 added 01.08.2016
'sortmode' : 'dle módu', // from v2.1.13 added 13.06.2016
'sortowner' : 'dle majitele', // from v2.1.13 added 13.06.2016
'sortgroup' : 'dle skupiny', // from v2.1.13 added 13.06.2016
'sortAlsoTreeview' : 'Také stromové zobrazení', // from v2.1.15 added 01.08.2016
/********************************** new items **********************************/
'untitled file.txt' : 'Nový textový soubor.txt', // added 10.11.2015
'untitled folder' : 'Nová složka', // added 10.11.2015
'Archive' : 'Nový archiv', // from v2.1 added 10.11.2015
'untitled folder' : 'Nová složka', // added 10.11.2015
'Archive' : 'Nový archiv', // from v2.1 added 10.11.2015
/********************************** messages **********************************/
'confirmReq' : 'Požadováno potvrzení',
@ -338,12 +342,12 @@
'port' : 'Port', // added 18.04.2012
'user' : 'Uživatel', // added 18.04.2012
'pass' : 'Heslo', // added 18.04.2012
'confirmUnmount' : 'Chcete odpojit $1?', // from v2.1 added 30.04.2012
'confirmUnmount' : 'Chcete odpojit $1?', // from v2.1 added 30.04.2012
'dropFilesBrowser': 'Přemístěte nebo přesuňte soubory z prohlížeče', // from v2.1 added 30.05.2012
'dropPasteFiles' : 'Zde přemístěte nebo přesuňte soubory a adresy URL', // from v2.1 added 07.04.2014
'encoding' : 'Kódování', // from v2.1 added 19.12.2014
'locale' : 'Lokalizce', // from v2.1 added 19.12.2014
'searchTarget' : 'Cíl: $1', // from v2.1 added 22.5.2015
'locale' : 'Lokalizce', // from v2.1 added 19.12.2014
'searchTarget' : 'Cíl: $1', // from v2.1 added 22.5.2015
'searchMime' : 'Vyhledávání podle vstupního MIME typu', // from v2.1 added 22.5.2015
'owner' : 'Majitel', // from v2.1 added 20.6.2015
'group' : 'Skupina', // from v2.1 added 20.6.2015
@ -355,8 +359,8 @@
'emptyFolderDrop' : 'Složka je prázdná, přesunout nebo zkontrolovat položky', // from v2.1.6 added 30.12.2015
'emptyFolderLTap' : 'Složka je prázdná, dlouhim kliknutím přidáte položky', // from v2.1.6 added 30.12.2015
'quality' : 'Kvalita', // from v2.1.6 added 5.1.2016
'autoSync' : 'Automatická synchronizace', // from v2.1.6 added 10.1.2016
'moveUp' : 'Přesunout nahoru', // from v2.1.6 added 18.1.2016
'autoSync' : 'Automatická synchronizace', // from v2.1.6 added 10.1.2016
'moveUp' : 'Přesunout nahoru', // from v2.1.6 added 18.1.2016
'getLink' : 'Získat URL odkaz', // from v2.1.7 added 9.2.2016
'selectedItems' : 'Vybrané položky ($1)', // from v2.1.7 added 2.19.2016
'folderId' : 'ID složky', // from v2.1.10 added 3.25.2016
@ -373,8 +377,8 @@
'reinstate' : 'Obnovit', // from v2.1.15 added 3.8.2016
'complete' : '$1 kompletní', // from v2.1.15 added 21.8.2016
'contextmenu' : 'Kontextové menu', // from v2.1.15 added 9.9.2016
'pageTurning' : 'Otáčení stránky', // from v2.1.15 added 9.10.2016
'volumeRoots' : 'Kořeny média', // from v2.1.16 added 16.10.2016
'pageTurning' : 'Otáčení stránky', // from v2.1.15 added 10.9.2016
'volumeRoots' : 'Kořeny média', // from v2.1.16 added 16.9.2016
'reset' : 'Reset', // from v2.1.16 added 1.10.2016
'bgcolor' : 'Barva pozadí', // from v2.1.16 added 1.10.2016
'colorPicker' : 'Výběr barvy', // from v2.1.16 added 1.10.2016
@ -382,11 +386,13 @@
'enabled' : 'Povoleno', // from v2.1.16 added 4.10.2016
'disabled' : 'Zakázáno', // from v2.1.16 added 4.10.2016
'emptyIncSearch' : 'Výsledky hledání jsou prázdné v aktuálním zobrazení.\\Stisknutím tlačítka [Enter] rozšíříte vyhledávání cíle.', // from v2.1.16 added 5.10.2016
'emptyLetSearch' : 'Výsledky vyhledávání prvního listu jsou v aktuálním zobrazení prázdné.', // from v2.1.23 added 24.3.2017
'textLabel' : 'Nápis textu', // from v2.1.17 added 13.10.2016
'minsLeft' : '$1 minut zůstává', // from v2.1.17 added 13.11.2016
'openAsEncoding' : 'Otevřít pomocí zvoleného kódování', // from v2.1.19 added 2.12.2016
'saveAsEncoding' : 'Uložit s vybraným kódováním', // from v2.1.19 added 2.12.2016
'selectFolder' : 'Vyberte složku', // from v2.1.20 added 13.12.2016
'firstLetterSearch': 'Hledání prvního listu', // from v2.1.23 added 24.3.2017
/********************************** mimetypes **********************************/
'kindUnknown' : 'Neznámý',
@ -417,7 +423,7 @@
'kindOTF' : 'Open Type font',
'kindRPM' : 'RPM balíček',
// texts
'kindText' : 'Textový dokument',
'kindText' : 'Textový dokument',
'kindTextPlain' : 'Čistý text',
'kindPHP' : 'PHP zdrojový kód',
'kindCSS' : 'Kaskádové styly',
@ -471,3 +477,4 @@
}
};
}));

View File

@ -1,7 +1,8 @@
/**
* Indonesian translation
* Bahasa Indonesia translation
* @author Suyadi <1441177004009@student.unsika.ac.id>
* @version 2015-07-27
* @author Ammar Faizi <ammarfaizi2@gmail.com>
* @version 2017-05-28
*/
(function(root, factory) {
if (typeof define === 'function' && define.amd) {
@ -12,362 +13,486 @@
factory(root.elFinder);
}
}(this, function(elFinder) {
elFinder.prototype.i18.id = {
translator : 'Suyadi &lt;1441177004009@student.unsika.ac.id&gt;',
language : 'Bahasa Indonesia',
direction : 'ltr',
dateFormat : 'j F, Y H:i',
fancyDateFormat : '$1 H:i',
messages : {
elFinder.prototype.i18.id = {
translator : 'Suyadi &lt;1441177004009@student.unsika.ac.id&gt;, Ammar Faizi &lt;ammarfaizi2@gmail.com&gt;',
language : 'Bahasa Indonesia',
direction : 'ltr',
dateFormat : 'j F, Y H:i', // Mar 13, 2012 05:27 PM
fancyDateFormat : '$1 H:i', // will produce smth like: Today 12:25 PM
nonameDateFormat : 'd m Y - H : i : s', // to apply if upload file is noname: 120513172700
messages : {
/********************************** errors **********************************/
'error' : 'Kesalahan',
'errUnknown' : 'Kesalahan tak dikenal.',
'errUnknownCmd' : 'Perintah tak dikenal.',
'errJqui' : 'Konfigurasi jQuery UI tidak valid. Komponen pemilih, penyeret dan penaruh harus disertakan.',
'errNode' : 'elFinder membutuhkan pembuatan elemen DOM.',
'errURL' : 'Konfigurasi elFinder tidak valid! opsi URL belum diatur.',
'errAccess' : 'Akses ditolak.',
'errConnect' : 'Tidak dapat tersambung ke backend.',
'errAbort' : 'Koneksi dibatalkan.',
'errTimeout' : 'Waktu koneksi habis.',
'errNotFound' : 'Backend tidak ditemukan.',
'errResponse' : 'Respon backend tidak valid.',
'errConf' : 'Konfigurasi elFinder tidak valid.',
'errJSON' : 'Modul PHP JSON belum terpasang.',
'errNoVolumes' : 'Tidak tersedia ruang kosong.',
'errCmdParams' : 'Parameter perintah "$1" tidak valid.',
'errDataNotJSON' : 'Data bukan merupakan JSON.',
'errDataEmpty' : 'Data masih kosong.',
'errCmdReq' : 'Permintaan ke backend membutuhkan nama perintah.',
'errOpen' : 'Tidak dapat membuka "$1".',
'errNotFolder' : 'Obyek ini bukan folder.',
'errNotFile' : 'Obyek ini bukan berkas.',
'errRead' : 'Tidak dapat membaca "$1".',
'errWrite' : 'Tidak dapat menulis ke "$1".',
'errPerm' : 'Ijin ditolak.',
'errLocked' : '"$1" ini terkunci dan tak dapat dipidahkan, diubah atau dihapus.',
'errExists' : 'Berkas bernama "$1" sudah ada.',
'errInvName' : 'Nama berkas tidak valid.',
'errFolderNotFound' : 'Folder tidak ditemukan.',
'errFileNotFound' : 'Berkas tidak ditemukan.',
'errTrgFolderNotFound' : 'Folder tujuan "$1" tidak ditemukan.',
'errPopup' : 'Peramban anda mencegah untuk membuka jendela munculan. Untuk dapat membuka berkas ini ubah pengaturan pada peramban anda.',
'errMkdir' : 'Tidak dapat membuat folder "$1".',
'errMkfile' : 'Tidak dapat membuat berkas "$1".',
'errRename' : 'Tidak dapat mengubah nama "$1".',
'errCopyFrom' : 'Tidak diizinkan menyalin berkas dari volume "$1".',
'errCopyTo' : 'tidak diizinkan menyalin berkas ke volume "$1".',
'errUpload' : 'Kesalahan saat mengunggah.',
'errUploadFile' : 'Tidak dapat mengunggah "$1".',
'errUploadNoFiles' : 'Tak ada berkas untuk diunggah.',
'errUploadTotalSize' : 'Data melampaui ukuran yang diperbolehkan.',
'errUploadFileSize' : 'Berkas melampaui ukuran yang diperbolehkan.',
'errUploadMime' : 'Jenis berkas ini tidak diijinkan.',
'errUploadTransfer' : 'Kesalahan transfer "$1".',
'errNotReplace' : 'Obyek "$1" sudah ada di lokasi ini dan tidak dapat ditimpa oleh obyek jenis lain.', // new
'errReplace' : 'Tidak dapat menimpa "$1".',
'errSave' : 'Tidak dapat menyimpan "$1".',
'errCopy' : 'Tidak dapat menyalin "$1".',
'errMove' : 'Tidak dapat memindahkan "$1".',
'errCopyInItself' : 'Tidak dapat menyalin "$1" ke dirinya sendiri.',
'errRm' : 'Tidak dapat menghapus "$1".',
'errRmSrc' : 'Tidak dapat menghapus sumber berkas.',
'errExtract' : 'Tidak dapat mengekstrak berkas dari "$1".',
'errArchive' : 'Tidak dapat membuat arsip.',
'errArcType' : 'Jenis arsip tidak didukung.',
'errNoArchive' : 'Berkas ini bukan arsip atau arsip jenis ini tidak didukung.',
'errCmdNoSupport' : 'Backend tidak mendukung perintah ini.',
'errReplByChild' : 'Folder “$1” tidak dapat ditimpa dengan berkas didalamnya.',
'errArcSymlinks' : 'Untuk keamanan tak diijinkan mengekstrak arsip berisi symlink atau jenis berkas yang tak diijinkan.', // edited 24.06.2012
'errArcMaxSize' : 'Arsip ini melampaui ukuran yang diijinkan.',
'errResize' : 'Tidak dapat mengubah ukuran "$1".',
'errResizeDegree' : 'Derajat putaran tidak valid.',
'errResizeRotate' : 'Citra tidak diputar.',
'errResizeSize' : 'Ukuran citra tidak valid.',
'errResizeNoChange' : 'Ukuran citra tidak diubah.',
'errUsupportType' : 'Jenis berkas tidak didukung.',
'errNotUTF8Content' : 'Berkas "$1" tidak dalam format UTF-8 dan tidak dapat disunting.',
'errNetMount' : 'Tidak dapat membaca susunan "$1".',
'errNetMountNoDriver' : 'Protokol tidak didukung.',
'errNetMountFailed' : 'Tidak dapat membaca susunannya.',
'errNetMountHostReq' : 'Host harus ada.',
'errSessionExpires' : 'Sesi anda telah kadaluwarsa karena lama tidak aktif.',
'errCreatingTempDir' : 'Tidak dapat membuat direktori sementara: "$1"',
'errFtpDownloadFile' : 'Tidak dapat mengunduh berkas dari FTP: "$1"',
'errFtpUploadFile' : 'Tidak dapat mengunggah berkas dari FTP: "$1"',
'errFtpMkdir' : 'Tidak dapat membuat remot direktori dari FTP: "$1"',
'errArchiveExec' : 'Kesalahan saat mengarsipkan berkas: "$1"',
'errExtractExec' : 'Kesalahan saat mengekstrak berkas: "$1"',
/********************************** errors **********************************/
'error' : 'Kesalahan',
'errUnknown' : 'Kesalahan tak dikenal.',
'errUnknownCmd' : 'Perintah tak dikenal.',
'errJqui' : 'Konfigurasi jQuery UI tidak valid. Komponen pemilih, penyeret dan penaruh harus disertakan.',
'errNode' : 'elFinder membutuhkan pembuatan elemen DOM.',
'errURL' : 'Konfigurasi elFinder tidak valid! opsi URL belum diatur.',
'errAccess' : 'Akses ditolak.',
'errConnect' : 'Tidak dapat tersambung ke backend.',
'errAbort' : 'Koneksi dibatalkan.',
'errTimeout' : 'Waktu koneksi habis.',
'errNotFound' : 'Backend tidak ditemukan.',
'errResponse' : 'Respon backend tidak valid.',
'errConf' : 'Konfigurasi elFinder tidak valid.',
'errJSON' : 'Modul PHP JSON belum terpasang.',
'errNoVolumes' : 'Tidak tersedia ruang kosong.',
'errCmdParams' : 'Parameter perintah "$1" tidak valid.',
'errDataNotJSON' : 'Data bukan merupakan JSON.',
'errDataEmpty' : 'Data masih kosong.',
'errCmdReq' : 'Permintaan ke backend membutuhkan nama perintah.',
'errOpen' : 'Tidak dapat membuka "$1".',
'errNotFolder' : 'Obyek ini bukan folder.',
'errNotFile' : 'Obyek ini bukan berkas.',
'errRead' : 'Tidak dapat membaca "$1".',
'errWrite' : 'Tidak dapat menulis ke "$1".',
'errPerm' : 'Ijin ditolak.',
'errLocked' : '"$1" ini terkunci dan tak dapat dipidahkan, diubah atau dihapus.',
'errExists' : 'Berkas bernama "$1" sudah ada.',
'errInvName' : 'Nama berkas tidak valid.',
'errInvDirname' : 'Nama folder salah.', // from v2.1.24 added 12.4.2017
'errFolderNotFound' : 'Folder tidak ditemukan.',
'errFileNotFound' : 'Berkas tidak ditemukan.',
'errTrgFolderNotFound' : 'Folder tujuan "$1" tidak ditemukan.',
'errPopup' : 'Peramban anda mencegah untuk membuka jendela munculan. Untuk dapat membuka berkas ini ubah pengaturan pada peramban anda.',
'errMkdir' : 'Tidak dapat membuat folder "$1".',
'errMkfile' : 'Tidak dapat membuat berkas "$1".',
'errRename' : 'Tidak dapat mengubah nama "$1".',
'errCopyFrom' : 'Tidak diizinkan menyalin berkas dari volume "$1".',
'errCopyTo' : 'tidak diizinkan menyalin berkas ke volume "$1".',
'errMkOutLink' : 'Tidak dapat membuat tautan diluar volume root.', // from v2.1 added 03.10.2015
'errUpload' : 'Kesalahan saat mengunggah.', // old name - errUploadCommon
'errUploadFile' : 'Tidak dapat mengunggah "$1".', // old name - errUpload
'errUploadNoFiles' : 'Tak ada berkas untuk diunggah.',
'errUploadTotalSize' : 'Data melampaui ukuran yang diperbolehkan.', // old name - errMaxSize
'errUploadFileSize' : 'Berkas melampaui ukuran yang diperbolehkan.', // old name - errFileMaxSize
'errUploadMime' : 'Jenis berkas ini tidak diijinkan.',
'errUploadTransfer' : 'Kesalahan transfer "$1".',
'errUploadTemp' : 'Tidak dapat membuat file sementara untuk diupload.', // from v2.1 added 26.09.2015
'errNotReplace' : 'Obyek "$1" sudah ada di lokasi ini dan tidak dapat ditimpa oleh obyek jenis lain.', // new
'errReplace' : 'Tidak dapat menimpa "$1".',
'errSave' : 'Tidak dapat menyimpan "$1".',
'errCopy' : 'Tidak dapat menyalin "$1".',
'errMove' : 'Tidak dapat memindahkan "$1".',
'errCopyInItself' : 'Tidak dapat menyalin "$1" ke dirinya sendiri.',
'errRm' : 'Tidak dapat menghapus "$1".',
'errTrash' : 'Tidak dapat masuk ke tempat sampah.', // from v2.1.24 added 30.4.2017
'errRmSrc' : 'Tidak dapat menghapus sumber berkas.',
'errExtract' : 'Tidak dapat mengekstrak berkas dari "$1".',
'errArchive' : 'Tidak dapat membuat arsip.',
'errArcType' : 'Jenis arsip tidak didukung.',
'errNoArchive' : 'Berkas ini bukan arsip atau arsip jenis ini tidak didukung.',
'errCmdNoSupport' : 'Backend tidak mendukung perintah ini.',
'errReplByChild' : 'Folder “$1” tidak dapat ditimpa dengan berkas didalamnya.',
'errArcSymlinks' : 'Untuk keamanan tak diijinkan mengekstrak arsip berisi symlink atau jenis berkas yang tak diijinkan.', // edited 24.06.2012
'errArcMaxSize' : 'Arsip ini melampaui ukuran yang diijinkan.',
'errResize' : 'Tidak dapat mengubah ukuran "$1".',
'errResizeDegree' : 'Derajat putaran tidak valid.', // added 7.3.2013
'errResizeRotate' : 'Citra tidak diputar.', // added 7.3.2013
'errResizeSize' : 'Ukuran citra tidak valid.', // added 7.3.2013
'errResizeNoChange' : 'Ukuran citra tidak diubah.', // added 7.3.2013
'errUsupportType' : 'Jenis berkas tidak didukung.',
'errNotUTF8Content' : 'Berkas "$1" tidak dalam format UTF-8 dan tidak dapat disunting.', // added 9.11.2011
'errNetMount' : 'Tidak dapat membaca susunan "$1".', // added 17.04.2012
'errNetMountNoDriver' : 'Protokol tidak didukung.', // added 17.04.2012
'errNetMountFailed' : 'Tidak dapat membaca susunannya.', // added 17.04.2012
'errNetMountHostReq' : 'Host harus ada.', // added 18.04.2012
'errSessionExpires' : 'Sesi anda telah kadaluwarsa karena lama tidak aktif.',
'errCreatingTempDir' : 'Tidak dapat membuat direktori sementara: "$1"',
'errFtpDownloadFile' : 'Tidak dapat mengunduh berkas dari FTP: "$1"',
'errFtpUploadFile' : 'Tidak dapat mengunggah berkas dari FTP: "$1"',
'errFtpMkdir' : 'Tidak dapat membuat remot direktori dari FTP: "$1"',
'errArchiveExec' : 'Kesalahan saat mengarsipkan berkas: "$1"',
'errExtractExec' : 'Kesalahan saat mengekstrak berkas: "$1"',
'errNetUnMount' : 'Tidak dapat melakukan mount.', // from v2.1 added 30.04.2012
'errConvUTF8' : 'Tidak cocok untuk konversi ke UTF-8', // from v2.1 added 08.04.2014
'errFolderUpload' : 'Coba dengan browser yang modern, Jika akan mengupload folder.', // from v2.1 added 26.6.2015
'errSearchTimeout' : 'Waktu habis selama melakukan pencarian "$1". Hasil sementara.', // from v2.1 added 12.1.2016
'errReauthRequire' : 'Re-authorization dibutuhkan.', // from v2.1.10 added 24.3.2016
'errMaxTargets' : 'Berkas maksimal yang dipilih adalah $1.', // from v2.1.17 added 17.10.2016
'errRestore' : 'Tidak dapat mengembalikan berkas dari tempat sampah. Tujuan tidak ditemukan.', // from v2.1.24 added 3.5.2017
'errEditorNotFound' : 'Tidak ditemukan editor untuk file tipe ini.', // from v2.1.25 added 23.5.2017
/******************************* commands names ********************************/
'cmdarchive' : 'Buat arsip',
'cmdback' : 'Kembali',
'cmdcopy' : 'Salin',
'cmdcut' : 'Potong',
'cmddownload' : 'Unduh',
'cmdduplicate' : 'Gandakan',
'cmdedit' : 'Sunting berkas',
'cmdextract' : 'Ekstrak berkas dari arsip',
'cmdforward' : 'Maju',
'cmdgetfile' : 'Pilih berkas',
'cmdhelp' : 'Tentang software ini',
'cmdhome' : 'Rumah',
'cmdinfo' : 'Dapatkan info',
'cmdmkdir' : 'Buat folder',
'cmdmkfile' : 'Buat berkas teks',
'cmdopen' : 'Buka',
'cmdpaste' : 'Tempel',
'cmdquicklook' : 'Pratinjau',
'cmdreload' : 'Muat-ulang',
'cmdrename' : 'Ganti nama',
'cmdrm' : 'Hapus',
'cmdsearch' : 'Cari berkas',
'cmdup' : 'Ke direktori utama',
'cmdupload' : 'Unggah berkas',
'cmdview' : 'Lihat',
'cmdresize' : 'Ubah ukuran & Putar',
'cmdsort' : 'Urutkan',
'cmdnetmount' : 'Baca-susun volume jaringan', // added 18.04.2012
/******************************* commands names ********************************/
'cmdarchive' : 'Buat arsip',
'cmdback' : 'Kembali',
'cmdcopy' : 'Salin',
'cmdcut' : 'Potong',
'cmddownload' : 'Unduh',
'cmdduplicate' : 'Gandakan',
'cmdedit' : 'Sunting berkas',
'cmdextract' : 'Ekstrak berkas dari arsip',
'cmdforward' : 'Maju',
'cmdgetfile' : 'Pilih berkas',
'cmdhelp' : 'Tentang software ini',
'cmdhome' : 'Rumah',
'cmdinfo' : 'Dapatkan info',
'cmdmkdir' : 'Buat folder',
'cmdmkdirin' : 'Masuk ke folder baru', // from v2.1.7 added 19.2.2016
'cmdmkfile' : 'Buat berkas teks',
'cmdopen' : 'Buka',
'cmdpaste' : 'Tempel',
'cmdquicklook' : 'Pratinjau',
'cmdreload' : 'Muat-ulang',
'cmdrename' : 'Ganti nama',
'cmdrm' : 'Hapus',
'cmdtrash' : 'Sampahkan', //from v2.1.24 added 29.4.2017
'cmdrestore' : 'Kembalikan', //from v2.1.24 added 3.5.2017
'cmdsearch' : 'Cari berkas',
'cmdup' : 'Ke direktori utama',
'cmdupload' : 'Unggah berkas',
'cmdview' : 'Lihat',
'cmdresize' : 'Ubah ukuran & Putar',
'cmdsort' : 'Urutkan',
'cmdnetmount' : 'Baca-susun volume jaringan', // added 18.04.2012
'cmdnetunmount': 'Unmount', // from v2.1 added 30.04.2012
'cmdplaces' : 'Ke Tempat', // added 28.12.2014
'cmdchmod' : 'Mode mengubah', // from v2.1 added 20.6.2015
'cmdopendir' : 'Membuka folder', // from v2.1 added 13.1.2016
'cmdcolwidth' : 'Reset column width', // from v2.1.13 added 12.06.2016
'cmdfullscreen': 'Layar Penuh', // from v2.1.15 added 03.08.2016
'cmdmove' : 'Pindah', // from v2.1.15 added 21.08.2016
/*********************************** buttons ***********************************/
'btnClose' : 'Tutup',
'btnSave' : 'Simpan',
'btnRm' : 'Buang',
'btnApply' : 'Terapkan',
'btnCancel' : 'Batal',
'btnNo' : 'Tidak',
'btnYes' : 'Ya',
'btnMount' : 'Baca susunan',
/******************************** notifications ********************************/
'ntfopen' : 'Buka folder',
'ntffile' : 'Buka berkas',
'ntfreload' : 'Muat-ulang isi folder',
'ntfmkdir' : 'Membuat direktori',
'ntfmkfile' : 'Membuat berkas',
'ntfrm' : 'Menghapus berkas',
'ntfcopy' : 'Salin berkas',
'ntfmove' : 'Pindahkan berkas',
'ntfprepare' : 'Persiapan menyalin berkas',
'ntfrename' : 'Ubah nama berkas',
'ntfupload' : 'Unggah berkas',
'ntfdownload' : 'Mengunduh berkas',
'ntfsave' : 'Simpan berkas',
'ntfarchive' : 'Membuat arsip',
'ntfextract' : 'Mengekstrak berkas dari arsip',
'ntfsearch' : 'Mencari berkas',
'ntfresize' : 'Mengubah ukuran citra',
'ntfsmth' : 'Melakukan sesuatu',
'ntfloadimg' : 'Memuat citra',
'ntfnetmount' : 'Membaca susunan volume jaringan',
'ntfdim' : 'Mendapatkan dimensi citra',
/*********************************** buttons ***********************************/
'btnClose' : 'Tutup',
'btnSave' : 'Simpan',
'btnRm' : 'Buang',
'btnApply' : 'Terapkan',
'btnCancel' : 'Batal',
'btnNo' : 'Tidak',
'btnYes' : 'Ya',
'btnMount' : 'Baca susunan', // added 18.04.2012
'btnApprove': 'Menuju ke $1 & setujui', // from v2.1 added 26.04.2012
'btnUnmount': 'Unmount', // from v2.1 added 30.04.2012
'btnConv' : 'Konversi', // from v2.1 added 08.04.2014
'btnCwd' : 'Disini', // from v2.1 added 22.5.2015
'btnVolume' : 'Volume', // from v2.1 added 22.5.2015
'btnAll' : 'Semua', // from v2.1 added 22.5.2015
'btnMime' : 'MIME Type', // from v2.1 added 22.5.2015
'btnFileName':'Nama file', // from v2.1 added 22.5.2015
'btnSaveClose': 'Simpan & Tutup', // from v2.1 added 12.6.2015
'btnBackup' : 'Backup', // fromv2.1 added 28.11.2015
'btnRename' : 'Ubah nama', // from v2.1.24 added 6.4.2017
'btnRenameAll' : 'Ubah nama(Semua)', // from v2.1.24 added 6.4.2017
'btnPrevious' : 'Sebelumnya ($1/$2)', // from v2.1.24 added 11.5.2017
'btnNext' : 'Selanjutnya ($1/$2)', // from v2.1.24 added 11.5.2017
'btnSaveAs' : 'Simpan sebagai', // from v2.1.25 added 24.5.2017
/************************************ dates **********************************/
'dateUnknown' : 'tak diketahui',
'Today' : 'Hari ini',
'Yesterday' : 'Kemarin',
'msJan' : 'Jan',
'msFeb' : 'Peb',
'msMar' : 'Mar',
'msApr' : 'Apr',
'msMay' : 'Mei',
'msJun' : 'Jun',
'msJul' : 'Jul',
'msAug' : 'Agt',
'msSep' : 'Sep',
'msOct' : 'Okt',
'msNov' : 'Nop',
'msDec' : 'Des',
'January' : 'Januari',
'February' : 'Pebruari',
'March' : 'Maret',
'April' : 'April',
'May' : 'Mei',
'June' : 'Juni',
'July' : 'Juli',
'August' : 'Agustus',
'September' : 'September',
'October' : 'Oktober',
'November' : 'Nopember',
'December' : 'Desember',
'Sunday' : 'Minggu',
'Monday' : 'Senin',
'Tuesday' : 'Selasa',
'Wednesday' : 'Rabu',
'Thursday' : 'Kamis',
'Friday' : 'Jum \'at',
'Saturday' : 'Sabtu',
'Sun' : 'Min',
'Mon' : 'Sen',
'Tue' : 'Sel',
'Wed' : 'Rab',
'Thu' : 'Kam',
'Fri' : 'Jum',
'Sat' : 'Sab',
/******************************** notifications ********************************/
'ntfopen' : 'Buka folder',
'ntffile' : 'Buka berkas',
'ntfreload' : 'Muat-ulang isi folder',
'ntfmkdir' : 'Membuat direktori',
'ntfmkfile' : 'Membuat berkas',
'ntfrm' : 'Menghapus berkas',
'ntfcopy' : 'Salin berkas',
'ntfmove' : 'Pindahkan berkas',
'ntfprepare' : 'Persiapan menyalin berkas',
'ntfrename' : 'Ubah nama berkas',
'ntfupload' : 'Unggah berkas',
'ntfdownload' : 'Mengunduh berkas',
'ntfsave' : 'Simpan berkas',
'ntfarchive' : 'Membuat arsip',
'ntfextract' : 'Mengekstrak berkas dari arsip',
'ntfsearch' : 'Mencari berkas',
'ntfresize' : 'Mengubah ukuran citra',
'ntfsmth' : 'Melakukan sesuatu',
'ntfloadimg' : 'Memuat citra',
'ntfnetmount' : 'Membaca susunan volume jaringan', // added 18.04.2012
'ntfnetunmount': 'Unmounting network volume', // from v2.1 added 30.04.2012
'ntfdim' : 'Mendapatkan dimensi citra', // added 20.05.2013
'ntfreaddir' : 'Membaca informasi folder', // from v2.1 added 01.07.2013
'ntfurl' : 'Mendapatkan URL dari link', // from v2.1 added 11.03.2014
'ntfchmod' : 'Dalam mode mengubah', // from v2.1 added 20.6.2015
'ntfpreupload': 'Sedang memverifikasi nama file yang diupload', // from v2.1 added 31.11.2015
'ntfzipdl' : 'Membuat file untuk didownload', // from v2.1.7 added 23.1.2016
'ntfparents' : 'Mengambil informasi path', // from v2.1.17 added 2.11.2016
'ntfchunkmerge': 'Sedang mengupload file', // from v2.1.17 added 2.11.2016
'ntftrash' : 'Sedang melempar ke tempat sampah', // from v2.1.24 added 2.5.2017
'ntfrestore' : 'Sedang mengembalikan dari tempat sampah', // from v2.1.24 added 3.5.2017
'ntfchkdir' : 'Mengecek folder tujuan', // from v2.1.24 added 3.5.2017
/******************************** sort variants ********************************/
'sortname' : 'menurut nama',
'sortkind' : 'menurut jenis',
'sortsize' : 'menurut ukuran',
'sortdate' : 'menurut tanggal',
'sortFoldersFirst' : 'Utamakan folder',
/*********************************** volumes *********************************/
'volume_Trash' : 'Sampah', //from v2.1.24 added 29.4.2017
/********************************** messages **********************************/
'confirmReq' : 'Diperlukan konfirmasi',
'confirmRm' : 'Anda yakin akan menghapus berkas?<br/>Ini tidak dapat kembalikan!',
'confirmRepl' : 'Timpa berkas lama dengan yang baru?',
'apllyAll' : 'Terapkan ke semua',
'name' : 'Nama',
'size' : 'Ukuran',
'perms' : 'Perijinan',
'modify' : 'Diubah',
'kind' : 'Jenis',
'read' : 'baca',
'write' : 'tulis',
'noaccess' : 'tidak ada akses',
'and' : 'dan',
'unknown' : 'tak diketahui',
'selectall' : 'Pilih semua berkas',
'selectfiles' : 'Pilih berkas',
'selectffile' : 'Pilih berkas pertama',
'selectlfile' : 'Pilih berkas terakhir',
'viewlist' : 'Tampilan daftar',
'viewicons' : 'Tampilan ikon',
'places' : 'Lokasi',
'calc' : 'Hitung',
'path' : 'Alamat',
'aliasfor' : 'Nama lain untuk',
'locked' : 'Dikunci',
'dim' : 'Dimensi',
'files' : 'Berkas',
'folders' : 'Folder',
'items' : 'Pokok',
'yes' : 'ya',
'no' : 'tidak',
'link' : 'Tautan',
'searcresult' : 'Hasil pencarian',
'selected' : 'Pokok terpilih',
'about' : 'Tentang',
'shortcuts' : 'Pintasan',
'help' : 'Bantuan',
'webfm' : 'Pengelola berkas web',
'ver' : 'Versi',
'protocolver' : 'versi protokol',
'homepage' : 'Rumah proyek',
'docs' : 'Dokumentasi',
'github' : 'Ambil kami di Github',
'twitter' : 'Ikuti kami di twitter',
'facebook' : 'Gabung dengan kami di facebook',
'team' : 'Tim',
'chiefdev' : 'kepala pengembang',
'developer' : 'pengembang',
'contributor' : 'kontributor',
'maintainer' : 'pengurus',
'translator' : 'penerjemah',
'icons' : 'Ikon',
'dontforget' : 'dan jangan lupa pakai handukmu',
'shortcutsof' : 'Pintasan dimatikan',
'dropFiles' : 'Seret berkas anda kesini',
'or' : 'atau',
'selectForUpload' : 'Pilih berkas untuk diunggah',
'moveFiles' : 'Pindahkan berkas',
'copyFiles' : 'Salin berkas',
'rmFromPlaces' : 'Hapus dari lokasi',
'aspectRatio' : 'Aspek rasio',
'scale' : 'Skala',
'width' : 'Lebar',
'height' : 'Tinggi',
'resize' : 'Ubah ukuran',
'crop' : 'Potong',
'rotate' : 'Putar',
'rotate-cw' : 'Putar 90 derajat ke kanan',
'rotate-ccw' : 'Putar 90 derajat ke kiri',
'degree' : '°',
'netMountDialogTitle' : 'Baca susunan volume jaringan',
'protocol' : 'Protokol',
'host' : 'Host',
'port' : 'Port',
'user' : 'Pengguna',
'pass' : 'Sandi',
/************************************ dates **********************************/
'dateUnknown' : 'tak diketahui',
'Today' : 'Hari ini',
'Yesterday' : 'Kemarin',
'msJan' : 'Jan',
'msFeb' : 'Feb',
'msMar' : 'Mar',
'msApr' : 'Apr',
'msMay' : 'Mei',
'msJun' : 'Jun',
'msJul' : 'Jul',
'msAug' : 'Agt',
'msSep' : 'Sep',
'msOct' : 'Okt',
'msNov' : 'Nop',
'msDec' : 'Des',
'January' : 'Januari',
'February' : 'Pebruari',
'March' : 'Maret',
'April' : 'April',
'May' : 'Mei',
'June' : 'Juni',
'July' : 'Juli',
'August' : 'Agustus',
'September' : 'September',
'October' : 'Oktober',
'November' : 'Nopember',
'December' : 'Desember',
'Sunday' : 'Minggu',
'Monday' : 'Senin',
'Tuesday' : 'Selasa',
'Wednesday' : 'Rabu',
'Thursday' : 'Kamis',
'Friday' : 'Jum \'at',
'Saturday' : 'Sabtu',
'Sun' : 'Min',
'Mon' : 'Sen',
'Tue' : 'Sel',
'Wed' : 'Rab',
'Thu' : 'Kam',
'Fri' : 'Jum',
'Sat' : 'Sab',
/********************************** mimetypes **********************************/
'kindUnknown' : 'Tak diketahui',
'kindFolder' : 'Folder',
'kindAlias' : 'Nama lain',
'kindAliasBroken' : 'Nama lain rusak',
// applications
'kindApp' : 'Aplikasi',
'kindPostscript' : 'Dokumen postscript',
'kindMsOffice' : 'Dokumen Ms. Office',
'kindMsWord' : 'Dokumen Ms. Word',
'kindMsExcel' : 'Dokumen Ms. Excel',
'kindMsPP' : 'Dokumen Ms. Powerpoint',
'kindOO' : 'Dokumen Open Office',
'kindAppFlash' : 'Aplikasi Flash',
'kindPDF' : 'Portable Document Format (PDF)',
'kindTorrent' : 'Berkas Bittorrent',
'kind7z' : 'Arsip 7z',
'kindTAR' : 'Arsip TAR',
'kindGZIP' : 'Arsip GZIP',
'kindBZIP' : 'Arsip BZIP',
'kindXZ' : 'Arsip XZ',
'kindZIP' : 'Arsip ZIP',
'kindRAR' : 'Arsip RAR',
'kindJAR' : 'Berkas Java JAR',
'kindTTF' : 'Huruf True Type',
'kindOTF' : 'Huruf Open Type',
'kindRPM' : 'Paket RPM',
// texts
'kindText' : 'Dokumen teks',
'kindTextPlain' : 'Berkas teks biasa',
'kindPHP' : 'Kode-sumber PHP',
'kindCSS' : 'Cascading style sheet',
'kindHTML' : 'Dokumen HTML',
'kindJS' : 'Kode-sumber Javascript',
'kindRTF' : 'Berkas Rich Text',
'kindC' : 'Kode-sumber C',
'kindCHeader' : 'Kode-sumber header C',
'kindCPP' : 'Kode-sumber C++',
'kindCPPHeader' : 'Kode-sumber header C++',
'kindShell' : 'Berkas shell Unix',
'kindPython' : 'Kode-sumber Python',
'kindJava' : 'Kode-sumber Java',
'kindRuby' : 'Kode-sumber Ruby',
'kindPerl' : 'Kode-sumber Perl',
'kindSQL' : 'Kode-sumber SQL',
'kindXML' : 'Dokumen XML',
'kindAWK' : 'Kode-sumber AWK',
'kindCSV' : 'Dokumen CSV',
'kindDOCBOOK' : 'Dokumen Docbook XML',
// images
'kindImage' : 'Citra',
'kindBMP' : 'Citra BMP',
'kindJPEG' : 'Citra JPEG',
'kindGIF' : 'Citra GIF',
'kindPNG' : 'Citra PNG',
'kindTIFF' : 'Citra TIFF',
'kindTGA' : 'Citra TGA',
'kindPSD' : 'Citra Adobe Photoshop',
'kindXBITMAP' : 'Citra X bitmap',
'kindPXM' : 'Citra Pixelmator',
// media
'kindAudio' : 'Berkas audio',
'kindAudioMPEG' : 'Berkas audio MPEG',
'kindAudioMPEG4' : 'Berkas audio MPEG-4',
'kindAudioMIDI' : 'Berkas audio MIDI',
'kindAudioOGG' : 'Berkas audio Ogg Vorbis',
'kindAudioWAV' : 'Berkas audio WAV',
'AudioPlaylist' : 'Berkas daftar putar MP3',
'kindVideo' : 'Berkas video',
'kindVideoDV' : 'Berkas video DV',
'kindVideoMPEG' : 'Berkas video MPEG',
'kindVideoMPEG4' : 'Berkas video MPEG-4',
'kindVideoAVI' : 'Berkas video AVI',
'kindVideoMOV' : 'Berkas video Quick Time',
'kindVideoWM' : 'Berkas video Windows Media',
'kindVideoFlash' : 'Berkas video Flash',
'kindVideoMKV' : 'Berkas video Matroska',
'kindVideoOGG' : 'Berkas video Ogg'
}
};
/******************************** sort variants ********************************/
'sortname' : 'menurut nama',
'sortkind' : 'menurut jenis',
'sortsize' : 'menurut ukuran',
'sortdate' : 'menurut tanggal',
'sortFoldersFirst' : 'Utamakan folder',
'sortperm' : 'menurut perizinan', // from v2.1.13 added 13.06.2016
'sortmode' : 'menurut mode', // from v2.1.13 added 13.06.2016
'sortowner' : 'menurut pemilik', // from v2.1.13 added 13.06.2016
'sortgroup' : 'menurut grup', // from v2.1.13 added 13.06.2016
'sortAlsoTreeview' : 'Also Treeview', // from v2.1.15 added 01.08.2016
/********************************** new items **********************************/
'untitled file.txt' : 'FileBaru.txt', // added 10.11.2015
'untitled folder' : 'FolderBaru', // added 10.11.2015
'Archive' : 'ArsipBaru', // from v2.1 added 10.11.2015
/********************************** messages **********************************/
'confirmReq' : 'Diperlukan konfirmasi',
'confirmRm' : 'Anda yakin akan menghapus berkas?<br/>Ini tidak dapat kembalikan!',
'confirmRepl' : 'Timpa berkas lama dengan yang baru?',
'confirmRest' : 'Timpa berkas yang ada dengan berkas dari sampah?', // fromv2.1.24 added 5.5.2017
'confirmConvUTF8' : 'Bukan UTF-8<br/>Konversi ke UTF-8?<br/>Konten akan berubah menjadi UTF-8 ketika disimpan dengan konversi.', // from v2.1 added 08.04.2014
'confirmNonUTF8' : 'Character encoding of this file couldn\'t be detected. It need to temporarily convert to UTF-8 for editting.<br/>Please select character encoding of this file.', // from v2.1.19 added 28.11.2016
'confirmNotSave' : 'Telah terjadi perubahan.<br/>Kehilangan perkerjaan jika kamu tidak menyimpan.', // from v2.1 added 15.7.2015
'confirmTrash' : 'Anda yakin untuk membuang berkas ke tempat sampah?', //from v2.1.24 added 29.4.2017
'apllyAll' : 'Terapkan ke semua',
'name' : 'Nama',
'size' : 'Ukuran',
'perms' : 'Perijinan',
'modify' : 'Diubah',
'kind' : 'Jenis',
'read' : 'baca',
'write' : 'tulis',
'noaccess' : 'tidak ada akses',
'and' : 'dan',
'unknown' : 'tak diketahui',
'selectall' : 'Pilih semua berkas',
'selectfiles' : 'Pilih berkas',
'selectffile' : 'Pilih berkas pertama',
'selectlfile' : 'Pilih berkas terakhir',
'viewlist' : 'Tampilan daftar',
'viewicons' : 'Tampilan ikon',
'places' : 'Lokasi',
'calc' : 'Hitung',
'path' : 'Alamat',
'aliasfor' : 'Nama lain untuk',
'locked' : 'Dikunci',
'dim' : 'Dimensi',
'files' : 'Berkas',
'folders' : 'Folder',
'items' : 'Pokok',
'yes' : 'ya',
'no' : 'tidak',
'link' : 'Tautan',
'searcresult' : 'Hasil pencarian',
'selected' : 'Pokok terpilih',
'about' : 'Tentang',
'shortcuts' : 'Pintasan',
'help' : 'Bantuan',
'webfm' : 'Pengelola berkas web',
'ver' : 'Versi',
'protocolver' : 'versi protokol',
'homepage' : 'Rumah proyek',
'docs' : 'Dokumentasi',
'github' : 'Ambil kami di Github',
'twitter' : 'Ikuti kami di twitter',
'facebook' : 'Gabung dengan kami di facebook',
'team' : 'Tim',
'chiefdev' : 'kepala pengembang',
'developer' : 'pengembang',
'contributor' : 'kontributor',
'maintainer' : 'pengurus',
'translator' : 'penerjemah',
'icons' : 'Ikon',
'dontforget' : 'dan jangan lupa pakai handukmu',
'shortcutsof' : 'Pintasan dimatikan',
'dropFiles' : 'Seret berkas anda kesini',
'or' : 'atau',
'selectForUpload' : 'Pilih berkas untuk diunggah',
'moveFiles' : 'Pindahkan berkas',
'copyFiles' : 'Salin berkas',
'restoreFiles' : 'Kembalikan berkas', // from v2.1.24 added 5.5.2017
'rmFromPlaces' : 'Hapus dari lokasi',
'aspectRatio' : 'Aspek rasio',
'scale' : 'Skala',
'width' : 'Lebar',
'height' : 'Tinggi',
'resize' : 'Ubah ukuran',
'crop' : 'Potong',
'rotate' : 'Putar',
'rotate-cw' : 'Putar 90 derajat ke kanan',
'rotate-ccw' : 'Putar 90 derajat ke kiri',
'degree' : '°',
'netMountDialogTitle' : 'Baca susunan volume jaringan', // added 18.04.2012
'protocol' : 'Protokol', // added 18.04.2012
'host' : 'Host', // added 18.04.2012
'port' : 'Port', // added 18.04.2012
'user' : 'Pengguna', // added 18.04.2012
'pass' : 'Sandi', // added 18.04.2012
'confirmUnmount' : 'Apakah anda unmount $1?', // from v2.1 added 30.04.2012
'dropFilesBrowser': 'Seret atau Tempel file dari browser', // from v2.1 added 30.05.2012
'dropPasteFiles' : 'Seret file, Tempel URL atau gambar dari clipboard', // from v2.1 added 07.04.2014
'encoding' : 'Encoding', // from v2.1 added 19.12.2014
'locale' : 'Lokasi', // from v2.1 added 19.12.2014
'searchTarget' : 'Target: $1', // from v2.1 added 22.5.2015
'searchMime' : 'Mencari berdasarkan inpu MIME Type', // from v2.1 added 22.5.2015
'owner' : 'Pemilik', // from v2.1 added 20.6.2015
'group' : 'Grup', // from v2.1 added 20.6.2015
'other' : 'Lainnya', // from v2.1 added 20.6.2015
'execute' : 'Eksekusi', // from v2.1 added 20.6.2015
'perm' : 'Izin', // from v2.1 added 20.6.2015
'mode' : 'Mode', // from v2.1 added 20.6.2015
'emptyFolder' : 'Folder kosong', // from v2.1.6 added 30.12.2015
'emptyFolderDrop' : 'Folder kosong\\A Seret untuk tambahkan berkas', // from v2.1.6 added 30.12.2015
'emptyFolderLTap' : 'Folder kosong\\A Tekan yang lama untuk tambahkan berkas', // from v2.1.6 added 30.12.2015
'quality' : 'Kualitas', // from v2.1.6 added 5.1.2016
'autoSync' : 'Sinkronasi Otomatis', // from v2.1.6 added 10.1.2016
'moveUp' : 'Pindah ke atas', // from v2.1.6 added 18.1.2016
'getLink' : 'Mendepatkan URL link', // from v2.1.7 added 9.2.2016
'selectedItems' : '($1) berkas dipilih', // from v2.1.7 added 2.19.2016
'folderId' : 'ID Folder', // from v2.1.10 added 3.25.2016
'offlineAccess' : 'Izin akses offline', // from v2.1.10 added 3.25.2016
'reAuth' : 'To re-authenticate', // from v2.1.10 added 3.25.2016
'nowLoading' : 'Sedang memuat...', // from v2.1.12 added 4.26.2016
'openMulti' : 'Membuka file bersamaan', // from v2.1.12 added 5.14.2016
'openMultiConfirm': 'Anda mencoba membuka file $1. Apakah anda ingin membuka di browser?', // from v2.1.12 added 5.14.2016
'emptySearch' : 'Hasil pencarian kosong dalam target', // from v2.1.12 added 5.16.2016
'editingFile' : 'Sedang mengedit file', // from v2.1.13 added 6.3.2016
'hasSelected' : 'Anda memilih $1 berkas', // from v2.1.13 added 6.3.2016
'hasClipboard' : 'Kamu mempunyai $i berkas di clipboard', // from v2.1.13 added 6.3.2016
'incSearchOnly' : 'Hanya pencarian bertamah untuk menampilkan tampilan sekarang', // from v2.1.13 added 6.30.2016
'reinstate' : 'Reinstate', // from v2.1.15 added 3.8.2016
'complete' : '$1 selesai', // from v2.1.15 added 21.8.2016
'contextmenu' : 'Context menu', // from v2.1.15 added 9.9.2016
'pageTurning' : 'Page turning', // from v2.1.15 added 10.9.2016
'volumeRoots' : 'Volume roots', // from v2.1.16 added 16.9.2016
'reset' : 'Reset', // from v2.1.16 added 1.10.2016
'bgcolor' : 'Warna background', // from v2.1.16 added 1.10.2016
'colorPicker' : 'Mengambil warna', // from v2.1.16 added 1.10.2016
'8pxgrid' : '8px Grid', // from v2.1.16 added 4.10.2016
'enabled' : 'Diaktifkan', // from v2.1.16 added 4.10.2016
'disabled' : 'Nonaktifkan', // from v2.1.16 added 4.10.2016
'emptyIncSearch' : 'Search results is empty in current view.\\APress [Enter] to expand search target.', // from v2.1.16 added 5.10.2016
'emptyLetSearch' : 'First letter search results is empty in current view.', // from v2.1.23 added 24.3.2017
'textLabel' : 'Text label', // from v2.1.17 added 13.10.2016
'minsLeft' : '$1 mins left', // from v2.1.17 added 13.11.2016
'openAsEncoding' : 'Reopen with selected encoding', // from v2.1.19 added 2.12.2016
'saveAsEncoding' : 'Save with the selected encoding', // from v2.1.19 added 2.12.2016
'selectFolder' : 'Select folder', // from v2.1.20 added 13.12.2016
'firstLetterSearch': 'First letter search', // from v2.1.23 added 24.3.2017
'presets' : 'Presets', // from v2.1.25 added 26.5.2017
/********************************** mimetypes **********************************/
'kindUnknown' : 'Tak diketahui',
'kindRoot' : 'Volume Root', // from v2.1.16 added 16.10.2016
'kindFolder' : 'Folder',
'kindAlias' : 'Nama lain',
'kindAliasBroken' : 'Nama lain rusak',
// applications
'kindApp' : 'Aplikasi',
'kindPostscript' : 'Dokumen postscript',
'kindMsOffice' : 'Dokumen Ms. Office',
'kindMsWord' : 'Dokumen Ms. Word',
'kindMsExcel' : 'Dokumen Ms. Excel',
'kindMsPP' : 'Dokumen Ms. Powerpoint',
'kindOO' : 'Dokumen Open Office',
'kindAppFlash' : 'Aplikasi Flash',
'kindPDF' : 'Portable Dokumen Format (PDF)',
'kindTorrent' : 'Berkas Bittorrent',
'kind7z' : 'Arsip 7z',
'kindTAR' : 'Arsip TAR',
'kindGZIP' : 'Arsip GZIP',
'kindBZIP' : 'Arsip BZIP',
'kindXZ' : 'Arsip XZ',
'kindZIP' : 'Arsip ZIP',
'kindRAR' : 'Arsip RAR',
'kindJAR' : 'Berkas Java JAR',
'kindTTF' : 'Huruf True Type',
'kindOTF' : 'Huruf Open Type',
'kindRPM' : 'Paket RPM',
// texts
'kindText' : 'Dokumen teks',
'kindTextPlain' : 'Berkas teks biasa',
'kindPHP' : 'Kode-sumber PHP',
'kindCSS' : 'Cascading style sheet',
'kindHTML' : 'Dokumen HTML',
'kindJS' : 'Kode-sumber Javascript',
'kindRTF' : 'Berkas Rich Text',
'kindC' : 'Kode-sumber C',
'kindCHeader' : 'Kode-sumber header C',
'kindCPP' : 'Kode-sumber C++',
'kindCPPHeader' : 'Kode-sumber header C++',
'kindShell' : 'Berkas shell Unix',
'kindPython' : 'Kode-sumber Python',
'kindJava' : 'Kode-sumber Java',
'kindRuby' : 'Kode-sumber Ruby',
'kindPerl' : 'Kode-sumber Perl',
'kindSQL' : 'Kode-sumber SQL',
'kindXML' : 'Dokumen XML',
'kindAWK' : 'Kode-sumber AWK',
'kindCSV' : 'Dokumen CSV',
'kindDOCBOOK' : 'Dokumen Docbook XML',
'kindMarkdown' : 'Markdown text', // added 20.7.2015
// images
'kindImage' : 'Citra',
'kindBMP' : 'Citra BMP',
'kindJPEG' : 'Citra JPEG',
'kindGIF' : 'Citra GIF',
'kindPNG' : 'Citra PNG',
'kindTIFF' : 'Citra TIFF',
'kindTGA' : 'Citra TGA',
'kindPSD' : 'Citra Adobe Photoshop',
'kindXBITMAP' : 'Citra X bitmap',
'kindPXM' : 'Citra Pixelmator',
// media
'kindAudio' : 'Berkas audio',
'kindAudioMPEG' : 'Berkas audio MPEG',
'kindAudioMPEG4' : 'Berkas audio MPEG-4',
'kindAudioMIDI' : 'Berkas audio MIDI',
'kindAudioOGG' : 'Berkas audio Ogg Vorbis',
'kindAudioWAV' : 'Berkas audio WAV',
'AudioPlaylist' : 'Berkas daftar putar MP3',
'kindVideo' : 'Berkas video',
'kindVideoDV' : 'Berkas video DV',
'kindVideoMPEG' : 'Berkas video MPEG',
'kindVideoMPEG4' : 'Berkas video MPEG-4',
'kindVideoAVI' : 'Berkas video AVI',
'kindVideoMOV' : 'Berkas video Quick Time',
'kindVideoWM' : 'Berkas video Windows Media',
'kindVideoFlash' : 'Berkas video Flash',
'kindVideoMKV' : 'Berkas video Matroska',
'kindVideoOGG' : 'Berkas video Ogg'
}
};
}));

View File

@ -2,7 +2,7 @@
* Japanese translation
* @author Tomoaki Yoshida <info@yoshida-studio.jp>
* @author Naoki Sawada <hypweb@gmail.com>
* @version 2016-12-13
* @version 2017-06-22
*/
(function(root, factory) {
if (typeof define === 'function' && define.amd) {
@ -19,96 +19,103 @@
direction : 'ltr',
dateFormat : 'Y/m/d h:i A', // Mar 13, 2012 05:27 PM
fancyDateFormat : '$1 h:i A', // will produce smth like: Today 12:25 PM
nonameDateFormat : 'ymd-His', // to apply if upload file is noname: 120513172700
messages : {
/********************************** errors **********************************/
'error' : 'エラー',
'errUnknown' : '不明なエラーです',
'errUnknownCmd' : '不明なコマンドです',
'errJqui' : '無効なjQuery UI コンフィグレーションです。セレクタブルコンポーネント、ドラッガブルコンポーネント、ドロッパブルコンポーネントがあるかを確認して下さい',
'errNode' : 'elFinderはDOM Elementが必要です',
'errURL' : '無効なelFinder コンフィグレーションです! URLを設定してください',
'errAccess' : 'アクセスが拒否されました',
'errConnect' : 'バックエンドとの接続ができません',
'errAbort' : '接続が中断されました',
'errTimeout' : '接続がタイムアウトしました.',
'errNotFound' : 'バックエンドが見つかりません',
'errResponse' : '無効なバックエンドレスポンスです',
'errConf' : 'バックエンドの設定が有効ではありません',
'errJSON' : 'PHP JSON モジュールがインストールされていません',
'errNoVolumes' : '読み込み可能なボリュームが入手できません',
'errCmdParams' : 'コマンド "$1"のパラメーターが無効です',
'errDataNotJSON' : 'JSONデータではありません',
'errDataEmpty' : '空のデータです',
'errCmdReq' : 'バックエンドリクエストがコマンド名を要求しています',
'errOpen' : '"$1"を開くことができません',
'errNotFolder' : 'オブジェクトがフォルダーではありません',
'errNotFile' : 'オブジェクトがファイルではありません',
'errRead' : '"$1"を読むことができません',
'errWrite' : '"$1"に書きこむことができません',
'errPerm' : '権限がありません',
'errLocked' : '"$1" はロックされているので名前の変更、移動、削除ができません',
'errExists' : '"$1"というファイル名はすでに存在しています',
'errInvName' : '無効なファイル名です',
'errFolderNotFound' : 'フォルダーが見つかりません',
'errFileNotFound' : 'ファイルが見つかりません',
'errTrgFolderNotFound' : 'ターゲットとするフォルダー "$1" が見つかりません',
'errPopup' : 'ポップアップウィンドウが開けません。ファイルを開くにはブラウザの設定を変更してください',
'errMkdir' : '"$1"フォルダーを作成することができません',
'errMkfile' : '"$1"ファイルを作成することができません',
'errRename' : '"$1"の名前を変更することができません',
'errCopyFrom' : '"$1"からのファイルコピーが許可されていません',
'errCopyTo' : '"$1"へのファイルコピーが許可されていません',
'errMkOutLink' : 'ボリュームルート外へのリンクを作成することはできません', // from v2.1 added 03.10.2015
'errUnknown' : '不明なエラーです。',
'errUnknownCmd' : '不明なコマンドです。',
'errJqui' : '無効な jQuery UI 設定です。Selectable, Draggable, Droppable コンポーネントを含める必要があります。',
'errNode' : 'elFinder は DOM Element が必要です。',
'errURL' : '無効な elFinder 設定です! URLを設定されていません。',
'errAccess' : 'アクセスが拒否されました。',
'errConnect' : 'バックエンドとの接続ができません。',
'errAbort' : '接続が中断されました。',
'errTimeout' : '接続がタイムアウトしました。',
'errNotFound' : 'バックエンドが見つかりません。',
'errResponse' : '無効なバックエンドレスポンスです。',
'errConf' : 'バックエンドの設定が有効ではありません。',
'errJSON' : 'PHP JSON モジュールがインストールされていません。',
'errNoVolumes' : '読み込み可能なボリュームがありません。',
'errCmdParams' : 'コマンド "$1"のパラメーターが無効です。',
'errDataNotJSON' : 'JSONデータではありません。',
'errDataEmpty' : '空のデータです。',
'errCmdReq' : 'バックエンドリクエストはコマンド名が必要です。',
'errOpen' : '"$1" を開くことができません。',
'errNotFolder' : 'オブジェクトがフォルダーではありません。',
'errNotFile' : 'オブジェクトがファイルではありません。',
'errRead' : '"$1" を読み込むことができません。',
'errWrite' : '"$1" に書き込むことができません。',
'errPerm' : '権限がありません。',
'errLocked' : '"$1" はロックされているので名前の変更、移動、削除ができません。',
'errExists' : '"$1" というアイテム名はすでに存在しています。',
'errInvName' : '無効なファイル名です。',
'errInvDirname' : '無効なフォルダ名です。', // from v2.1.24 added 12.4.2017
'errFolderNotFound' : 'フォルダーが見つかりません。',
'errFileNotFound' : 'ファイルが見つかりません。',
'errTrgFolderNotFound' : 'ターゲットとするフォルダー "$1" が見つかりません。',
'errPopup' : 'ポップアップウィンドウが開けません。ファイルを開くにはブラウザの設定を変更してください。',
'errMkdir' : 'フォルダー "$1" を作成することができません。',
'errMkfile' : 'ファイル "$1" を作成することができません。',
'errRename' : '"$1" の名前を変更することができません。',
'errCopyFrom' : '"$1" からのファイルコピーは許可されていません。',
'errCopyTo' : '"$1" へのファイルコピーは許可されていません。',
'errMkOutLink' : 'ボリュームルート外へのリンクを作成することはできません。', // from v2.1 added 03.10.2015
'errUpload' : 'アップロードエラー', // old name - errUploadCommon
'errUploadFile' : '"$1"がアップロードできません', // old name - errUpload
'errUploadNoFiles' : 'アップロードされたファイルはありません',
'errUploadTotalSize' : 'データが許容サイズを超えています', // old name - errMaxSize
'errUploadFileSize' : 'ファイルが許容サイズを超えています', // old name - errFileMaxSize
'errUploadMime' : '許可されていないファイル形式です',
'errUploadTransfer' : '"$1" 転送エラーです',
'errUploadTemp' : 'アップロード用一時ファイルが作成できません', // from v2.1 added 26.09.2015
'errNotReplace' : 'アイテム "$1" は、すでにこの場所にありますがアイテムのタイプが違うので置き換えることはできません', // new
'errReplace' : '"$1"を置き換えることができません',
'errSave' : '"$1"を保存することができません',
'errCopy' : '"$1"をコピーすることができません',
'errMove' : '"$1"を移動することができません',
'errCopyInItself' : '"$1"をそれ自身の中にコピーすることはできません',
'errRm' : '"$1"を削除することができません',
'errRmSrc' : '元ファイルを削除することができません',
'errExtract' : '"$1"を解凍することができません',
'errArchive' : 'アーカイブを作成することができません',
'errArcType' : 'サポート外のアーカイブ形式です',
'errNoArchive' : 'アーカイブでないかサポートされていないアーカイブ形式です',
'errCmdNoSupport' : 'サポートされていないコマンドです',
'errReplByChild' : 'フォルダ "$1" に含まれてるアイテムを置き換えることはできません',
'errArcSymlinks' : 'シンボリックリンクまたは許容されないファイル名を含むアーカイブはセキュリティ上、解凍できません', // edited 24.06.2012
'errArcMaxSize' : 'アーカイブが許容されたサイズを超えています',
'errResize' : '"$1"をリサイズできません',
'errResizeDegree' : 'イメージの回転角度が不正です', // added 7.3.2013
'errResizeRotate' : 'イメージを回転できません', // added 7.3.2013
'errResizeSize' : '指定されたイメージサイズが不正です', // added 7.3.2013
'errResizeNoChange' : 'イメージサイズなどの変更点がありません', // added 7.3.2013
'errUsupportType' : 'このファイルタイプはサポートされません',
'errNotUTF8Content' : 'ファイル "$1" には UTF-8 以外の文字が含まれているので編集できません', // added 9.11.2011
'errNetMount' : '"$1"をマウントできません', // added 17.04.2012
'errNetMountNoDriver' : 'サポートされていないプロトコルです', // added 17.04.2012
'errNetMountFailed' : 'マウントに失敗しました', // added 17.04.2012
'errNetMountHostReq' : 'ホスト名は必須です', // added 18.04.2012
'errSessionExpires' : 'アクションがなかったため、セッションが期限切れになりました',
'errUploadFile' : '"$1" をアップロードすることができません。', // old name - errUpload
'errUploadNoFiles' : 'アップロードされたファイルはありません。',
'errUploadTotalSize' : 'データが許容サイズを超えています。', // old name - errMaxSize
'errUploadFileSize' : 'ファイルが許容サイズを超えています。', // old name - errFileMaxSize
'errUploadMime' : '許可されていないファイル形式です。',
'errUploadTransfer' : '"$1" 転送エラーです。',
'errUploadTemp' : 'アップロード用一時ファイルを作成できません。', // from v2.1 added 26.09.2015
'errNotReplace' : 'アイテム "$1" はすでにこの場所にあり、アイテムのタイプが違うので置き換えることはできません。', // new
'errReplace' : '"$1" を置き換えることができません。',
'errSave' : '"$1" を保存することができません。',
'errCopy' : '"$1" をコピーすることができません。',
'errMove' : '"$1" を移動することができません。',
'errCopyInItself' : '"$1" をそれ自身の中にコピーすることはできません。',
'errRm' : '"$1" を削除することができません。',
'errTrash' : 'ごみ箱に入れることができません。', // from v2.1.24 added 30.4.2017
'errRmSrc' : '元ファイルを削除することができません。',
'errExtract' : '"$1" を解凍することができません。',
'errArchive' : 'アーカイブを作成することができません。',
'errArcType' : 'サポート外のアーカイブ形式です。',
'errNoArchive' : 'アーカイブでないかサポートされていないアーカイブ形式です。',
'errCmdNoSupport' : 'サポートされていないコマンドです。',
'errReplByChild' : 'フォルダ "$1" に含まれてるアイテムを置き換えることはできません。',
'errArcSymlinks' : 'シンボリックリンクまたは許容されないファイル名を含むアーカイブはセキュリティ上、解凍できません。', // edited 24.06.2012
'errArcMaxSize' : 'アーカイブが許容されたサイズを超えています。',
'errResize' : '"$1" のリサイズまたは回転ができません。',
'errResizeDegree' : 'イメージの回転角度が不正です。', // added 7.3.2013
'errResizeRotate' : 'イメージを回転できません。', // added 7.3.2013
'errResizeSize' : '指定されたイメージサイズが不正です。', // added 7.3.2013
'errResizeNoChange' : 'イメージサイズなどの変更点がありません。', // added 7.3.2013
'errUsupportType' : 'このファイルタイプはサポートされていません。',
'errNotUTF8Content' : 'ファイル "$1" には UTF-8 以外の文字が含まれているので編集できません。', // added 9.11.2011
'errNetMount' : '"$1" をマウントできません。', // added 17.04.2012
'errNetMountNoDriver' : 'サポートされていないプロトコルです。', // added 17.04.2012
'errNetMountFailed' : 'マウントに失敗しました。', // added 17.04.2012
'errNetMountHostReq' : 'ホスト名は必須です。', // added 18.04.2012
'errSessionExpires' : 'アクションがなかったため、セッションが期限切れになりました。',
'errCreatingTempDir' : '一時ディレクトリを作成できません:"$1"',
'errFtpDownloadFile' : 'FTP からファイルをダウンロードできません:"$1"',
'errFtpUploadFile' : 'FTP へファイルをアップロードできません:"$1"',
'errFtpMkdir' : 'FTP にリモートディレクトリを作成できません:"$1"',
'errArchiveExec' : 'ファイルのアーカイブ中にエラーが発生しました:"$1"',
'errExtractExec' : 'ファイルの抽出中にエラーが発生しました:"$1"',
'errNetUnMount' : 'アンマウントできません', // from v2.1 added 30.04.2012
'errConvUTF8' : 'UTF-8 に変換できませんでした', // from v2.1 added 08.04.2014
'errFolderUpload' : 'フォルダをアップロードしたいのであれば、モダンブラウザを試してください', // from v2.1 added 26.6.2015
'errSearchTimeout' : '"$1"を検索中にタイムアウトしました。検索結果は部分的です。', // from v2.1 added 12.1.2016
'errReauthRequire' : '再認可が必要です', // from v2.1.10 added 24.3.2016
'errMaxTargets' : '選択可能な最大アイテム数は $1 個です', // from v2.1.17 added 17.10.2016
'errNetUnMount' : 'アンマウントできません。', // from v2.1 added 30.04.2012
'errConvUTF8' : 'UTF-8 に変換できませんでした。', // from v2.1 added 08.04.2014
'errFolderUpload' : 'フォルダをアップロードしたいのであれば、モダンブラウザを試してください。', // from v2.1 added 26.6.2015
'errSearchTimeout' : '"$1" を検索中にタイムアウトしました。検索結果は部分的です。', // from v2.1 added 12.1.2016
'errReauthRequire' : '再認可が必要です。', // from v2.1.10 added 24.3.2016
'errMaxTargets' : '選択可能な最大アイテム数は $1 個です。', // from v2.1.17 added 17.10.2016
'errRestore' : '宛先の特定ができないため、ごみ箱から戻せません。', // from v2.1.24 added 3.5.2017
'errEditorNotFound' : 'このファイルタイプのエディターがありません。', // from v2.1.25 added 23.5.2017
'errServerError' : 'サーバー側でエラーが発生しました。', // from v2.1.25 added 16.6.2017
'errEmpty' : 'フォルダー"$1"を空にすることができません。', // from v2.1.25 added 22.6.2017
/******************************* commands names ********************************/
'cmdarchive' : 'アーカイブ作成',
'cmdback' : '戻る',
@ -132,6 +139,8 @@
'cmdreload' : 'リロード',
'cmdrename' : 'リネーム',
'cmdrm' : '削除',
'cmdtrash' : 'ごみ箱へ', //from v2.1.24 added 29.4.2017
'cmdrestore' : '元に戻す', //from v2.1.24 added 3.5.2017
'cmdsearch' : 'ファイルを探す',
'cmdup' : '親ディレクトリーへ移動',
'cmdupload' : 'ファイルアップロード',
@ -146,7 +155,8 @@
'cmdcolwidth' : '列幅リセット', // from v2.1.13 added 12.06.2016
'cmdfullscreen': 'フルスクリーン', // from v2.1.15 added 03.08.2016
'cmdmove' : '移動', // from v2.1.15 added 21.08.2016
'cmdempty' : 'フォルダーを空に', // from v2.1.25 added 22.06.2017
/*********************************** buttons ***********************************/
'btnClose' : '閉じる',
'btnSave' : '保存',
@ -166,17 +176,22 @@
'btnFileName':'ファイル名', // from v2.1 added 22.5.2015
'btnSaveClose': '保存して閉じる', // from v2.1 added 12.6.2015
'btnBackup' : 'バックアップ', // fromv2.1 added 28.11.2015
'btnRename' : 'リネーム', // from v2.1.24 added 6.4.2017
'btnRenameAll' : 'リネーム(全て)', // from v2.1.24 added 6.4.2017
'btnPrevious' : '前へ ($1/$2)', // from v2.1.24 added 11.5.2017
'btnNext' : '次へ ($1/$2)', // from v2.1.24 added 11.5.2017
'btnSaveAs' : '別名保存', // from v2.1.25 added 24.5.2017
/******************************** notifications ********************************/
'ntfopen' : 'フォルダーを開いています',
'ntffile' : 'ファイルを開いています',
'ntfreload' : 'フォルダーを再読込しています',
'ntfmkdir' : 'ディレクトリーを作成しています',
'ntfmkdir' : 'フォルダーを作成しています',
'ntfmkfile' : 'ファイルを作成しています',
'ntfrm' : 'ファイルを削除しています',
'ntfcopy' : 'ファイルをコピーしています',
'ntfmove' : 'ファイルを移動しています',
'ntfprepare' : 'ファイルコピーを準備しています',
'ntfprepare' : '既存アイテムを確認しています',
'ntfrename' : 'ファイル名を変更しています',
'ntfupload' : 'ファイルをアップロードしています',
'ntfdownload' : 'ファイルをダウンロードしています',
@ -197,6 +212,12 @@
'ntfzipdl' : 'ダウンロード用ファイルを作成中', // from v2.1.7 added 23.1.2016
'ntfparents' : 'パス情報を取得しています', // from v2.1.17 added 2.11.2016
'ntfchunkmerge': 'アップロード済みファイルを処理中', // from v2.1.17 added 2.11.2016
'ntftrash' : 'ごみ箱に入れています', // from v2.1.24 added 2.5.2017
'ntfrestore' : 'ごみ箱から元に戻しています', // from v2.1.24 added 2.5.2017
'ntfchkdir' : '宛先ホルダーを確認しています', // from v2.1.24 added 3.5.2017
/*********************************** volumes *********************************/
'volume_Trash' : 'ごみ箱', //from v2.1.24 added 29.4.2017
/************************************ dates **********************************/
'dateUnknown' : '不明',
@ -247,10 +268,10 @@
'sortsize' : 'サイズ順',
'sortdate' : '日付順',
'sortFoldersFirst' : 'フォルダ優先',
'sortperm' : '権限順', // from v2.1.13 added 13.06.2016
'sortmode' : '属性順', // from v2.1.13 added 13.06.2016
'sortowner' : 'オーナー順', // from v2.1.13 added 13.06.2016
'sortgroup' : 'グループ順', // from v2.1.13 added 13.06.2016
'sortperm' : '権限順', // from v2.1.13 added 13.06.2016
'sortmode' : '属性順', // from v2.1.13 added 13.06.2016
'sortowner' : 'オーナー順', // from v2.1.13 added 13.06.2016
'sortgroup' : 'グループ順', // from v2.1.13 added 13.06.2016
'sortAlsoTreeview' : 'ツリービューも', // from v2.1.15 added 01.08.2016
/********************************** new items **********************************/
@ -260,11 +281,13 @@
/********************************** messages **********************************/
'confirmReq' : '処理を実行しますか?',
'confirmRm' : '本当にファイルを削除しますか?<br/>この操作は取り消せません!',
'confirmRepl' : '古いファイルを新しいファイルで上書きしますか?',
'confirmRm' : 'アイテムを完全に削除してもよろしいですか?<br/>この操作は取り消せません!',
'confirmRepl' : '古いアイテムを新しいアイテムで上書きしますか?',
'confirmRest' : '既存のアイテムをごみ箱のアイテムで上書きしますか?', // fromv2.1.24 added 5.5.2017
'confirmConvUTF8' : 'UTF-8 以外の文字が含まれています。<br/>UTF-8 に変換しますか?<br/>変換後の保存でコンテンツは UTF-8 になります。', // from v2.1 added 08.04.2014
'confirmNonUTF8' : 'このファイルの文字エンコーディングを判別できませんでした。編集するには一時的に UTF-8 に変換する必要があります。<br/>文字エンコーディングを指定してください。', // from v2.1.19 added 28.11.2016
'confirmNotSave' : '変更されています。<br/>保存せずに閉じると編集内容が失われます。', // from v2.1 added 15.7.2015
'confirmTrash' : 'アイテムをごみ箱に移動してもよろしいですか?', //from v2.1.24 added 29.4.2017
'apllyAll' : '全てに適用します',
'name' : '名前',
'size' : 'サイズ',
@ -319,8 +342,9 @@
'dropFiles' : 'ここにファイルをドロップ',
'or' : 'または',
'selectForUpload' : 'ファイルを選択',
'moveFiles' : 'ファイルを移動',
'copyFiles' : 'ファイルをコピー',
'moveFiles' : 'アイテムを移動',
'copyFiles' : 'アイテムをコピー',
'restoreFiles' : 'アイテムを元に戻す', // from v2.1.24 added 5.5.2017
'rmFromPlaces' : 'ここから削除',
'aspectRatio' : '縦横比維持',
'scale' : '表示縮尺',
@ -366,10 +390,10 @@
'openMulti' : '複数ファイルオープン', // from v2.1.12 added 5.14.2016
'openMultiConfirm': '$1 個のファイルを開こうとしています。このままブラウザで開きますか?', // from v2.1.12 added 5.14.2016
'emptySearch' : '検索対象に該当するアイテムはありません。', // from v2.1.12 added 5.16.2016
'editingFile' : 'ファイルを編集中です', // from v2.1.13 added 6.3.2016
'hasSelected' : '$1 個のアイテムを選択中です', // from v2.1.13 added 6.3.2016
'hasClipboard' : '$1 個のアイテムがクリップボードに入っています', // from v2.1.13 added 6.3.2016
'incSearchOnly' : '逐次検索対象は現在のビューのみです', // from v2.1.13 added 6.30.2016
'editingFile' : 'ファイルを編集中です', // from v2.1.13 added 6.3.2016
'hasSelected' : '$1 個のアイテムを選択中です', // from v2.1.13 added 6.3.2016
'hasClipboard' : '$1 個のアイテムがクリップボードに入っています', // from v2.1.13 added 6.3.2016
'incSearchOnly' : '逐次検索対象は現在のビューのみです', // from v2.1.13 added 6.30.2016
'reinstate' : '元に戻す', // from v2.1.15 added 3.8.2016
'complete' : '$1 完了', // from v2.1.15 added 21.8.2016
'contextmenu' : 'コンテキストメニュー', // from v2.1.15 added 9.9.2016
@ -389,6 +413,11 @@
'saveAsEncoding' : '選択したエンコーディングで保存', // from v2.1.19 added 2.12.2016
'selectFolder' : 'フォルダーを選択', // from v2.1.20 added 13.12.2016
'firstLetterSearch': '一文字目で検索', // from v2.1.23 added 24.3.2017
'presets' : 'プリセット', // from v2.1.25 added 26.5.2017
'tooManyToTrash' : 'アイテム数が多すぎるのでごみ箱に入れられません。', // from v2.1.25 added 9.6.2017
'TextArea' : 'テキストエリア', // from v2.1.25 added 14.6.2017
'folderToEmpty' : 'フォルダー"$1"を空にします。', // from v2.1.25 added 22.6.2017
'filderIsEmpty' : 'フォルダー"$1"にアイテムはありません。', // from v2.1.25 added 22.6.2017
/********************************** mimetypes **********************************/
'kindUnknown' : '不明',

View File

@ -4,7 +4,7 @@
* @author Wojciech Jabłoński <www.jablonski@gmail.com>
* @author Bogusław Zięba <bobi@poczta.fm>
* @author Bogusław Zięba <bobi@poczta.fm>
* @version 2016-09-04
* @version 2017-04-05
*/
(function(root, factory) {
if (typeof define === 'function' && define.amd) {
@ -16,7 +16,7 @@
}
}(this, function(elFinder) {
elFinder.prototype.i18.pl = {
translator : 'Marcin Mikołajczyk &lt;marcin@pjwstk.edu.pl&gt;, Wojciech Jabłoński &lt;www.jablonski@gmail.com&gt;, Bogusław Zięba &lt;bobi@poczta.fm&gt;',
translator : 'Marcin Mikołajczyk &lt;marcin@pjwstk.edu.pl&gt;, Wojciech Jabłoński &lt;www.jablonski@gmail.com&gt;, Bogusław Zięba &lt;bobi@poczta.fm&gt;, Bogusław Zięba &lt;bobi@poczta.fm&gt;',
language : 'Polski',
direction : 'ltr',
dateFormat : 'd M Y H:i', // Mar 13, 2012 05:27 PM
@ -108,7 +108,8 @@
'errConvUTF8' : 'Nie wymienialne na UTF-8', // from v2.1 added 08.04.2014
'errFolderUpload' : 'Wypróbuj Google Chrome, jeśli chcesz przesłać katalog.', // from v2.1 added 26.6.2015
'errSearchTimeout' : 'Upłynął limit czasu podczas wyszukiwania "$1". Wynik wyszukiwania jest częściowy.', // from v2.1 added 12.1.2016
'errReauthRequire' : 'Wymagana jest ponowna autoryzacja.', // from v2.1.10 added 3.24.2016
'errReauthRequire' : 'Wymagana jest ponowna autoryzacja.', // from v2.1.10 added 24.3.2016
'errMaxTargets' : 'Maks. liczba elementów do wyboru to $1.', // from v2.1.17 added 17.10.2016
/******************************* commands names ********************************/
'cmdarchive' : 'Utwórz archiwum',
@ -134,10 +135,10 @@
'cmdrename' : 'Zmień nazwę',
'cmdrm' : 'Usuń',
'cmdsearch' : 'Wyszukaj pliki',
'cmdup' : 'W górę',
'cmdup' : 'Przejdź do katalogu nadrzędnego',
'cmdupload' : 'Wyślij pliki',
'cmdview' : 'Widok',
'cmdresize' : 'Zmień rozmiar obrazu',
'cmdresize' : 'Zmień rozmiar i Obróć',
'cmdsort' : 'Sortuj',
'cmdnetmount' : 'Zamontuj wolumin sieciowy', // added 18.04.2012
'cmdnetunmount': 'Odmontuj', // from v2.1 added 30.04.2012
@ -145,6 +146,7 @@
'cmdchmod' : 'Zmiana trybu', // from v2.1 added 20.6.2015
'cmdopendir' : 'Otwórz katalog', // from v2.1 added 13.1.2016
'cmdcolwidth' : 'Resetuj szerokość kolumny', // from v2.1.13 added 12.06.2016
'cmdfullscreen': 'Pełny ekran', // from v2.1.15 added 03.08.2016
'cmdmove' : 'Przenieś', // from v2.1.15 added 21.08.2016
/*********************************** buttons ***********************************/
@ -195,23 +197,25 @@
'ntfchmod' : 'Zmiana trybu pliku', // from v2.1 added 20.6.2015
'ntfpreupload': 'Weryfikacja nazwy przesłanego pliku', // from v2.1 added 31.11.2015
'ntfzipdl' : 'Tworzenie pliku do pobrania', // from v2.1.7 added 23.1.2016
'ntfparents' : 'Uzyskiwanie informacji o ścieżce', // from v2.1.17 added 2.11.2016
'ntfchunkmerge': 'Przetwarzanie przesłanego pliku', // from v2.1.17 added 2.11.2016
/************************************ dates **********************************/
'dateUnknown' : 'nieznana',
'Today' : 'Dzisiaj',
'Yesterday' : 'Wczoraj',
'msJan' : 'sty',
'msFeb' : 'lut',
'msMar' : 'mar',
'msApr' : 'kwi',
'msMay' : 'maj',
'msJun' : 'cze',
'msJul' : 'lip',
'msAug' : 'sie',
'msSep' : 'wrz',
'msOct' : 'paź',
'msNov' : 'lis',
'msDec' : 'gru',
'msJan' : 'Sty',
'msFeb' : 'Lut',
'msMar' : 'Mar',
'msApr' : 'Kwi',
'msMay' : 'Maj',
'msJun' : 'Cze',
'msJul' : 'Lip',
'msAug' : 'Sie',
'msSep' : 'Wrz',
'msOct' : 'Paź',
'msNov' : 'Lis',
'msDec' : 'Gru',
'January' : 'Styczeń',
'February' : 'Luty',
'March' : 'Marzec',
@ -224,26 +228,26 @@
'October' : 'Październik',
'November' : 'Listopad',
'December' : 'Grudzień',
'Sunday' : 'niedziela',
'Monday' : 'poniedziałek',
'Tuesday' : 'wtorek',
'Wednesday' : 'środa',
'Thursday' : 'czwartek',
'Friday' : 'piątek',
'Saturday' : 'sobota',
'Sun' : 'nie',
'Mon' : 'pon',
'Tue' : 'wto',
'Wed' : 'śro',
'Thu' : 'czw',
'Fri' : 'pią',
'Sat' : 'sob',
'Sunday' : 'Niedziela',
'Monday' : 'Poniedziałek',
'Tuesday' : 'Wtorek',
'Wednesday' : 'Środa',
'Thursday' : 'Czwartek',
'Friday' : 'Piątek',
'Saturday' : 'Sobota',
'Sun' : 'Nie',
'Mon' : 'Pon',
'Tue' : 'Wto',
'Wed' : 'Śro',
'Thu' : 'Czw',
'Fri' : 'Pią',
'Sat' : 'Sob',
/******************************** sort variants ********************************/
'sortname' : 'po nazwie',
'sortkind' : 'po typie',
'sortsize' : 'po rozmiarze',
'sortdate' : 'po dacie',
'sortname' : 'w/g nazwy',
'sortkind' : 'w/g typu',
'sortsize' : 'w/g rozmiaru',
'sortdate' : 'w/g daty',
'sortFoldersFirst' : 'katalogi pierwsze',
'sortperm' : 'wg/nazwy', // from v2.1.13 added 13.06.2016
'sortmode' : 'wg/trybu', // from v2.1.13 added 13.06.2016
@ -261,6 +265,7 @@
'confirmRm' : 'Czy na pewno chcesz usunąć pliki?<br/>Tej operacji nie można cofnąć!',
'confirmRepl' : 'Zastąpić stary plik nowym?',
'confirmConvUTF8' : 'Nie w UTF-8<br/>Konwertować na UTF-8?<br/>Zawartość stanie się UTF-8 poprzez zapisanie po konwersji.', // from v2.1 added 08.04.2014
'confirmNonUTF8' : 'Nie można wykryć kodowania tego pliku. Musi być tymczasowo przekształcony do UTF-8. <br/> Proszę wybrać kodowanie znaków tego pliku.', // from v2.1.19 added 28.11.2016
'confirmNotSave' : 'Został zmodyfikowany.<br/>Utracisz pracę, jeśli nie zapiszesz zmian.', // from v2.1 added 15.7.2015
'apllyAll' : 'Zastosuj do wszystkich',
'name' : 'Nazwa',
@ -280,31 +285,31 @@
'viewlist' : 'Widok listy',
'viewicons' : 'Widok ikon',
'places' : 'Ulubione',
'calc' : 'Oblicz',
'calc' : 'Obliczanie',
'path' : 'Ścieżka',
'aliasfor' : 'Alias do',
'locked' : 'Zablokowany',
'dim' : 'Wymiary',
'files' : 'Pliki',
'folders' : 'katalog',
'folders' : 'Katalogi',
'items' : 'Elementy',
'yes' : 'tak',
'no' : 'nie',
'link' : 'Odnośnik',
'searcresult' : 'Wyniki wyszukiwania',
'selected' : 'Zaznaczonych obiektów',
'about' : 'Informacje o programie',
'selected' : 'zaznaczonych obiektów',
'about' : 'O programie',
'shortcuts' : 'Skróty klawiaturowe',
'help' : 'Pomoc',
'webfm' : 'Menedżer plików sieciowych',
'ver' : 'Wersja',
'protocolver' : 'wersja wydania',
'homepage' : 'Strona główna projektu',
'protocolver' : 'wersja protokołu',
'homepage' : 'Strona projektu',
'docs' : 'Dokumentacja',
'github' : 'Obserwuj rozwój projektu na Github',
'twitter' : 'Śledź nas na Twitterze',
'facebook' : 'Dołącz do nas na Facebooku',
'team' : 'Autorzy',
'team' : 'Zespół',
'chiefdev' : 'główny programista',
'developer' : 'programista',
'contributor' : 'współautor',
@ -315,10 +320,10 @@
'shortcutsof' : 'Skróty klawiaturowe są wyłączone',
'dropFiles' : 'Upuść pliki tutaj',
'or' : 'lub',
'selectForUpload' : 'Wybierz pliki do wysłania',
'selectForUpload' : 'Wybierz pliki',
'moveFiles' : 'Przenieś pliki',
'copyFiles' : 'Kopiuj pliki',
'rmFromPlaces' : 'Usuń z ulubionych',
'rmFromPlaces' : 'Usuń z miejsc',
'aspectRatio' : 'Zachowaj proporcje',
'scale' : 'Skala',
'width' : 'Szerokość',
@ -369,9 +374,27 @@
'incSearchOnly' : 'Wyszukiwanie przyrostowe jest wyłącznie z bieżącego widoku.', // from v2.1.13 added 6.30.2016
'reinstate' : 'Przywróć', // from v2.1.15 added 3.8.2016
'complete' : '$1 zakończono', // from v2.1.15 added 21.8.2016
'contextmenu' : 'Menu kontekstowe', // from v2.1.15 added 9.9.2016
'pageTurning' : 'Obracanie strony', // from v2.1.15 added 10.9.2016
'volumeRoots' : 'Wolumin główny', // from v2.1.16 added 16.9.2016
'reset' : 'Resetuj', // from v2.1.16 added 1.10.2016
'bgcolor' : 'Kolor tła', // from v2.1.16 added 1.10.2016
'colorPicker' : 'Wybierania kolorów', // from v2.1.16 added 1.10.2016
'8pxgrid' : '8px Kratka', // from v2.1.16 added 4.10.2016
'enabled' : 'Włączone', // from v2.1.16 added 4.10.2016
'disabled' : 'Wyłaczone', // from v2.1.16 added 4.10.2016
'emptyIncSearch' : 'Wyniki wyszukiwania są puste w bieżącym widoku.\\AWciśnij [Enter] aby poszerzyć zakres wyszukiwania.', // from v2.1.16 added 5.10.2016
'emptyLetSearch' : 'Wyszukiwanie pierwszej litery brak wyników w bieżącym widoku.', // from v2.1.23 added 24.3.2017
'textLabel' : 'Etykieta tekstowa', // from v2.1.17 added 13.10.2016
'minsLeft' : '$1 min pozostało', // from v2.1.17 added 13.11.2016
'openAsEncoding' : 'Otwórz ponownie z wybranym kodowaniem', // from v2.1.19 added 2.12.2016
'saveAsEncoding' : 'Zapisz z wybranym kodowaniem', // from v2.1.19 added 2.12.2016
'selectFolder' : 'Wybierz katalog', // from v2.1.20 added 13.12.2016
'firstLetterSearch': 'Wyszukiwanie pierwszej litery', // from v2.1.23 added 24.3.2017
/********************************** mimetypes **********************************/
'kindUnknown' : 'Nieznany',
'kindRoot' : 'Główny Wolumin', // from v2.1.16 added 16.10.2016
'kindFolder' : 'Katalog',
'kindAlias' : 'Alias',
'kindAliasBroken' : 'Utracony alias',

View File

@ -142,6 +142,7 @@
'cmdplaces' : 'В избранное', // added 28.12.2014
'cmdchmod' : 'Изменить права доступа', // from v2.1 added 20.6.2015
'cmdopendir' : 'Открыть папку', // from v2.1 added 13.1.2016
'cmdempty' : 'Очистить папку', // from v2.1.25 added 01.07.2017 - Repellent
/*********************************** buttons ***********************************/
'btnClose' : 'Закрыть',
@ -354,6 +355,7 @@
'openMulti' : 'Открыть несколько файлов', // from v2.1.12 added 5.14.2016
'openMultiConfirm': 'Вы пытаетесь открыть $1 файл(а/ов). Вы уверены, что хотите открыть их в браузере?', // from v2.1.12 added 5.14.2016
'emptySearch' : 'Ничего не найдено', // from v2.1.12 added 5.16.2016
'folderToEmpty' : 'Очистить папку "$1".', // from v2.1.25 added 01.07.2017 - Repellent
/********************************** mimetypes **********************************/
'kindUnknown' : 'Неизвестный',

View File

@ -1,8 +1,8 @@
/**
* Slovak translation
* @author Jakub Ďuraš <jkblmr@gmail.com>
* @author RobiNN <admin@robonetwork.cf>
* @version 2017-1-16
* @author RobiNN <kelcakrobo@gmail.com>
* @version 2017-06-02
*/
(function(root, factory) {
if (typeof define === 'function' && define.amd) {
@ -14,11 +14,12 @@
}
}(this, function(elFinder) {
elFinder.prototype.i18.sk = {
translator : 'Jakub Ďuraš &lt;jkblmr@gmail.com&gt;, RobiNN &lt;admin@robonetwork.cf&gt;',
translator : 'Jakub Ďuraš &lt;jkblmr@gmail.com&gt;, RobiNN &lt;kelcakrobo@gmail.com&gt;',
language : 'slovenčina',
direction : 'ltr',
dateFormat : 'd.m.Y H:i', // Mar 13, 2012 05:27 PM
fancyDateFormat : '$1 H:i', // will produce smth like: Today 12:25 PM
nonameDateFormat : 'ymd-His', // to apply if upload file is noname: 120513172700
messages : {
/********************************** errors **********************************/
@ -50,6 +51,7 @@
'errLocked' : '"$1" je uzamknutý, a nemôže byť premenovaný, presunutý alebo odstránený.',
'errExists' : 'Súbor s názvom "$1" už existuje.',
'errInvName' : 'Nesprávný názov súboru.',
'errInvDirname' : 'Neplatný názov adresára.', // from v2.1.24 added 12.4.2017
'errFolderNotFound' : 'Priečinok nenájdený.',
'errFileNotFound' : 'Súbor nenájdený.',
'errTrgFolderNotFound' : 'Zvolený priečinok "$1" nenájdený.',
@ -60,40 +62,41 @@
'errCopyFrom' : 'Kopírovanie súborov z média "$1" nie je povolené.',
'errCopyTo' : 'Kopírovanie súborov na médium "$1" nie je povolené.',
'errMkOutLink' : 'Nie je možné vytvoriť odkaz mimo koreňového zväzku.', // from v2.1 added 03.10.2015
'errUpload' : 'Problém s nahrávaním.', // old name - errUploadCommon
'errUpload' : 'Problém s nahrávaním.', // old name - errUploadCommon
'errUploadFile' : 'Nie je možné nahrať "$1".', // old name - errUpload
'errUploadNoFiles' : 'Žiadne súbory neboli nájdené na nahranie.',
'errUploadTotalSize' : 'Dáta prekračujú maximálnu povolenú veľkosť.', // old name - errMaxSize
'errUploadFileSize' : 'Súbor prekračuje maximálnu povolenú veľkosť.', // old name - errFileMaxSize
'errUploadFileSize' : 'Súbor prekračuje maximálnu povolenú veľkosť.', // old name - errFileMaxSize
'errUploadMime' : 'Nepovolený typ súboru.',
'errUploadTransfer' : 'Problém s nahrávaním "$1".',
'errUploadTemp' : 'Nie je možné vytvoriť dočasný súbor pre nahranie.', // from v2.1 added 26.09.2015
'errNotReplace' : 'Objekt "$1" na tomto mieste už existuje a nemôže byť nahradený objektom s iným typom.',
'errNotReplace' : 'Objekt "$1" na tomto mieste už existuje a nemôže byť nahradený objektom iného typu.', // new
'errReplace' : 'Nie je možné nahradiť "$1".',
'errSave' : 'Nie je možné uložiť "$1".',
'errCopy' : 'Nie je možné kopíropvať "$1".',
'errMove' : 'Nie je možné preniesť "$1".',
'errCopyInItself' : 'Nie je možné kopírovať "$1" do seba.',
'errRm' : 'Nie je možné vymazať "$1".',
'errTrash' : 'Nie je možné presunúť do koša.', // from v2.1.24 added 30.4.2017
'errRmSrc' : 'Nie je možné odstrániť zdrojové súbor(y).',
'errExtract' : 'Nie je možné extrahovať súbory z "$1".',
'errArchive' : 'Nie je možné vytvoriť archív.',
'errArcType' : 'Nepodporovaný typ archívu.',
'errNoArchive' : 'Súbor nie je archívom, alebo je nepodporovaného typu.',
'errNoArchive' : 'Súbor nie je archív alebo má nepodporovaný typ archívu.',
'errCmdNoSupport' : 'Backend nepodporuje tento príkaz.',
'errReplByChild' : 'Priečinok "$1" nemôže byť nahradený položkou, ktorú už obsahuje.',
'errArcSymlinks' : 'Z bezpečnostných dôvodov bolo zakázané extrahovanie archívov obsahujúcich symlinky, alebo súborov s nepovolenými menami.',
'errArcSymlinks' : 'Z bezpečnostných dôvodov bolo zakázané extrahovanie archívov obsahujúcich symlinky, alebo súborov s nepovolenými menami.', // edited 24.06.2012
'errArcMaxSize' : 'Súbory archívu prekračujú maximálnu povolenú veľkosť.',
'errResize' : 'Nie je možné zmeniť veľkost "$1".',
'errResizeDegree' : 'Neplatný stupeň otočenia.', // added 7.3.2013
'errResizeRotate' : 'Nie je možné otočiť obrázok.', // added 7.3.2013
'errResizeSize' : 'Neplatná veľkosť obrázka.', // added 7.3.2013
'errResizeNoChange' : 'Veľkosť obrázka sa nezmení.', // added 7.3.2013
'errResizeDegree' : 'Neplatný stupeň otočenia.', // added 7.3.2013
'errResizeRotate' : 'Nie je možné otočiť obrázok.', // added 7.3.2013
'errResizeSize' : 'Neplatná veľkosť obrázka.', // added 7.3.2013
'errResizeNoChange' : 'Veľkosť obrázka sa nezmení.', // added 7.3.2013
'errUsupportType' : 'Nepodporovaný typ súboru.',
'errNotUTF8Content' : 'Súbor "$1" nemá obsah kódovaný v UTF-8, a nemôže byť upravený.', // added 9.11.2011
'errNotUTF8Content' : 'Súbor "$1" nemá obsah kódovaný v UTF-8, a nemôže byť upravený.', // added 9.11.2011
'errNetMount' : 'Nie je možné pripojiť "$1".', // added 17.04.2012
'errNetMountNoDriver' : 'Nepodporovaný protokol.', // added 17.04.2012
'errNetMountFailed' : 'Pripájanie zlyhalo.', // added 17.04.2012
'errNetMountNoDriver' : 'Nepodporovaný protokol.', // added 17.04.2012
'errNetMountFailed' : 'Pripájanie zlyhalo.', // added 17.04.2012
'errNetMountHostReq' : 'Hosť je požadovaný.', // added 18.04.2012
'errSessionExpires' : 'Platnosť relácie uplynula z dôvodu nečinnosti.',
'errCreatingTempDir' : 'Nedá sa vytvoriť dočasný adresár: "$1"',
@ -108,6 +111,8 @@
'errSearchTimeout' : 'Vypršal časový limit pri hľadaní "$1". Výsledok vyhľadávania je čiastočný.', // from v2.1 added 12.1.2016
'errReauthRequire' : 'Opätovné povolenie je nutné.', // from v2.1.10 added 24.3.2016
'errMaxTargets' : 'Maximálny počet voliteľných predmetov je $1.', // from v2.1.17 added 17.10.2016
'errRestore' : 'Nepodarilo sa obnoviť z koša. Cieľ obnovenia nie je možné identifikovať.', // from v2.1.24 added 3.5.2017
'errEditorNotFound' : 'Editor tohto typu súboru nebol nájdený.', // from v2.1.25 added 23.5.2017
/******************************* commands names ********************************/
'cmdarchive' : 'Vytvoriť archív',
@ -132,6 +137,8 @@
'cmdreload' : 'Obnoviť',
'cmdrename' : 'Premenovať',
'cmdrm' : 'Vymazať',
'cmdtrash' : 'Do koša', //from v2.1.24 added 29.4.2017
'cmdrestore' : 'Obnoviť', //from v2.1.24 added 3.5.2017
'cmdsearch' : 'Nájsť súbory',
'cmdup' : 'Prejsť do nadradeného priečinka',
'cmdupload' : 'Nahrať súbory',
@ -155,17 +162,22 @@
'btnCancel' : 'Zrušiť',
'btnNo' : 'Nie',
'btnYes' : 'Áno',
'btnMount' : 'Pripojiť', // added 18.04.2012
'btnMount' : 'Pripojiť', // added 18.04.2012
'btnApprove': 'Ísť na $1 & schváliť', // from v2.1 added 26.04.2012
'btnUnmount': 'Odpojiť', // from v2.1 added 30.04.2012
'btnConv' : 'Previesť', // from v2.1 added 08.04.2014
'btnCwd' : 'Tu', // from v2.1 added 22.5.2015
'btnVolume' : 'Médium', // from v2.1 added 22.5.2015
'btnAll' : 'Všetko', // from v2.1 added 22.5.2015
'btnCwd' : 'Tu', // from v2.1 added 22.5.2015
'btnVolume' : 'Médium', // from v2.1 added 22.5.2015
'btnAll' : 'Všetko', // from v2.1 added 22.5.2015
'btnMime' : 'MIME typ', // from v2.1 added 22.5.2015
'btnFileName':'Názov súboru', // from v2.1 added 22.5.2015
'btnFileName':'Názov súboru', // from v2.1 added 22.5.2015
'btnSaveClose': 'Uložiť & zavrieť', // from v2.1 added 12.6.2015
'btnBackup' : 'Zálohovať', // from v2.1 added 28.11.2015
'btnBackup' : 'Zálohovať', // fromv2.1 added 28.11.2015
'btnRename' : 'Premenovať', // from v2.1.24 added 6.4.2017
'btnRenameAll' : 'Premenovať všetko', // from v2.1.24 added 6.4.2017
'btnPrevious' : 'Predchádzajúce ($1/$2)', // from v2.1.24 added 11.5.2017
'btnNext' : 'Ďalšie ($1/$2)', // from v2.1.24 added 11.5.2017
'btnSaveAs' : 'Uložiť ako', // from v2.1.25 added 24.5.2017
/******************************** notifications ********************************/
'ntfopen' : 'Otváranie priečinka',
@ -197,6 +209,12 @@
'ntfzipdl' : 'Vytvorenie súboru na stiahnutie', // from v2.1.7 added 23.1.2016
'ntfparents' : 'Získanie informácie o ceste', // from v2.1.17 added 2.11.2016
'ntfchunkmerge': 'Spracovanie nahraného súboru', // from v2.1.17 added 2.11.2016
'ntftrash' : 'Vhadzovanie do koša', // from v2.1.24 added 2.5.2017
'ntfrestore' : 'Vykonávanie obnovy z koša', // from v2.1.24 added 3.5.2017
'ntfchkdir' : 'Kontrola cieľového priečinka', // from v2.1.24 added 3.5.2017
/*********************************** volumes *********************************/
'volume_Trash' : 'Kôš', //from v2.1.24 added 29.4.2017
/************************************ dates **********************************/
'dateUnknown' : 'neznámy',
@ -248,23 +266,25 @@
'sortdate' : 'podľa dátumu',
'sortFoldersFirst' : 'Najskôr Priečinky',
'sortperm' : 'podľa povolenia', // from v2.1.13 added 13.06.2016
'sortmode' : 'podľa módu', // from v2.1.13 added 13.06.2016
'sortowner' : 'podľa majiteľa', // from v2.1.13 added 13.06.2016
'sortgroup' : 'podľa skupiny', // from v2.1.13 added 13.06.2016
'sortAlsoTreeview' : 'Tiež stromove zobrazenie', // from v2.1.15 added 01.08.2016
'sortmode' : 'podľa módu', // from v2.1.13 added 13.06.2016
'sortowner' : 'podľa majiteľa', // from v2.1.13 added 13.06.2016
'sortgroup' : 'podľa skupiny', // from v2.1.13 added 13.06.2016
'sortAlsoTreeview' : 'Tiež stromove zobrazenie', // from v2.1.15 added 01.08.2016
/********************************** new items **********************************/
'untitled file.txt' : 'Nový textový súbor.txt', // added 10.11.2015
'untitled folder' : 'Nový priečinok', // added 10.11.2015
'Archive' : 'Nový archív', // from v2.1 added 10.11.2015
'untitled folder' : 'Nový priečinok', // added 10.11.2015
'Archive' : 'Nový archív', // from v2.1 added 10.11.2015
/********************************** messages **********************************/
'confirmReq' : 'Očakávam potvrdenie',
'confirmRm' : 'Určite chcete vymazať súbory?<br/>Nebude sa to dať vrátiť späť!',
'confirmRepl' : 'Nahradiť starý súbor novým?',
'confirmRest' : 'Nahradiť existujúcu položku s položkou v koši?', // fromv2.1.24 added 5.5.2017
'confirmConvUTF8' : 'Nie je v UTF-8<br/>Previesť na UTF-8?<br/>Obsah sa stane UTF-8 uložením po konverzii.', // from v2.1 added 08.04.2014
'confirmNonUTF8' : 'Kódovanie tohto súboru nemoholo byť detekované. Pre editáciu dočasne potrebujete previesť na UTF-8 .<br/>Prosím, vyberte kódovanie znakov tohto súboru.', // from v2.1.19 added 28.11.2016
'confirmNotSave' : 'Bol upravený.<br/>Ak zmeny neuložíte, stratíte vykonanú prácu.', // from v2.1 added 15.7.2015
'confirmTrash' : 'Naozaj chcete presunúť položky do koša?', //from v2.1.24 added 29.4.2017
'apllyAll' : 'Použiť na všetky',
'name' : 'Meno',
'size' : 'Veľkosť',
@ -321,6 +341,7 @@
'selectForUpload' : 'Vyberte súbory',
'moveFiles' : 'Premiestniť súbory',
'copyFiles' : 'Kopírovať súbory',
'restoreFiles' : 'Obnoviť položky', // from v2.1.24 added 5.5.2017
'rmFromPlaces' : 'Odstrániť z umiestnení',
'aspectRatio' : 'Pomer zobrazenia',
'scale' : 'Mierka',
@ -338,12 +359,12 @@
'port' : 'Port', // added 18.04.2012
'user' : 'Užívateľ', // added 18.04.2012
'pass' : 'Heslo', // added 18.04.2012
'confirmUnmount' : 'Chcete odpojiť $1?', // from v2.1 added 30.04.2012
'confirmUnmount' : 'Chcete odpojiť $1?', // from v2.1 added 30.04.2012
'dropFilesBrowser': 'Premiestnite alebo presunte súbory z prehliadača', // from v2.1 added 30.05.2012
'dropPasteFiles' : 'Tu premiestnite alebo presunte súbory a adresy URL', // from v2.1 added 07.04.2014
'encoding' : 'Kódovanie', // from v2.1 added 19.12.2014
'locale' : 'Lokalizácia', // from v2.1 added 19.12.2014
'searchTarget' : 'Cieľ: $1', // from v2.1 added 22.5.2015
'locale' : 'Lokalizácia', // from v2.1 added 19.12.2014
'searchTarget' : 'Cieľ: $1', // from v2.1 added 22.5.2015
'searchMime' : 'Vyhľadávanie podľa vstupného MIME typu', // from v2.1 added 22.5.2015
'owner' : 'Majiteľ', // from v2.1 added 20.6.2015
'group' : 'Skupina', // from v2.1 added 20.6.2015
@ -355,8 +376,8 @@
'emptyFolderDrop' : 'Priečinok je prázdny, premiestnite alebo presunte položky', // from v2.1.6 added 30.12.2015
'emptyFolderLTap' : 'Priečinok je prázdny, dlhým kliknutím pridáte položky', // from v2.1.6 added 30.12.2015
'quality' : 'Kvalita', // from v2.1.6 added 5.1.2016
'autoSync' : 'Automatická synchronizácia', // from v2.1.6 added 10.1.2016
'moveUp' : 'Posunúť nahor', // from v2.1.6 added 18.1.2016
'autoSync' : 'Automatická synchronizácia', // from v2.1.6 added 10.1.2016
'moveUp' : 'Posunúť nahor', // from v2.1.6 added 18.1.2016
'getLink' : 'Získať URL odkaz', // from v2.1.7 added 9.2.2016
'selectedItems' : 'Vybraté položky ($1)', // from v2.1.7 added 2.19.2016
'folderId' : 'ID priečinka', // from v2.1.10 added 3.25.2016
@ -375,18 +396,21 @@
'contextmenu' : 'Kontextové menu', // from v2.1.15 added 9.9.2016
'pageTurning' : 'Otáčanie stránky', // from v2.1.15 added 10.9.2016
'volumeRoots' : 'Korene média', // from v2.1.16 added 16.9.2016
'reset' : 'Reset', // from v2.1.16 added 1.10.2016
'reset' : 'Resetovať', // from v2.1.16 added 1.10.2016
'bgcolor' : 'Farba pozadia', // from v2.1.16 added 1.10.2016
'colorPicker' : 'Výber farby', // from v2.1.16 added 1.10.2016
'8pxgrid' : '8px mriežka', // from v2.1.16 added 4.10.2016
'enabled' : 'Povolené', // from v2.1.16 added 4.10.2016
'disabled' : 'Zakázané', // from v2.1.16 added 4.10.2016
'emptyIncSearch' : 'Výsledky vyhľadávania sú prázdne v aktuálnom zobrazení.\\Stlačením tlačidla [Enter] rozšírite vyhľadávanie cieľa.', // from v2.1.16 added 5.10.2016
'emptyLetSearch' : 'Výsledky vyhľadávania prvého listu sú v aktuálnom zobrazení prázdne.', // from v2.1.23 added 24.3.2017
'textLabel' : 'Nápis textu', // from v2.1.17 added 13.10.2016
'minsLeft' : '$1 minút ostáva', // from v2.1.17 added 13.11.2016
'openAsEncoding' : 'Otvoriť s vybratým kódovaním', // from v2.1.19 added 2.12.2016
'saveAsEncoding' : 'Uložiť s vybratým kódovaním', // from v2.1.19 added 2.12.2016
'selectFolder' : 'Vyberte priečinok', // from v2.1.20 added 13.12.2016
'firstLetterSearch': 'Hľadanie prvého listu', // from v2.1.23 added 24.3.2017
'presets' : 'Presety', // from v2.1.25 added 26.5.2017
/********************************** mimetypes **********************************/
'kindUnknown' : 'Neznámy',
@ -471,3 +495,4 @@
}
};
}));

View File

@ -0,0 +1,10 @@
<h2>Operation Tips</h2>
<p>Operation on the UI is similar to operating system&#39;s standard file manager. However, Drag and Drop is not possible with mobile browsers. </p>
<ul>
<li>Right click or long tap to show the context menu.</li>
<li>Drag and drop into the folder tree or the current workspace to move/copy items.</li>
<li>Item selection in the workspace can be extended selection with Shift or Alt (Option) key.</li>
<li>Drag and Drop to the destination folder or workspace to upload files and folders.</li>
<li>The upload dialog can accept paste/drop clipboard data or URL lists and Drag and Drop from other browser or file managers etc.</li>
<li>Drag start with pressing Alt(Option) key to drag out to outside browser. It will became download operation with Google Chrome.</li>
</ul>

View File

@ -0,0 +1,10 @@
<h2>操作のヒント</h2>
<p>UIの操作は、オペレーティングシステムの標準ファイルマネージャにほぼ準拠しています。ただし、モバイルブラウザではドラッグドロップはできません。</p>
<ul>
<li>右クリックまたはロングタップでコンテキストメニューを表示します。</li>
<li>アイテムを移動/コピーするには、フォルダツリーまたはワークスペースにドラッグ&ドロップします。</li>
<li>ワークスペース内のアイテムの選択は、ShiftキーまたはAltキー(Optionキー)で選択範囲を拡張できます。</li>
<li>コピー先のフォルダまたはワークスペースにドラッグアンドドロップして、ファイルとフォルダをアップロードします。</li>
<li>アップロードダイアログでは、クリップボードのデータやURLリストのペースト/ドロップ、他のブラウザやファイルマネージャからのドラッグ&ドロップなどを受け入れることができます。</li>
<li>Altキー(Optionキー)を押しながらドラッグすると、ブラウザの外にドラッグできます。Google Chromeでダウンロード操作になります。</li>
</ul>

View File

@ -0,0 +1,10 @@
<h2>Operation Tips</h2>
<p>Operation on the UI is similar to operating system&#39;s standard file manager. However, Drag and Drop is not possible with mobile browsers. </p>
<ul>
<li>Right click or long tap to show the context menu.</li>
<li>Drag and drop into the folder tree or the current workspace to move/copy items.</li>
<li>Item selection in the workspace can be extended selection with Shift or Alt (Option) key.</li>
<li>Drag and Drop to the destination folder or workspace to upload files and folders.</li>
<li>The upload dialog can accept paste/drop clipboard data or URL lists and Drag and Drop from other browser or file managers etc.</li>
<li>Drag start with pressing Alt(Option) key to drag out to outside browser. It will became download operation with Google Chrome.</li>
</ul>

View File

@ -90,8 +90,8 @@ window.elFinderSupportVer1 = function(upload) {
_opts = $.extend(true, {}, opts);
$.each(opts.data.targets, function(i, hash) {
$.ajax($.extend(_opts, {data : {cmd : 'duplicate', target : hash, current : fm.file(hash).phash}}))
.error(function(error) {
$.ajax(Object.assign(_opts, {data : {cmd : 'duplicate', target : hash, current : fm.file(hash).phash}}))
.fail(function(error) {
fm.error(fm.res('error', 'connect'));
})
.done(function(data) {
@ -210,7 +210,7 @@ window.elFinderSupportVer1 = function(upload) {
// }
if (cmd == 'upload' && data.error && data.cwd) {
data.warning = $.extend({}, data.error);
data.warning = Object.assign({}, data.error);
data.error = false;
}
@ -289,7 +289,7 @@ window.elFinderSupportVer1 = function(upload) {
}
}
return $.extend({
return Object.assign({
current : data.cwd.hash,
error : data.error,
warning : data.warning,

View File

@ -0,0 +1,2 @@
order deny,allow
deny from all

View File

@ -24,6 +24,7 @@ function elFinderAutoloader($name) {
'elFinderVolumeGroup' => ELFINDER_PHP_ROOT_PATH . '/elFinderVolumeGroup.class.php',
'elFinderVolumeLocalFileSystem' => ELFINDER_PHP_ROOT_PATH . '/elFinderVolumeLocalFileSystem.class.php',
'elFinderVolumeMySQL' => ELFINDER_PHP_ROOT_PATH . '/elFinderVolumeMySQL.class.php',
'elFinderVolumeTrash' => ELFINDER_PHP_ROOT_PATH . '/elFinderVolumeTrash.class.php',
);
if (isset($map[$name])) {
return include_once($map[$name]);

View File

@ -73,14 +73,20 @@ elFinder::$netDrivers['ftp'] = 'FTP';
* Simple function to demonstrate how to control file access using "accessControl" callback.
* This method will disable accessing files/folders starting from '.' (dot)
*
* @param string $attr attribute name (read|write|locked|hidden)
* @param string $path file path relative to volume root directory started with directory separator
* @param string $attr attribute name (read|write|locked|hidden)
* @param string $path absolute file path
* @param string $data value of volume option `accessControlData`
* @param object $volume elFinder volume driver object
* @param bool|null $isDir path is directory (true: directory, false: file, null: unknown)
* @param string $relpath file path relative to volume root directory started with directory separator
* @return bool|null
**/
function access($attr, $path, $data, $volume) {
return strpos(basename($path), '.') === 0 // if file/folder begins with '.' (dot)
? !($attr == 'read' || $attr == 'write') // set read+write to false, other (locked+hidden) set to true
: null; // else elFinder decide it itself
function access($attr, $path, $data, $volume, $isDir, $relpath) {
$basename = basename($path);
return $basename[0] === '.' // if file/folder begins with '.' (dot)
&& strlen($relpath) !== 1 // but with out volume root
? !($attr == 'read' || $attr == 'write') // set read+write to false, other (locked+hidden) set to true
: null; // else elFinder decide it itself
}
@ -89,14 +95,29 @@ function access($attr, $path, $data, $volume) {
$opts = array(
// 'debug' => true,
'roots' => array(
// Items volume
array(
'driver' => 'LocalFileSystem', // driver for accessing file system (REQUIRED)
'path' => '../files/', // path to files (REQUIRED)
'URL' => dirname($_SERVER['PHP_SELF']) . '/../files/', // URL to files (REQUIRED)
'trashHash' => 't1_Lw', // elFinder's hash of trash folder
'winHashFix' => DIRECTORY_SEPARATOR !== '/', // to make hash same to Linux one on windows too
'uploadDeny' => array('all'), // All Mimetypes not allowed to upload
'uploadAllow' => array('image', 'text/plain'),// Mimetype `image` and `text/plain` allowed to upload
'uploadOrder' => array('deny', 'allow'), // allowed Mimetype `image` and `text/plain` only
'accessControl' => 'access' // disable and hide dot starting files (OPTIONAL)
),
// Trash volume
array(
'id' => '1',
'driver' => 'Trash',
'path' => '../files/.trash/',
'tmbURL' => dirname($_SERVER['PHP_SELF']) . '/../files/.trash/.tmb/',
'winHashFix' => DIRECTORY_SEPARATOR !== '/', // to make hash same to Linux one on windows too
'uploadDeny' => array('all'), // Recomend the same settings as the original volume that uses the trash
'uploadAllow' => array('image', 'text/plain'),// Same as above
'uploadOrder' => array('deny', 'allow'), // Same as above
'accessControl' => 'access', // Same as above
)
)
);

View File

@ -84,14 +84,20 @@ elFinder::$netDrivers['ftp'] = 'FTP';
* Simple function to demonstrate how to control file access using "accessControl" callback.
* This method will disable accessing files/folders starting from '.' (dot)
*
* @param string $attr attribute name (read|write|locked|hidden)
* @param string $path file path relative to volume root directory started with directory separator
* @param string $attr attribute name (read|write|locked|hidden)
* @param string $path absolute file path
* @param string $data value of volume option `accessControlData`
* @param object $volume elFinder volume driver object
* @param bool|null $isDir path is directory (true: directory, false: file, null: unknown)
* @param string $relpath file path relative to volume root directory started with directory separator
* @return bool|null
**/
function access($attr, $path, $data, $volume) {
return strpos(basename($path), '.') === 0 // if file/folder begins with '.' (dot)
? !($attr == 'read' || $attr == 'write') // set read+write to false, other (locked+hidden) set to true
: null; // else elFinder decide it itself
function access($attr, $path, $data, $volume, $isDir, $relpath) {
$basename = basename($path);
return $basename[0] === '.' // if file/folder begins with '.' (dot)
&& strlen($relpath) !== 1 // but with out volume root
? !($attr == 'read' || $attr == 'write') // set read+write to false, other (locked+hidden) set to true
: null; // else elFinder decide it itself
}
@ -154,4 +160,5 @@ $opts = array(
// run elFinder
$connector = new elFinderConnector(new elFinder($opts));
$connector->run();
$connector->run();

View File

@ -73,14 +73,20 @@ elFinder::$netDrivers['ftp'] = 'FTP';
* Simple function to demonstrate how to control file access using "accessControl" callback.
* This method will disable accessing files/folders starting from '.' (dot)
*
* @param string $attr attribute name (read|write|locked|hidden)
* @param string $path file path relative to volume root directory started with directory separator
* @param string $attr attribute name (read|write|locked|hidden)
* @param string $path absolute file path
* @param string $data value of volume option `accessControlData`
* @param object $volume elFinder volume driver object
* @param bool|null $isDir path is directory (true: directory, false: file, null: unknown)
* @param string $relpath file path relative to volume root directory started with directory separator
* @return bool|null
**/
function access($attr, $path, $data, $volume) {
return strpos(basename($path), '.') === 0 // if file/folder begins with '.' (dot)
? !($attr == 'read' || $attr == 'write') // set read+write to false, other (locked+hidden) set to true
: null; // else elFinder decide it itself
function access($attr, $path, $data, $volume, $isDir, $relpath) {
$basename = basename($path);
return $basename[0] === '.' // if file/folder begins with '.' (dot)
&& strlen($relpath) !== 1 // but with out volume root
? !($attr == 'read' || $attr == 'write') // set read+write to false, other (locked+hidden) set to true
: null; // else elFinder decide it itself
}
@ -89,14 +95,29 @@ function access($attr, $path, $data, $volume) {
$opts = array(
// 'debug' => true,
'roots' => array(
// Items volume
array(
'driver' => 'LocalFileSystem', // driver for accessing file system (REQUIRED)
'path' => '../files/', // path to files (REQUIRED)
'URL' => dirname($_SERVER['PHP_SELF']) . '/../files/', // URL to files (REQUIRED)
'trashHash' => 't1_Lw', // elFinder's hash of trash folder
'winHashFix' => DIRECTORY_SEPARATOR !== '/', // to make hash same to Linux one on windows too
'uploadDeny' => array('all'), // All Mimetypes not allowed to upload
'uploadAllow' => array('image', 'text/plain'),// Mimetype `image` and `text/plain` allowed to upload
'uploadOrder' => array('deny', 'allow'), // allowed Mimetype `image` and `text/plain` only
'accessControl' => 'access' // disable and hide dot starting files (OPTIONAL)
),
// Trash volume
array(
'id' => '1',
'driver' => 'Trash',
'path' => '../files/.trash/',
'tmbURL' => dirname($_SERVER['PHP_SELF']) . '/../files/.trash/.tmb/',
'winHashFix' => DIRECTORY_SEPARATOR !== '/', // to make hash same to Linux one on windows too
'uploadDeny' => array('all'), // Recomend the same settings as the original volume that uses the trash
'uploadAllow' => array('image', 'text/plain'),// Same as above
'uploadOrder' => array('deny', 'allow'), // Same as above
'accessControl' => 'access', // Same as above
)
)
);

View File

@ -2,6 +2,8 @@
error_reporting(0); // Set E_ALL for debuging
define('ACP', 1);
define('BASE_DIR', str_replace("\\", "/", dirname(dirname(dirname(dirname(dirname(__FILE__)))))));
include_once BASE_DIR . '/inc/init.php';
@ -82,14 +84,20 @@ elFinder::$netDrivers['ftp'] = 'FTP';
* Simple function to demonstrate how to control file access using "accessControl" callback.
* This method will disable accessing files/folders starting from '.' (dot)
*
* @param string $attr attribute name (read|write|locked|hidden)
* @param string $path file path relative to volume root directory started with directory separator
* @param string $attr attribute name (read|write|locked|hidden)
* @param string $path absolute file path
* @param string $data value of volume option `accessControlData`
* @param object $volume elFinder volume driver object
* @param bool|null $isDir path is directory (true: directory, false: file, null: unknown)
* @param string $relpath file path relative to volume root directory started with directory separator
* @return bool|null
**/
function access($attr, $path, $data, $volume) {
return strpos(basename($path), '.') === 0 // if file/folder begins with '.' (dot)
? !($attr == 'read' || $attr == 'write') // set read+write to false, other (locked+hidden) set to true
: null; // else elFinder decide it itself
function access($attr, $path, $data, $volume, $isDir, $relpath) {
$basename = basename($path);
return $basename[0] === '.' // if file/folder begins with '.' (dot)
&& strlen($relpath) !== 1 // but with out volume root
? !($attr == 'read' || $attr == 'write') // set read+write to false, other (locked+hidden) set to true
: null; // else elFinder decide it itself
}

View File

@ -53,6 +53,30 @@ class elFinder {
*/
public static $defaultMimefile = '';
/**
* A file save destination path when a temporary content URL is required
* on a network volume or the like
* It can be overwritten by volume route setting
*
* @var string
*/
public static $tmpLinkPath = '';
/**
* A file save destination URL when a temporary content URL is required
* on a network volume or the like
* It can be overwritten by volume route setting
*
* @var string
*/
public static $tmpLinkUrl = '';
/**
* Temporary content URL lifetime (seconds)
*
* @var integer
*/
public static $tmpLinkLifeTime = 3600;
/**
* elFinder session wrapper object
*
@ -132,7 +156,7 @@ class elFinder {
'open' => array('target' => false, 'tree' => false, 'init' => false, 'mimes' => false, 'compare' => false),
'ls' => array('target' => true, 'mimes' => false, 'intersect' => false),
'tree' => array('target' => true),
'parents' => array('target' => true),
'parents' => array('target' => true, 'until' => false),
'tmb' => array('targets' => true),
'file' => array('target' => true, 'download' => false),
'zipdl' => array('targets' => true, 'download' => false),
@ -143,7 +167,7 @@ class elFinder {
'rename' => array('target' => true, 'name' => true, 'mimes' => false),
'duplicate' => array('targets' => true, 'suffix' => false),
'paste' => array('dst' => true, 'targets' => true, 'cut' => false, 'mimes' => false, 'renames' => false, 'hashes' => false, 'suffix' => false),
'upload' => array('target' => true, 'FILES' => true, 'mimes' => false, 'html' => false, 'upload' => false, 'name' => false, 'upload_path' => false, 'chunk' => false, 'cid' => false, 'node' => false, 'renames' => false, 'hashes' => false, 'suffix' => false, 'mtime' => false),
'upload' => array('target' => true, 'FILES' => true, 'mimes' => false, 'html' => false, 'upload' => false, 'name' => false, 'upload_path' => false, 'chunk' => false, 'cid' => false, 'node' => false, 'renames' => false, 'hashes' => false, 'suffix' => false, 'mtime' => false, 'overwrite' => false),
'get' => array('target' => true, 'conv' => false),
'put' => array('target' => true, 'content' => '', 'mimes' => false, 'encoding' => false),
'archive' => array('targets' => true, 'type' => true, 'mimes' => false, 'name' => false),
@ -295,6 +319,7 @@ class elFinder {
const ERROR_LOCKED = 'errLocked'; // '"$1" is locked and can not be renamed, moved or removed.'
const ERROR_EXISTS = 'errExists'; // 'File named "$1" already exists.'
const ERROR_INVALID_NAME = 'errInvName'; // 'Invalid file name.'
const ERROR_INVALID_DIRNAME = 'errInvDirname'; // 'Invalid folder name.'
const ERROR_MKDIR = 'errMkdir';
const ERROR_MKFILE = 'errMkfile';
const ERROR_RENAME = 'errRename';
@ -387,6 +412,8 @@ class elFinder {
if ($this->debug) {
error_reporting(defined('ELFINDER_DEBUG_ERRORLEVEL')? ELFINDER_DEBUG_ERRORLEVEL : -1);
ini_set('diaplay_errors', '1');
// clear output buffer and stop output filters
while(ob_get_level() && ob_end_clean()){}
}
if (! interface_exists('elFinderSessionInterface')) {
@ -436,6 +463,15 @@ class elFinder {
elFinder::$commonTempPath = '';
}
}
if (! empty($opts['tmpLinkPath'])) {
elFinder::$tmpLinkPath = $opts['tmpLinkPath'];
}
if (! empty($opts['tmpLinkUrl'])) {
elFinder::$tmpLinkUrl = $opts['tmpLinkUrl'];
}
if (! empty($opts['tmpLinkLifeTime'])) {
elFinder::$tmpLinkLifeTime = $opts['tmpLinkLifeTime'];
}
$this->maxArcFilesSize = isset($opts['maxArcFilesSize'])? intval($opts['maxArcFilesSize']) : 0;
$this->optionsNetVolumes = (isset($opts['optionsNetVolumes']) && is_array($opts['optionsNetVolumes']))? $opts['optionsNetVolumes'] : array();
if (isset($opts['itemLockExpire'])) {
@ -546,6 +582,7 @@ class elFinder {
$this->mountErrors[] = 'Driver "'.$class.'" : '.$e->getMessage();
}
} else {
$this->removeNetVolume($i, $volume);
$this->mountErrors[] = 'Driver "'.$class.'" does not exist';
}
}
@ -737,11 +774,15 @@ class elFinder {
} else if (isset($args['targets']) && is_array($args['targets']) && isset($args['targets'][0])) {
$dst = $args['targets'][0];
$dstVolume = $this->volume($dst);
if (($_stat = $dstVolume->file($dst)) && ! empty($_stat['phash'])) {
if ($dstVolume && ($_stat = $dstVolume->file($dst)) && ! empty($_stat['phash'])) {
$dst = $_stat['phash'];
} else {
$dst = '';
}
} else if ($cmd === 'open') {
// for initial open without args `target`
$dstVolume = $this->default;
$dst = $dstVolume->defaultPath();
}
$result = null;
@ -1273,9 +1314,10 @@ class elFinder {
**/
protected function parents($args) {
$target = $args['target'];
$until = $args['until'];
if (($volume = $this->volume($target)) == false
|| ($tree = $volume->parents($target)) == false) {
|| ($tree = $volume->parents($target, false, $until)) == false) {
return array('error' => $this->error(self::ERROR_OPEN, '#'.$target));
}
@ -1482,6 +1524,9 @@ class elFinder {
**/
protected function size($args) {
$size = 0;
$files = 0;
$dirs = 0;
$itemCount = true;
foreach ($args['targets'] as $target) {
if (($volume = $this->volume($target)) == false
@ -1490,9 +1535,26 @@ class elFinder {
return array('error' => $this->error(self::ERROR_OPEN, '#'.$target));
}
$size += $volume->size($target);
$volRes = $volume->size($target);
if (is_array($volRes)) {
if (! empty($volRes['size'])) {
$size += $volRes['size'];
}
if ($itemCount) {
if (! empty($volRes['files'])) {
$files += $volRes['files'];
}
if (! empty($volRes['dirs'])) {
$dirs += $volRes['dirs'];
}
}
} else if (is_numeric($volRes)) {
$size += $volRes;
$files = $dirs = 'unknown';
$itemCount = false;
}
}
return array('size' => $size);
return array('size' => $size, 'fileCnt' => $files, 'dirCnt' => $dirs);
}
/**
@ -1528,9 +1590,16 @@ class elFinder {
}
$tgt =& $reset;
}
return ($res = $this->ensureDirsRecursively($volume, $target, $mkdirs)) === false
? array('error' => $this->error(self::ERROR_MKDIR, $name, $volume->error()))
: array('added' => $res['stats'], 'hashes' => $res['hashes']);
$res = $this->ensureDirsRecursively($volume, $target, $mkdirs);
if ($res['error']) {
$errors = $volume->error();
if ($res['makes']) {
$this->rm(array('targets' => $res['makes']));
}
return array('error' => $this->error(self::ERROR_MKDIR, $res['error'][0], $errors));
} else {
return array('added' => $res['stats'], 'hashes' => $res['hashes']);
}
} else {
return ($dir = $volume->mkdir($target, $name)) == false
? array('error' => $this->error(self::ERROR_MKDIR, $name, $volume->error()))
@ -1885,16 +1954,26 @@ class elFinder {
*
* @param string $str
* @param array $extTable
* @param array $args
* @return array
* @author Naoki Sawada
*/
protected function parse_data_scheme( $str, $extTable ) {
protected function parse_data_scheme( $str, $extTable, $args = null) {
$data = $name = '';
if ($fp = fopen('data://'.substr($str, 5), 'rb')) {
if ($data = stream_get_contents($fp)) {
$meta = stream_get_meta_data($fp);
$ext = isset($extTable[$meta['mediatype']])? '.' . $extTable[$meta['mediatype']] : '';
$name = substr(md5($data), 0, 8) . $ext;
// Set name if name eq 'image.png' and $args has 'name' array, e.g. clipboard data
if (is_array($args['name']) && isset($args['name'][0])) {
$name = $args['name'][0];
if ($ext) {
$name = preg_replace('/\.[^.]*$/', '', $name);
}
} else {
$name = substr(md5($data), 0, 8);
}
$name .= $ext;
}
fclose($fp);
}
@ -1902,18 +1981,18 @@ class elFinder {
}
/**
* Detect file type extension by local path
* Detect file MIME Type by local path
*
* @param string $path Local path
* @return string file type extension with dot
* @return string file MIME Type
* @author Naoki Sawada
*/
protected function detectFileExtension($path) {
protected function detectMimeType($path) {
static $type, $finfo, $volume;
if (!$type) {
$keys = array_keys($this->volumes);
$volume = $this->volumes[$keys[0]];
if (class_exists('finfo', false)) {
$tmpFileInfo = explode(';', finfo_file(finfo_open(FILEINFO_MIME), __FILE__));
} else {
@ -1925,7 +2004,7 @@ class elFinder {
$finfo = finfo_open(FILEINFO_MIME);
} elseif (function_exists('mime_content_type')
&& preg_match($regexp, array_shift(explode(';', mime_content_type(__FILE__))))) {
$type = 'mime_content_type';
$type = 'mime_content_type';
} elseif (function_exists('getimagesize')) {
$type = 'getimagesize';
} else {
@ -1947,7 +2026,7 @@ class elFinder {
if ($mime) {
$mime = explode(';', $mime);
$mime = trim($mime[0]);
if (in_array($mime, array('application/x-empty', 'inode/x-empty'))) {
// finfo return this mime for empty files
$mime = 'text/plain';
@ -1956,8 +2035,21 @@ class elFinder {
$mime = 'application/zip';
}
}
$ext = $mime? $volume->getExtentionByMime($mime) : '';
return $mime? $mime : 'unknown';
}
/**
* Detect file type extension by local path
*
* @param object $volume elFinderVolumeDriver instance
* @param string $path Local path
* @return string file type extension with dot
* @author Naoki Sawada
*/
protected function detectFileExtension($volume, $path) {
$mime = $this->detectMimeType($path);
$ext = $mime !== 'unknown'? $volume->getExtentionByMime($mime) : '';
return $ext? ('.' . $ext) : '';
}
@ -2199,11 +2291,19 @@ class elFinder {
$cid = $args['cid']? (int)$args['cid'] : '';
$mtimes = $args['mtime']? $args['mtime'] : array();
if (!$volume) {
return array_merge(array('error' => $this->error(self::ERROR_UPLOAD, self::ERROR_TRGDIR_NOT_FOUND, '#'.$target)), $header);
}
// check $chunk
if (strpos($chunk, '/') !== false || strpos($chunk, '\\') !== false) {
return array('error' => $this->error(self::ERROR_UPLOAD));
}
if ($args['overwrite'] !== '') {
$volume->setUploadOverwrite($args['overwrite']);
}
$renames = $hashes = array();
$suffix = '~';
if ($args['renames'] && is_array($args['renames'])) {
@ -2216,10 +2316,6 @@ class elFinder {
$hashes = array_flip($args['hashes']);
}
if (!$volume) {
return array_merge(array('error' => $this->error(self::ERROR_UPLOAD, self::ERROR_TRGDIR_NOT_FOUND, '#'.$target)), $header);
}
$this->itemLock($target);
// regist Shutdown function
@ -2243,34 +2339,6 @@ class elFinder {
$extTable = array_flip(array_unique($volume->getMimeTable()));
if (empty($files)) {
//--- This part is unnecessary code from 2.1.7 START ---//
if (!$args['upload'] && $args['name'] && is_array($args['name'])) {
$error = '';
$result['name'] = array();
foreach($args['name'] as $_i => $_name) {
if (!$volume->isUploadableByName($_name)) {
$error = $this->error(self::ERROR_UPLOAD_FILE, $_name, self::ERROR_UPLOAD_FILE_MIME);
break;
}
$result['name'][$_i] = preg_replace($ngReg, '_', $_name);
}
if ($error) {
$result['error'] = $error;
return $result;
}
$result = array_merge_recursive($result, $this->ls($args));
if (empty($result['list'])) {
$result['name'] = array();
} else {
// It is using the old(<=2.1.6) JavaScript in the new(>2.1.6) back-end?
unset($result['list']['exists'], $result['list']['hashes']);
$result['name'] = array_merge(array_intersect($result['name'], $result['list']));
}
return $result;
}
//--- This part is unnessesaly code from 2.1.7 END ---//
if (isset($args['upload']) && is_array($args['upload']) && ($tempDir = $this->getTempDir($volume->getTempPath()))) {
$names = array();
foreach($args['upload'] as $i => $url) {
@ -2297,11 +2365,10 @@ class elFinder {
$_name = '';
// check is data:
if (substr($url, 0, 5) === 'data:') {
list($data, $args['name'][$i]) = $this->parse_data_scheme($url, $extTable);
list($data, $args['name'][$i]) = $this->parse_data_scheme($url, $extTable, $args);
} else {
$fp = fopen($tmpfname, 'wb');
$data = $this->get_remote_contents($url, 30, 5, 'Mozilla/5.0', $fp);
$_POST['overwrite'] = false;
$_name = preg_replace('~^.*?([^/#?]+)(?:\?.*)?(?:#.*)?$~', '$1', rawurldecode($url));
// Check `Content-Disposition` response header
if ($data && ($headers = get_headers($url, true)) && !empty($headers['Content-Disposition'])) {
@ -2331,7 +2398,7 @@ class elFinder {
rename($tmpfname, $tmpfname . $_ext);
$tmpfname = $tmpfname . $_ext;
}
$_b = $this->detectFileExtension($tmpfname);
$_b = $this->detectFileExtension($volume, $tmpfname);
$_name = $_a.$_b;
} else {
$_b = '.'.$_b;
@ -2344,8 +2411,10 @@ class elFinder {
$files['tmp_name'][$i] = $tmpfname;
$files['name'][$i] = $_name;
$files['error'][$i] = 0;
// set to auto rename
$volume->setUploadOverwrite(false);
} else {
unlink($tmpfname);
unlink($tmpfname);
}
}
}
@ -2365,7 +2434,7 @@ class elFinder {
}
$tmpname = $files['tmp_name'][$i];
$path = ($paths && isset($paths[$i]))? $paths[$i] : '';
$thash = ($paths && isset($paths[$i]))? $paths[$i] : '';
$mtime = isset($mtimes[$i])? $mtimes[$i] : 0;
if ($name === 'blob') {
if ($chunk) {
@ -2389,21 +2458,31 @@ class elFinder {
}
return $result;
} else {
// for form clipboard with Google Chrome
$type = $files['type'][$i];
$ext = isset($extTable[$type])? '.' . $extTable[$type] : '';
$name = substr(md5(basename($tmpname)), 0, 8) . $ext;
// for form clipboard with Google Chrome or Opera
$name = 'image.png';
}
}
// Set name if name eq 'image.png' and $args has 'name' array, e.g. clipboard data
if (strtolower(substr($name, 0, 5)) === 'image' && is_array($args['name']) && isset($args['name'][$i])) {
$type = $files['type'][$i];
$name = $args['name'][$i];
$ext = isset($extTable[$type])? '.' . $extTable[$type] : '';
if ($ext) {
$name = preg_replace('/\.[^.]*$/', '', $name);
}
$name .= $ext;
}
// do hook function 'upload.presave'
if (! empty($this->listeners['upload.presave'])) {
foreach($this->listeners['upload.presave'] as $handler) {
call_user_func_array($handler, array(&$path, &$name, $tmpname, $this, $volume));
call_user_func_array($handler, array(&$thash, &$name, $tmpname, $this, $volume));
}
}
if ($mtime) {
// for keep timestamp option in the LocalFileSystem volume
touch($tmpname, $mtime);
}
@ -2417,15 +2496,15 @@ class elFinder {
break;
}
$rnres = array();
if ($path !== '' && $path !== $target) {
if ($dir = $volume->dir($path)) {
$_target = $path;
if (! isset($addedDirs[$path])) {
$addedDirs[$path] = true;
if ($thash !== '' && $thash !== $target) {
if ($dir = $volume->dir($thash)) {
$_target = $thash;
if (! isset($addedDirs[$thash])) {
$addedDirs[$thash] = true;
$result['added'][] =$dir;
}
} else {
$result['error'] = $this->error(self::ERROR_UPLOAD, self::ERROR_TRGDIR_NOT_FOUND, 'hash@'.$path);
$result['error'] = $this->error(self::ERROR_UPLOAD, self::ERROR_TRGDIR_NOT_FOUND, 'hash@'.$thash);
break;
}
} else {
@ -2495,7 +2574,7 @@ class elFinder {
$targets = is_array($args['targets']) ? $args['targets'] : array();
$cut = !empty($args['cut']);
$error = $cut ? self::ERROR_MOVE : self::ERROR_COPY;
$result = array('changed' => array(), 'added' => array(), 'removed' => array());
$result = array('changed' => array(), 'added' => array(), 'removed' => array(), 'warning' => array());
if (($dstVolume = $this->volume($dst)) == false) {
return array('error' => $this->error($error, '#'.$targets[0], self::ERROR_TRGDIR_NOT_FOUND, '#'.$dst));
@ -2519,8 +2598,8 @@ class elFinder {
elFinder::extendTimeLimit();
if (($srcVolume = $this->volume($target)) == false) {
$result['warning'] = $this->error($error, '#'.$target, self::ERROR_FILE_NOT_FOUND);
break;
$result['warning'] = array_merge($result['warning'], $this->error($error, '#'.$target, self::ERROR_FILE_NOT_FOUND));
continue;
}
$rnres = array();
@ -2535,21 +2614,21 @@ class elFinder {
}
$rnres = $this->rename(array('target' => $hash, 'name' => $dstVolume->uniqueName($dir, $file['name'], $suffix, true, 0)));
if (!empty($rnres['error'])) {
$result['warning'] = $rnres['error'];
break;
$result['warning'] = array_merge($result['warning'], $rnres['error']);
continue;
}
}
}
if ($cut && $this->itemLocked($target)) {
$rm = $srcVolume->file($target);
$result['warning'] = $this->error(self::ERROR_LOCKED, $rm['name']);
break;
$result['warning'] = array_merge($result['warning'], $this->error(self::ERROR_LOCKED, $rm['name']));
continue;
}
if (($file = $dstVolume->paste($srcVolume, $target, $dst, $cut, $hashes)) == false) {
$result['warning'] = $this->error($dstVolume->error());
break;
$result['warning'] = array_merge($result['warning'], $this->error($dstVolume->error()));
continue;
}
$dirChange = ! empty($file['dirChange']);
@ -2563,6 +2642,10 @@ class elFinder {
$result = array_merge_recursive($result, $rnres);
}
}
if (count($result['warning']) < 1) {
unset($result['warning']);
}
return $result;
}
@ -2589,11 +2672,9 @@ class elFinder {
$mime = isset($file['mime'])? $file['mime'] : '';
if ($mime && strtolower(substr($mime, 0, 4)) === 'text') {
$enc = '';
if (! $args['conv'] || $args['conv'] == '1') {
// detect encoding
if ($content === '') {
$enc = '';
} else {
if ($content !== '') {
if (! $args['conv'] || $args['conv'] == '1') {
// detect encoding
if (function_exists('mb_detect_encoding')) {
if ($enc = mb_detect_encoding($content , mb_detect_order(), true)) {
$encu = strtoupper($enc);
@ -2638,20 +2719,22 @@ class elFinder {
return array('doconv' => $enc);
}
}
}
}
if ($args['conv']) {
$enc = $args['conv'];
if (strtoupper($enc) !== 'UTF-8') {
$_content = $content;
$content = iconv($enc, 'UTF-8', $content);
if ($content === false && function_exists('mb_convert_encoding')) {
$content = mb_convert_encoding($_content, 'UTF-8', $enc);
}
if ($args['conv']) {
$enc = $args['conv'];
if (strtoupper($enc) !== 'UTF-8') {
$_content = $content;
$content = iconv($enc, 'UTF-8', $content);
if ($content === false && function_exists('mb_convert_encoding')) {
$content = mb_convert_encoding($_content, 'UTF-8', $enc);
}
} else {
$enc = '';
}
} else {
$enc = '';
}
}
} else {
$content = 'data:' . ($mime? $mime : 'application/octet-stream') . ';base64,'.base64_encode($content);
}
if ($enc !== false) {
@ -2679,6 +2762,7 @@ class elFinder {
*/
protected function put($args) {
$target = $args['target'];
$encoding = isset($args['encoding'])? $args['encoding'] : '';
if (($volume = $this->volume($target)) == false
|| ($file = $volume->file($target)) == false) {
@ -2687,10 +2771,23 @@ class elFinder {
$this->itemLock($target);
if (! empty($args['encoding'])) {
$content = iconv('UTF-8', $args['encoding'], $args['content']);
if ($encoding === 'scheme') {
if (preg_match('~^https?://~i', $args['content'])) {
$fp = $this->get_remote_contents($args['content'], 30, 5, 'Mozilla/5.0', tmpfile());
if (! $fp) {
return array('error' => self::ERROR_SAVE, $args['content'], self::ERROR_FILE_NOT_FOUND);
}
$fmeta = stream_get_meta_data($fp);
$mime = $this->detectMimeType($fmeta['uri']);
$args['content'] = 'data:'.$mime.';base64,'.base64_encode(file_get_contents($fmeta['uri']));
}
$encoding = '';
$args['content'] = "\0" . $args['content'];
}
if ($encoding) {
$content = iconv('UTF-8', $encoding, $args['content']);
if ($content === false && function_exists('mb_detect_encoding')) {
$content = mb_convert_encoding($args['content'], $args['encoding'], 'UTF-8');
$content = mb_convert_encoding($args['content'], $encoding, 'UTF-8');
}
if ($content !== false) {
$args['content'] = $content;
@ -3036,6 +3133,26 @@ class elFinder {
elFinder::$phpErrors[] = "NOTICE: $errstr in $errfile line $errline.";
$proc = true;
break;
case E_STRICT:
elFinder::$phpErrors[] = "STRICT: $errstr in $errfile line $errline.";
$proc = true;
break;
case E_RECOVERABLE_ERROR:
elFinder::$phpErrors[] = "RECOVERABLE_ERROR: $errstr in $errfile line $errline.";
$proc = true;
break;
}
if (defined('E_DEPRECATED')) {
switch ($errno) {
case E_DEPRECATED:
case E_USER_DEPRECATED:
elFinder::$phpErrors[] = "DEPRECATED: $errstr in $errfile line $errline.";
$proc = true;
break;
}
}
return $proc;
@ -3233,26 +3350,30 @@ class elFinder {
* @param string $target Target hash
* @param string $dirs Array of directory tree to ensure
* @param string $path Relative path form target hash
* @return array|false array('stats' => array([stat of maked directory]), 'hashes' => array('[path]' => '[hash]'))
* @return array|false array('stats' => array([stat of maked directory]), 'hashes' => array('[path]' => '[hash]'), 'makes' => array([New directory hashes]), 'error' => array([Error name]))
* @author Naoki Sawada
**/
protected function ensureDirsRecursively($volume, $target, $dirs, $path = '') {
$res = array('stats' => array(), 'hashes' => array());
$res = array('stats' => array(), 'hashes' => array(), 'makes' => array(), 'error' => array());
foreach($dirs as $name => $sub) {
$name = (string)$name;
if ((($parent = $volume->realpath($target)) && ($dir = $volume->dir($volume->getHash($parent, $name)))) || ($dir = $volume->mkdir($target, $name))) {
$newDir = null;
if ((($parent = $volume->realpath($target)) && ($dir = $volume->dir($volume->getHash($parent, $name)))) || ($newDir = $volume->mkdir($target, $name))) {
$_path = $path . '/' . $name;
if ($newDir) {
$res['makes'][] = $newDir['hash'];
$dir = $newDir;
}
$res['stats'][] = $dir;
$res['hashes'][$_path] = $dir['hash'];
if (count($sub)) {
if ($subRes = $this->ensureDirsRecursively($volume, $dir['hash'], $sub, $_path)) {
$res = array_merge_recursive($res, $subRes);
} else {
return false;
$res = array_merge_recursive($res, $this->ensureDirsRecursively($volume, $dir['hash'], $sub, $_path));
if ($res['error']) {
break;
}
}
} else {
return false;
$res['error'][] = $name;
}
}
return $res;

View File

@ -54,7 +54,7 @@ class elFinderConnector {
$this->elFinder = $elFinder;
$this->reqMethod = strtoupper($_SERVER["REQUEST_METHOD"]);
if ($debug) {
self::$contentType = 'Content-Type: text/html; charset=utf-8';
self::$contentType = 'Content-Type: text/plain; charset=utf-8';
}
}
@ -173,6 +173,9 @@ class elFinderConnector {
}
if (isset($data['pointer'])) {
// set time limit to 0
elFinder::extendTimeLimit(0);
// send optional header
if (!empty($data['header'])) {
self::sendHeader($data['header']);

View File

@ -14,8 +14,6 @@ class elFinderSession implements elFinderSessionInterface
protected $keys = array();
protected $prevVal = null;
protected $base64encode = false;
protected $opts = array(
@ -51,10 +49,6 @@ class elFinderSession implements elFinderSessionInterface
}
$this->started = session_id()? true : false;
if ($this->started && is_null($this->prevVal)) {
$this->prevVal = $_SESSION;
}
return $this;
}
@ -63,9 +57,8 @@ class elFinderSession implements elFinderSessionInterface
*/
public function close()
{
if ($this->started && $this->prevVal !== $_SESSION) {
if ($this->started) {
session_write_close();
$this->prevVal = $_SESSION;
}
$this->started = false;

View File

@ -796,9 +796,6 @@ class elFinderVolumeBox extends elFinderVolumeDriver
}
}
if (!$this->tmp && is_writable($this->options['tmbPath'])) {
$this->tmp = $this->options['tmbPath'];
}
if (!$this->tmp && ($tmp = elFinder::getStaticVar('commonTempPath'))) {
$this->tmp = $tmp;
}
@ -821,6 +818,11 @@ class elFinderVolumeBox extends elFinderVolumeDriver
{
parent::configure();
// fallback of $this->tmp
if (!$this->tmp && $this->tmbPathWritable) {
$this->tmp = $this->tmbPath;
}
$this->disabled[] = 'archive';
$this->disabled[] = 'extract';
}
@ -1082,7 +1084,7 @@ class elFinderVolumeBox extends elFinderVolumeDriver
protected function getSharedWebContentLink($raw)
{
$fExtension = pathinfo($raw->name, PATHINFO_EXTENSION);
$fType = explode('/', self::mimetypeInternalDetect($raw->name))[0];
list($fType) = explode('/', self::mimetypeInternalDetect($raw->name));
if ($raw->shared_link->url && ($fType == 'image' || $fType == 'video' || $fType == 'audio')) {
if ($fExtension == 'jpg' && $fType == 'image') {
@ -1121,6 +1123,13 @@ class elFinderVolumeBox extends elFinderVolumeDriver
**/
public function getContentUrl($hash, $options = array())
{
if (!empty($options['temporary'])) {
// try make temporary file
$url = parent::getContentUrl($hash, $options);
if ($url) {
return $url;
}
}
if (($file = $this->file($hash)) == false || !$file['url'] || $file['url'] == 1) {
$path = $this->decode($hash);

View File

@ -79,6 +79,24 @@ abstract class elFinderVolumeDriver {
**/
protected $URL = '';
/**
* A file save destination path when a temporary content URL is required
* on a network volume or the like
* If not specified, it tries to use "Connector Path/../files/.tmb".
*
* @var string
*/
protected $tmpLinkPath = '';
/**
* A file save destination URL when a temporary content URL is required
* on a network volume or the like
* If not specified, it tries to use "Connector URL/../files/.tmb".
*
* @var string
*/
protected $tmpLinkUrl = '';
/**
* Thumbnails dir path
*
@ -187,6 +205,9 @@ abstract class elFinderVolumeDriver {
* @var array
**/
protected $options = array(
// Driver ID (Prefix of volume ID), Normally, the value specified for each volume driver is used.
'driverId' => '',
// Id (Suffix of volume ID), Normally, the number incremented according to the specified number of volumes is used.
'id' => '',
// revision id of root directory that uses for caching control of root stat
'rootRev' => '',
@ -196,6 +217,8 @@ abstract class elFinderVolumeDriver {
'path' => '',
// Folder hash value on elFinder to be the parent of this volume
'phash' => '',
// Folder hash value on elFinder to trash bin of this volume, it require 'copyJoin' to true
'trashHash' => '',
// open this path on initial request instead of root path
'startPath' => '',
// how many subdirs levels return per request
@ -203,9 +226,11 @@ abstract class elFinderVolumeDriver {
// root url, not set to disable sending URL to client (replacement for old "fileURL" option)
'URL' => '',
// directory link url to own manager url with folder hash (`true`, `false` or default `'auto'`: URL is empty then `true` else `false`)
'dirUrlOwn' => 'auto',
'dirUrlOwn' => 'auto',
// directory separator. required by client to show paths correctly
'separator' => DIRECTORY_SEPARATOR,
// Use '/' as directory separator when the path hash encode/decode on the Windows server too
'winHashFix' => false,
// Server character encoding (default is '': UTF-8)
'encoding' => '',
// for convert character encoding (default is '': Not change locale)
@ -259,10 +284,14 @@ abstract class elFinderVolumeDriver {
// An option to add MimeMap to the `mimeMap` option
// Array '[ext]:[detected mime type]' => '[normalized mime]'
'additionalMimeMap' => array(),
// MIME regex of send HTTP header "Content-Disposition: inline"
// MIME regex of send HTTP header "Content-Disposition: inline" or allow preview in quicklook
// '.' is allow inline of all of MIME types
// '$^' is not allow inline of all of MIME types
'dispInlineRegex' => '^(?:(?:image|text)|application/x-shockwave-flash$)',
'dispInlineRegex' => '^(?:(?:image|video|audio)|(?:text/plain|application/pdf)$)',
// temporary content URL's base path
'tmpLinkPath' => '',
// temporary content URL's base URL
'tmpLinkUrl' => '',
// directory for thumbnails
'tmbPath' => '.tmb',
// mode to create thumbnails dir
@ -307,6 +336,8 @@ abstract class elFinderVolumeDriver {
'uploadMaxSize' => 0,
// maximum number of chunked upload connection. `-1` to disable chunked upload
'uploadMaxConn' => 3,
// maximum get file size. NOTE - Maximum value is 50% of PHP memory_limit
'getMaxSize' => 0,
// files dates format
'dateFormat' => 'j M Y H:i',
// files time format
@ -328,8 +359,10 @@ abstract class elFinderVolumeDriver {
// allow exec chmod of read-only files
'allowChmodReadOnly' => false,
// regexp or function name to validate new file name
'acceptedName' => '/^[^\.].*/', //<-- DONT touch this! Use constructor options to overwrite it!
// function/class method to control files permissions
'acceptedName' => '/^[^\.].*/', // Notice: overwritten it in some volume drivers contractor
// regexp or function name to validate new directory name
'acceptedDirname' => '', // used `acceptedName` if empty value
// function/class method to control files permissions
'accessControl' => null,
// some data required by access control
'accessControlData' => null,
@ -370,6 +403,7 @@ abstract class elFinderVolumeDriver {
// `0` to disable auto sync
'syncMinMs' => null,
// required to fix bug on macos
// However, we recommend to use the Normalizer plugin instead this option
'utf8fix' => false,
// й ё Й Ё Ø Å
'utf8patterns' => array("\u0438\u0306", "\u0435\u0308", "\u0418\u0306", "\u0415\u0308", "\u00d8A", "\u030a"),
@ -431,6 +465,21 @@ abstract class elFinderVolumeDriver {
**/
protected $uploadMaxSize = 0;
/**
* Run time setting of overwrite items on upload
*
* @var string
*/
protected $uploadOverwrite = true;
/**
* Maximum allowed get file size.
* Set as number or string with unit - "10M", "500K", "1G"
*
* @var int|string
**/
protected $getMaxSize = -1;
/**
* Mimetype detect method
*
@ -595,6 +644,13 @@ abstract class elFinderVolumeDriver {
**/
protected $separator = DIRECTORY_SEPARATOR;
/**
* Directory separator for decode/encode hash
*
* @var string
**/
protected $separatorForHash = '';
/**
* System Root path (Unix like: '/', Windows: '\', 'C:\' or 'D:\'...)
*
@ -694,6 +750,20 @@ abstract class elFinderVolumeDriver {
*/
protected $disabledGetUrl = false;
/**
* Accepted filename validator
*
* @var string | callable
*/
protected $nameValidator;
/**
* Accepted dirname validator
*
* @var string | callable
*/
protected $dirnameValidator;
/*********************************************************************/
/* INITIALIZATION */
/*********************************************************************/
@ -816,6 +886,9 @@ abstract class elFinderVolumeDriver {
if (in_array('url', $this->disabled)) {
$this->disabledGetUrl = true;
}
// set run time setting uploadOverwrite
$this->uploadOverwrite = $this->options['uploadOverwrite'];
}
/**
@ -993,9 +1066,17 @@ abstract class elFinderVolumeDriver {
return $this->setError('Session wrapper instance must be "elFinderSessionInterface".');
}
// set driverId
if (!empty($this->options['driverId'])) {
$this->driverId = $this->options['driverId'];
}
$this->id = $this->driverId.(!empty($this->options['id']) ? $this->options['id'] : elFinder::$volumesCnt++).'_';
$this->root = $this->normpathCE($this->options['path']);
$this->separator = isset($this->options['separator']) ? $this->options['separator'] : DIRECTORY_SEPARATOR;
if (! empty($this->options['winHashFix'])) {
$this->separatorForHash = ($this->separator !== '/') ? '/' : '';
}
$this->systemRoot = isset($this->options['systemRoot']) ? $this->options['systemRoot'] : $this->separator;
// set server encoding
@ -1073,20 +1154,7 @@ abstract class elFinderVolumeDriver {
}
if (!empty($this->options['uploadMaxSize'])) {
$size = ''.$this->options['uploadMaxSize'];
$unit = strtolower(substr($size, strlen($size) - 1));
$n = 1;
switch ($unit) {
case 'k':
$n = 1024;
break;
case 'm':
$n = 1048576;
break;
case 'g':
$n = 1073741824;
}
$this->uploadMaxSize = intval($size)*$n;
$this->uploadMaxSize = elFinder::getIniBytes('', $this->options['uploadMaxSize']);
}
// Set maximum to PHP_INT_MAX
if (!defined('PHP_INT_MAX')) {
@ -1096,6 +1164,14 @@ abstract class elFinderVolumeDriver {
$this->uploadMaxSize = PHP_INT_MAX;
}
// Set to get maximum size to 50% of memory_limit
$memLimit = elFinder::getIniBytes('memory_limit') / 2;
if ($memLimit > 0) {
$this->getMaxSize = empty($this->options['getMaxSize'])? $memLimit : min($memLimit, elFinder::getIniBytes('', $this->options['getMaxSize']));
} else {
$this->getMaxSize = -1;
}
$this->disabled = isset($this->options['disabled']) && is_array($this->options['disabled'])
? array_values(array_diff($this->options['disabled'], array('open'))) // 'open' is required
: array();
@ -1223,6 +1299,10 @@ abstract class elFinderVolumeDriver {
$this->nameValidator = !empty($this->options['acceptedName']) && (is_string($this->options['acceptedName']) || is_callable($this->options['acceptedName']))
? $this->options['acceptedName']
: '';
$this->dirnameValidator = !empty($this->options['acceptedDirname']) && (is_callable($this->options['acceptedDirname']) || (is_string($this->options['acceptedDirname']) && preg_match($this->options['acceptedDirname'], '') !== false))
? $this->options['acceptedDirname']
: $this->nameValidator;
$this->_checkArchivers();
// manual control archive types to create
@ -1281,7 +1361,62 @@ abstract class elFinderVolumeDriver {
if ($this->options['syncMinMs'] !== 0) {
$this->options['syncMinMs'] = max($this->options[$this->options['syncChkAsTs']? 'tsPlSleep' : 'lsPlSleep'] * 1000, intval($this->options['syncMinMs']));
}
// ` copyJoin` is required for the trash function
if ($this->options['trashHash'] && empty($this->options['copyJoin'])) {
$this->options['trashHash'] = '';
}
// set tmpLinkPath
if (elFinder::$tmpLinkPath && !$this->options['tmpLinkPath']) {
$this->options['tmpLinkPath'] = elFinder::$tmpLinkPath;
}
if ($this->options['tmpLinkPath'] && is_writable($this->options['tmpLinkPath'])) {
$this->tmpLinkPath = realpath($this->options['tmpLinkPath']);
} else if (!$this->options['URL'] && is_writable('../files/.tmb')) {
$this->tmpLinkPath = realpath('../files/.tmb');
$this->options['tmpLinkUrl'] = '';
if (! elFinder::$tmpLinkPath) {
elFinder::$tmpLinkPath = $this->tmpLinkPath;
elFinder::$tmpLinkUrl = '';
}
}
// set tmpLinkUrl
if (elFinder::$tmpLinkUrl && !$this->options['tmpLinkUrl']) {
$this->options['tmpLinkUrl'] = elFinder::$tmpLinkUrl;
}
if ($this->options['tmpLinkUrl']) {
$this->tmpLinkUrl = $this->options['tmpLinkUrl'];
}
if ($this->tmpLinkPath && !$this->tmpLinkUrl) {
$cur = realpath('./');
$i = 0;
while($cur !== $this->systemRoot && strpos($this->tmpLinkPath, $cur) !== 0) {
$i++;
$cur = dirname($cur);
}
list($req) = explode('?', $_SERVER['REQUEST_URI']);
$reqs = explode('/', dirname($req));
$uri = join('/', array_slice($reqs, 0, count($reqs) - 1)).substr($this->tmpLinkPath, strlen($cur));
$https = (isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off');
$this->tmpLinkUrl = ($https ? 'https://' : 'http://')
.$_SERVER['SERVER_NAME'] // host
.(((! $https && $_SERVER['SERVER_PORT'] == 80) || ($https && $_SERVER['SERVER_PORT'] == 443)) ? '' : (':' . $_SERVER['SERVER_PORT'])) // port
.$uri;
if (! elFinder::$tmpLinkUrl) {
elFinder::$tmpLinkUrl = $this->tmpLinkUrl;
}
}
// remove last '/'
if ($this->tmpLinkPath) {
$this->tmpLinkPath = rtrim($this->tmpLinkPath, '/');
}
if ($this->tmpLinkUrl) {
$this->tmpLinkUrl = rtrim($this->tmpLinkUrl, '/');
}
// to update options cache
$this->updateCache($this->root, $root);
@ -1471,6 +1606,9 @@ abstract class elFinderVolumeDriver {
'i18nFolderName' => intval($this->options['i18nFolderName']),
'tmbCrop' => intval($this->options['tmbCrop'])
);
if (! empty($this->options['trashHash'])) {
$opts['trashHash'] = $this->options['trashHash'];
}
if ($hash === null) {
// call from getRootStatExtra()
if (! empty($this->options['icon'])) {
@ -1791,6 +1929,7 @@ abstract class elFinderVolumeDriver {
*
* @param string $hash directory hash
* @param bool|null $lineal only lineal parents
* @param string $until hash that is enough to that extent >= 2.1.24
* @return array
* @author Dmitry (dio) Levashov
**/
@ -1798,11 +1937,19 @@ abstract class elFinderVolumeDriver {
if (($current = $this->dir($hash)) == false) {
return false;
}
$args = func_get_args();
// checks 3rd param `$until` (elFinder >= 2.1.24)
$until = '';
if (isset($args[2])) {
$until = $args[2];
}
$path = $this->decode($hash);
$tree = array();
while ($path && $path != $this->root) {
elFinder::extendTimeLimit();
$path = $this->dirnameCE($path);
if (!($stat = $this->stat($path)) || !empty($stat['hidden']) || !$stat['read']) {
return false;
@ -1811,14 +1958,19 @@ abstract class elFinderVolumeDriver {
array_unshift($tree, $stat);
if (!$lineal) {
foreach ($this->gettree($path, 0) as $dir) {
if (!in_array($dir, $tree)) {
$tree[] = $dir;
elFinder::extendTimeLimit();
if (!isset($tree[$dir['hash']])) {
$tree[$dir['hash']] = $dir;
}
}
}
if ($until && $until === $this->encode($path)) {
break;
}
}
return $tree ? $tree : array($current);
return $tree ? array_values($tree) : array($current);
}
/**
@ -1901,8 +2053,8 @@ abstract class elFinderVolumeDriver {
return $this->setError(elFinder::ERROR_PERM_DENIED);
}
if (!$this->nameAccepted($name)) {
return $this->setError(elFinder::ERROR_INVALID_NAME);
if (!$this->nameAccepted($name, true)) {
return $this->setError(elFinder::ERROR_INVALID_DIRNAME);
}
if (($dir = $this->dir($dsthash)) == false) {
@ -1944,7 +2096,7 @@ abstract class elFinderVolumeDriver {
return $this->setError(elFinder::ERROR_PERM_DENIED);
}
if (!$this->nameAccepted($name)) {
if (!$this->nameAccepted($name, false)) {
return $this->setError(elFinder::ERROR_INVALID_NAME);
}
@ -1984,10 +2136,6 @@ abstract class elFinderVolumeDriver {
return $this->setError(elFinder::ERROR_PERM_DENIED);
}
if (!$this->nameAccepted($name)) {
return $this->setError(elFinder::ERROR_INVALID_NAME, $name);
}
if (!($file = $this->file($hash))) {
return $this->setError(elFinder::ERROR_FILE_NOT_FOUND);
}
@ -2000,7 +2148,13 @@ abstract class elFinderVolumeDriver {
return $this->setError(elFinder::ERROR_LOCKED, $file['name']);
}
if ($file['mime'] !== 'directory') {
$isDir = ($file['mime'] === 'directory');
if (!$this->nameAccepted($name, $isDir)) {
return $this->setError(elFinder::ERROR_INVALID_DIRNAME);
}
if (! $isDir) {
$mimeByName = $this->mimetype($name, true);
if ($mimeByName && !$this->allowPutMime($mimeByName)) {
return $this->setError(elFinder::ERROR_UPLOAD_FILE_MIME, $name);
@ -2080,11 +2234,11 @@ abstract class elFinderVolumeDriver {
return $this->setError(elFinder::ERROR_TRGDIR_NOT_FOUND, '#'.$dst);
}
if (!$dir['write']) {
if (empty($dir['write'])) {
return $this->setError(elFinder::ERROR_PERM_DENIED);
}
if (!$this->nameAccepted($name)) {
if (!$this->nameAccepted($name, false)) {
return $this->setError(elFinder::ERROR_INVALID_NAME);
}
@ -2120,9 +2274,7 @@ abstract class elFinderVolumeDriver {
$this->clearcache();
if ($file && $file['name'] === $name) { // file exists and check filename for item ID based filesystem
// check POST data `overwrite` for 3rd party uploader
$overwrite = isset($_POST['overwrite'])? (bool)$_POST['overwrite'] : $this->options['uploadOverwrite'];
if ($overwrite) {
if ($this->uploadOverwrite) {
if (!$file['write']) {
return $this->setError(elFinder::ERROR_PERM_DENIED);
} elseif ($file['mime'] == 'directory') {
@ -2220,10 +2372,16 @@ abstract class elFinderVolumeDriver {
if (!$stat['write']) {
return $this->setError($err, $errpath, elFinder::ERROR_PERM_DENIED);
}
// existed file locked or has locked child
if (($locked = $this->closestByAttr($test, 'locked', true))) {
$stat = $this->stat($locked);
return $this->setError(elFinder::ERROR_LOCKED, $this->path($stat['hash']));
if ($this->options['copyJoin']) {
if ($stat['locked']) {
return $this->setError(elFinder::ERROR_LOCKED, $this->path($stat['hash']));
}
} else {
// existed file locked or has locked child
if (($locked = $this->closestByAttr($test, 'locked', true))) {
$stat = $this->stat($locked);
return $this->setError(elFinder::ERROR_LOCKED, $this->path($stat['hash']));
}
}
// target is entity file of alias
if ($volume === $this && ((isset($file['target']) && $test == $file['target']) || $test == $this->decode($src))) {
@ -2385,6 +2543,10 @@ abstract class elFinderVolumeDriver {
return $this->setError(elFinder::ERROR_PERM_DENIED);
}
if ($this->getMaxSize > 0 && $file['size'] > $this->getMaxSize) {
return $this->setError(elFinder::ERROR_UPLOAD_FILE_SIZE);
}
return $this->_getContents($this->convEncIn($this->decode($hash), true));
}
@ -2411,6 +2573,15 @@ abstract class elFinderVolumeDriver {
return $this->setError(elFinder::ERROR_PERM_DENIED);
}
// check data cheme
if (preg_match('~^\0data:(.+?/.+?);base64,~', $content, $m)) {
$dMime =$m[1];
if ($file['size'] > 0 && $dMime !== $file['mime']) {
return $this->setError(elFinder::ERROR_PERM_DENIED);
}
$content = base64_decode(substr($content, strlen($m[0])));
}
// check MIME
$name = $this->basenameCE($path);
$mime = '';
@ -2494,7 +2665,7 @@ abstract class elFinderVolumeDriver {
return $this->setError(elFinder::ERROR_PERM_DENIED);
}
if ($name !== '' && !$this->nameAccepted($name)) {
if ($name !== '' && !$this->nameAccepted($name, false)) {
return $this->setError(elFinder::ERROR_INVALID_NAME);
}
@ -2755,20 +2926,38 @@ abstract class elFinderVolumeDriver {
* @author Naoki Sawada
*/
public function getContentUrl($hash, $options = array()) {
if (($file = $this->file($hash)) == false || (isset($file['url']) && $file['url'] == 1)) {
if (($file = $this->file($hash)) === false) {
return false;
}
if (empty($file['url'])) {
if ($this->URL) {
$path = str_replace($this->separator, '/', substr($this->decode($hash), strlen($this->root) + 1));
if ($this->encoding) {
$path = str_replace('%2F', '/', rawurlencode($this->convEncIn($path, true)));
$path = $this->convEncIn($path, true);
}
$path = str_replace('%2F', '/', rawurlencode($path));
return $this->URL . $path;
}
return false;
} else {
return $file['url'];
if ($file['url'] != 1) {
return $file['url'];
} else if (!empty($options['temporary']) && $this->tmpLinkPath) {
$name = 'temp_' . md5($hash);
$path = $this->tmpLinkPath . DIRECTORY_SEPARATOR . $name;
$contents = $this->getContents($hash);
$gc = create_function('$p,$t', 'foreach(glob($p) as $f) { (filemtime($f) < (time() - $t)) && unlink($f); }');
/*$gc = function($p,$t) {
foreach(glob($p) as $f) {
(filemtime($f) < (time() - $t)) && unlink($f);
}
};*/
register_shutdown_function($gc, $this->tmpLinkPath . DIRECTORY_SEPARATOR . 'temp_*', elFinder::$tmpLinkLifeTime);
if (file_put_contents($path, $this->getContents($hash))) {
return $this->tmpLinkUrl . '/' . $name;
}
}
return false;
}
}
@ -2786,7 +2975,7 @@ abstract class elFinderVolumeDriver {
$tempPath = $this->tmp;
} else if (function_exists('sys_get_temp_dir')) {
$tempPath = sys_get_temp_dir();
} else if (isset($this->tmbPath) && $this->tmbPath && is_writable($this->tmbPath)) {
} else if ($this->tmbPathWritable) {
$tempPath = $this->tmbPath;
}
if ($tempPath && DIRECTORY_SEPARATOR !== '/') {
@ -2842,6 +3031,10 @@ abstract class elFinderVolumeDriver {
return $this->uploadMaxSize;
}
public function setUploadOverwrite($var) {
$this->uploadOverwrite = (bool)$var;
}
/**
* Image file utility
*
@ -2861,6 +3054,14 @@ abstract class elFinderVolumeDriver {
if (! isset($options['bgColorFb'])) {
$options['bgColorFb'] = $this->options['bgColorFb'];
}
// check 'width' ,'height'
if (in_array($mode, array('resize', 'propresize', 'crop', 'fitsquare'))) {
if (empty($options['width']) || empty($options['height'])) {
return false;
}
}
switch($mode) {
case 'rotate':
if (empty($options['degree'])) {
@ -2868,14 +3069,6 @@ abstract class elFinderVolumeDriver {
}
return (bool)$this->imgRotate($src, $options['degree'], $options['bgColorFb'], null, $options['jpgQuality']);
case 'resize':
case 'propresize':
case 'crop':
case 'fitsquare':
if (empty($options['width']) || empty($options['height'])) {
return false;
}
case 'resize':
return (bool)$this->imgResize($src, $options['width'], $options['height'], false, true, null, $options['jpgQuality'], $options);
@ -2886,6 +3079,7 @@ abstract class elFinderVolumeDriver {
if (isset($options['x']) && isset($options['y'])) {
return (bool)$this->imgCrop($src, $options['width'], $options['height'], $options['x'], $options['y'], null, $options['jpgQuality']);
}
break;
case 'fitsquare':
return (bool)$this->imgSquareFit($src, $options['width'], $options['height'], 'center', 'middle', $options['bgcolor'], null, $options['jpgQuality']);
@ -3142,7 +3336,10 @@ abstract class elFinderVolumeDriver {
if ($p === '') {
$p = $this->separator;
}
// change separator
if ($this->separatorForHash) {
$p = str_replace($this->separator, $this->separatorForHash, $p);
}
// TODO crypt path and return hash
$hash = $this->crypt($p);
// hash is used as id in HTML that means it must contain vaild chars
@ -3171,7 +3368,11 @@ abstract class elFinderVolumeDriver {
// replace HTML safe base64 to normal
$h = base64_decode(strtr($h, '-_.', '+/='));
// TODO uncrypt hash and return path
$path = $this->uncrypt($h);
$path = $this->uncrypt($h);
// change separator
if ($this->separatorForHash) {
$path = str_replace($this->separatorForHash, $this->separator, $path);
}
// append ROOT to path after it was cut in encode
return $this->abspathCE($path);//$this->root.($path === $this->separator ? '' : $this->separator.$path);
}
@ -3209,17 +3410,18 @@ abstract class elFinderVolumeDriver {
* @return bool
* @author Dmitry (dio) Levashov
**/
protected function nameAccepted($name) {
protected function nameAccepted($name, $isDir = false) {
if (json_encode($name)===false) {
return false;
}
if ($this->nameValidator) {
if (is_callable($this->nameValidator)) {
$res = call_user_func($this->nameValidator, $name);
$nameValidator = $isDir? $this->dirnameValidator : $this->nameValidator;
if ($nameValidator) {
if (is_callable($nameValidator)) {
$res = call_user_func($nameValidator, $name);
return $res;
}
if (preg_match($this->nameValidator, '') !== false) {
return preg_match($this->nameValidator, $name);
if (preg_match($nameValidator, '') !== false) {
return preg_match($nameValidator, $name);
}
}
return true;
@ -3538,29 +3740,25 @@ abstract class elFinderVolumeDriver {
return false;
}
$relpath = $this->relpathCE($path);
if ($this->separator !== '/') {
$relpath = str_replace($this->separator, '/', $relpath);
}
$relpath = '/' . $relpath;
$perm = null;
if ($this->access) {
$perm = call_user_func($this->access, $name, $path, $this->options['accessControlData'], $this, $isDir);
$perm = call_user_func($this->access, $name, $path, $this->options['accessControlData'], $this, $isDir, $relpath);
if ($perm !== null) {
return !!$perm;
}
}
if ($this->separator != '/') {
$path = str_replace($this->separator, '/', $this->relpathCE($path));
} else {
$path = $this->relpathCE($path);
}
$path = '/'.$path;
for ($i = 0, $c = count($this->attributes); $i < $c; $i++) {
$attrs = $this->attributes[$i];
if (isset($attrs[$name]) && isset($attrs['pattern']) && preg_match($attrs['pattern'], $path)) {
if (isset($attrs[$name]) && isset($attrs['pattern']) && preg_match($attrs['pattern'], $relpath)) {
$perm = $attrs[$name];
}
}
@ -3578,27 +3776,7 @@ abstract class elFinderVolumeDriver {
* @author Dmitry (dio) Levashov
*/
protected function allowCreate($dir, $name, $isDir = null) {
$path = $this->joinPathCE($dir, $name);
$perm = null;
if ($this->access) {
$perm = call_user_func($this->access, 'write', $path, $this->options['accessControlData'], $this, $isDir);
if ($perm !== null) {
return !!$perm;
}
}
$testPath = $this->separator.$this->relpathCE($path);
for ($i = 0, $c = count($this->attributes); $i < $c; $i++) {
$attrs = $this->attributes[$i];
if (isset($attrs['write']) && isset($attrs['pattern']) && preg_match($attrs['pattern'], $testPath)) {
$perm = $attrs['write'];
}
}
return $perm === null ? true : $perm;
return $this->attr($this->joinPathCE($dir, $name), 'write', true, $isDir);
}
/**
@ -3918,18 +4096,22 @@ abstract class elFinderVolumeDriver {
}
$ext = (false === $pos = strrpos($name, '.')) ? '' : substr($name, $pos + 1);
if (! $nameCheck && is_readable($path)) {
if ($this->mimeDetect == 'finfo') {
if ($type = finfo_file($this->finfo, $path)) {
if ($ext && preg_match('~^application/(?:octet-stream|(?:x-)?zip)~', $type)) {
if (isset(elFinderVolumeDriver::$mimetypes[$ext])) $type = elFinderVolumeDriver::$mimetypes[$ext];
} else if ($ext === 'js' && preg_match('~^text/~', $type)) {
$type = 'text/javascript';
if (filesize($path) > 0) {
if ($this->mimeDetect == 'finfo') {
if ($type = finfo_file($this->finfo, $path)) {
if ($ext && preg_match('~^application/(?:octet-stream|(?:x-)?zip)~', $type)) {
if (isset(elFinderVolumeDriver::$mimetypes[$ext])) $type = elFinderVolumeDriver::$mimetypes[$ext];
} else if ($ext === 'js' && preg_match('~^text/~', $type)) {
$type = 'text/javascript';
}
} else {
$type = 'unknown';
}
} else {
$type = 'unknown';
} else if ($this->mimeDetect == 'mime_content_type') {
$type = mime_content_type($path);
}
} else if ($this->mimeDetect == 'mime_content_type') {
$type = mime_content_type($path);
} else {
$type = 'text/plain';
}
}
if (! $type) {
@ -4010,25 +4192,39 @@ abstract class elFinderVolumeDriver {
elFinder::extendTimeLimit();
$result = array('size' => 0, 'files' => 0, 'dirs' => 0);
$stat = $this->stat($path);
if (empty($stat) || !$stat['read'] || !empty($stat['hidden'])) {
return 'unknown';
$result['size'] = 'unknown';
return $result;
}
if ($stat['mime'] != 'directory') {
return $stat['size'];
$result['size'] = intval($stat['size']);
$result['files'] = 1;
return $result;
}
$subdirs = $this->options['checkSubfolders'];
$this->options['checkSubfolders'] = true;
$result = 0;
foreach ($this->getScandir($path) as $stat) {
$size = $stat['mime'] == 'directory' && $stat['read']
if ($isDir = ($stat['mime'] === 'directory' && $stat['read'])) {
++$result['dirs'];
} else {
++$result['files'];
}
$res = $isDir
? $this->countSize($this->decode($stat['hash']))
: (isset($stat['size']) ? intval($stat['size']) : 0);
if ($size > 0) {
$result += $size;
: (isset($stat['size']) ? array('size' => intval($stat['size'])) : array());
if (! empty($res['size']) && is_numeric($res['size'])) {
$result['size'] += $res['size'];
}
if (! empty($res['files']) && is_numeric($res['files'])) {
$result['files'] += $res['files'];
}
if (! empty($res['dirs']) && is_numeric($res['dirs'])) {
$result['dirs'] += $res['dirs'];
}
}
$this->options['checkSubfolders'] = $subdirs;
@ -4386,17 +4582,19 @@ abstract class elFinderVolumeDriver {
return $this->setError(elFinder::ERROR_COPY, '#'.$src, $volume->error());
}
$srcIsDir = ($source['mime'] === 'directory');
$errpath = $volume->path($source['hash']);
if (!$this->nameAccepted($source['name'])) {
return $this->setError(elFinder::ERROR_COPY, $errpath, elFinder::ERROR_INVALID_NAME);
if (!$this->nameAccepted($source['name'], $srcIsDir)) {
return $this->setError(elFinder::ERROR_COPY, $errpath, $srcIsDir? elFinder::ERROR_INVALID_DIRNAME : elFinder::ERROR_INVALID_NAME);
}
if (!$source['read']) {
return $this->setError(elFinder::ERROR_COPY, $errpath, elFinder::ERROR_PERM_DENIED);
}
if ($source['mime'] == 'directory') {
if ($srcIsDir) {
$test = $this->isNameExists($this->joinPathCE($destination, $name));
$this->clearcache();
@ -4416,9 +4614,16 @@ abstract class elFinderVolumeDriver {
$this->added[] = $test;
} else {
// $mime = $source['mime'];
// $w = $h = 0;
if (($dim = $volume->dimensions($src))) {
// MIME check
$mimeByName = $this->mimetype($source['name'], true);
if ($source['mime'] === $mimeByName) {
$mimeByName = '';
}
if (!$this->allowPutMime($source['mime']) || ($mimeByName && !$this->allowPutMime($mimeByName))) {
return $this->setError(elFinder::ERROR_UPLOAD_FILE_MIME, $errpath);
}
if (strpos($source['mime'], 'image') === 0 && ($dim = $volume->dimensions($src))) {
$s = explode('x', $dim);
$source['width'] = $s[0];
$source['height'] = $s[1];
@ -4430,19 +4635,8 @@ abstract class elFinderVolumeDriver {
return $this->setError(elFinder::ERROR_COPY, $errpath);
}
$volume->close($fp, $src);
// MIME check
$stat = $this->stat($path);
$mimeByName = $this->mimetype($stat['name'], true);
if ($stat['mime'] === $mimeByName) {
$mimeByName = '';
}
if (!$this->allowPutMime($stat['mime']) || ($mimeByName && !$this->allowPutMime($mimeByName))) {
$this->remove($path, true);
return $this->setError(elFinder::ERROR_UPLOAD_FILE_MIME, $errpath);
}
$this->added[] = $stat;
$this->added[] = $this->stat($path);;
}
return $path;
@ -5600,24 +5794,24 @@ abstract class elFinderVolumeDriver {
if ($ctar == 0) {
$arcs['create']['application/x-tar'] = array('cmd' => 'tar', 'argc' => '-cf', 'ext' => 'tar');
$arcs['extract']['application/x-tar'] = array('cmd' => 'tar', 'argc' => '-xf', 'ext' => 'tar');
$arcs['extract']['application/x-tar'] = array('cmd' => 'tar', 'argc' => '-xf', 'ext' => 'tar', 'toSpec' => '-C ');
unset($o);
$test = $this->procExec('gzip --version', $o, $c);
$this->procExec('gzip --version', $o, $c);
if ($c == 0) {
$arcs['create']['application/x-gzip'] = array('cmd' => 'tar', 'argc' => '-czf', 'ext' => 'tgz');
$arcs['extract']['application/x-gzip'] = array('cmd' => 'tar', 'argc' => '-xzf', 'ext' => 'tgz');
$arcs['extract']['application/x-gzip'] = array('cmd' => 'tar', 'argc' => '-xzf', 'ext' => 'tgz', 'toSpec' => '-C ');
}
unset($o);
$test = $this->procExec('bzip2 --version', $o, $c);
$this->procExec('bzip2 --version', $o, $c);
if ($c == 0) {
$arcs['create']['application/x-bzip2'] = array('cmd' => 'tar', 'argc' => '-cjf', 'ext' => 'tbz');
$arcs['extract']['application/x-bzip2'] = array('cmd' => 'tar', 'argc' => '-xjf', 'ext' => 'tbz');
$arcs['extract']['application/x-bzip2'] = array('cmd' => 'tar', 'argc' => '-xjf', 'ext' => 'tbz', 'toSpec' => '-C ');
}
unset($o);
$test = $this->procExec('xz --version', $o, $c);
$this->procExec('xz --version', $o, $c);
if ($c == 0) {
$arcs['create']['application/x-xz'] = array('cmd' => 'tar', 'argc' => '-cJf', 'ext' => 'xz');
$arcs['extract']['application/x-xz'] = array('cmd' => 'tar', 'argc' => '-xJf', 'ext' => 'xz');
$arcs['extract']['application/x-xz'] = array('cmd' => 'tar', 'argc' => '-xJf', 'ext' => 'xz', 'toSpec' => '-C ');
}
}
unset($o);
@ -5628,37 +5822,35 @@ abstract class elFinderVolumeDriver {
unset($o);
$this->procExec('unzip --help', $o, $c);
if ($c == 0) {
$arcs['extract']['application/zip'] = array('cmd' => 'unzip', 'argc' => '', 'ext' => 'zip');
$arcs['extract']['application/zip'] = array('cmd' => 'unzip', 'argc' => '', 'ext' => 'zip', 'toSpec' => '-d ');
}
unset($o);
$this->procExec('rar --version', $o, $c);
if ($c == 0 || $c == 7) {
$arcs['create']['application/x-rar'] = array('cmd' => 'rar', 'argc' => 'a -inul', 'ext' => 'rar');
$arcs['extract']['application/x-rar'] = array('cmd' => 'rar', 'argc' => 'x -y', 'ext' => 'rar');
} else {
unset($o);
$test = $this->procExec('unrar', $o, $c);
if ($c==0 || $c == 7) {
$arcs['extract']['application/x-rar'] = array('cmd' => 'unrar', 'argc' => 'x -y', 'ext' => 'rar');
}
}
unset($o);
$this->procExec('unrar', $o, $c);
if ($c==0 || $c == 7) {
$arcs['extract']['application/x-rar'] = array('cmd' => 'unrar', 'argc' => 'x -y', 'ext' => 'rar', 'toSpec' => '');
}
unset($o);
$this->procExec('7za --help', $o, $c);
if ($c == 0) {
$arcs['create']['application/x-7z-compressed'] = array('cmd' => '7za', 'argc' => 'a', 'ext' => '7z');
$arcs['extract']['application/x-7z-compressed'] = array('cmd' => '7za', 'argc' => 'x -y', 'ext' => '7z');
$arcs['extract']['application/x-7z-compressed'] = array('cmd' => '7za', 'argc' => 'x -y', 'ext' => '7z', 'toSpec' => '-o');
if (empty($arcs['create']['application/zip'])) {
$arcs['create']['application/zip'] = array('cmd' => '7za', 'argc' => 'a -tzip', 'ext' => 'zip');
}
if (empty($arcs['extract']['application/zip'])) {
$arcs['extract']['application/zip'] = array('cmd' => '7za', 'argc' => 'x -tzip -y', 'ext' => 'zip');
$arcs['extract']['application/zip'] = array('cmd' => '7za', 'argc' => 'x -tzip -y', 'ext' => 'zip', 'toSpec' => '-o');
}
if (empty($arcs['create']['application/x-tar'])) {
$arcs['create']['application/x-tar'] = array('cmd' => '7za', 'argc' => 'a -ttar', 'ext' => 'tar');
}
if (empty($arcs['extract']['application/x-tar'])) {
$arcs['extract']['application/x-tar'] = array('cmd' => '7za', 'argc' => 'x -ttar -y', 'ext' => 'tar');
$arcs['extract']['application/x-tar'] = array('cmd' => '7za', 'argc' => 'x -ttar -y', 'ext' => 'tar', 'toSpec' => '-o');
}
} else if (substr(PHP_OS,0,3) === 'WIN') {
// check `7z` for Windows server.
@ -5666,19 +5858,22 @@ abstract class elFinderVolumeDriver {
$this->procExec('7z', $o, $c);
if ($c == 0) {
$arcs['create']['application/x-7z-compressed'] = array('cmd' => '7z', 'argc' => 'a', 'ext' => '7z');
$arcs['extract']['application/x-7z-compressed'] = array('cmd' => '7z', 'argc' => 'x -y', 'ext' => '7z');
$arcs['extract']['application/x-7z-compressed'] = array('cmd' => '7z', 'argc' => 'x -y', 'ext' => '7z', 'toSpec' => '-o');
if (empty($arcs['create']['application/zip'])) {
$arcs['create']['application/zip'] = array('cmd' => '7z', 'argc' => 'a -tzip', 'ext' => 'zip');
}
if (empty($arcs['extract']['application/zip'])) {
$arcs['extract']['application/zip'] = array('cmd' => '7z', 'argc' => 'x -tzip -y', 'ext' => 'zip');
$arcs['extract']['application/zip'] = array('cmd' => '7z', 'argc' => 'x -tzip -y', 'ext' => 'zip', 'toSpec' => '-o');
}
if (empty($arcs['create']['application/x-tar'])) {
$arcs['create']['application/x-tar'] = array('cmd' => '7z', 'argc' => 'a -ttar', 'ext' => 'tar');
}
if (empty($arcs['extract']['application/x-tar'])) {
$arcs['extract']['application/x-tar'] = array('cmd' => '7z', 'argc' => 'x -ttar -y', 'ext' => 'tar');
$arcs['extract']['application/x-tar'] = array('cmd' => '7z', 'argc' => 'x -ttar -y', 'ext' => 'tar', 'toSpec' => '-o');
}
if (empty($arcs['extract']['application/x-rar'])) {
$arcs['extract']['application/x-rar'] = array('cmd' => '7z', 'argc' => 'x -trar -y', 'ext' => 'rar', 'toSpec' => '-o');
}
}
}
@ -5798,26 +5993,40 @@ abstract class elFinderVolumeDriver {
/**
* Unpack archive
*
* @param string $path archive path
* @param array $arc archiver command and arguments (same as in $this->archivers)
* @param bool $remove remove archive ( unlink($path) )
* @param string $path archive path
* @param array $arc archiver command and arguments (same as in $this->archivers)
* @param bool|string $mode bool: remove archive ( unlink($path) ) | string: extract to directory
* @return void
* @author Dmitry (dio) Levashov
* @author Alexey Sukhotin
* @author Naoki Sawada
**/
protected function unpackArchive($path, $arc, $remove = true) {
$dir = dirname($path);
protected function unpackArchive($path, $arc, $mode = true) {
if (is_string($mode)) {
$dir = $mode;
$chdir = null;
$remove = false;
} else {
$dir = dirname($path);
$chdir = $dir;
$remove = $mode;
}
$dir = realpath($dir);
$path = realpath($path);
if ($arc['cmd'] === 'phpfunction') {
if (is_callable($arc['argc'])) {
call_user_func_array($arc['argc'], array($path, $dir));
}
} else {
$cwd = getcwd();
if (chdir($dir)) {
$cmd = $arc['cmd'].' '.$arc['argc'].' '.escapeshellarg(basename($path));
if (!$chdir || chdir($dir)) {
if ($chdir) {
$cmd = $arc['cmd'].' '.$arc['argc'].' '.escapeshellarg(basename($path));
} else {
$cmd = $arc['cmd'].' '.$arc['argc'].' '.escapeshellarg($path).' '.$arc['toSpec'].escapeshellarg($dir);
}
$this->procExec($cmd, $o, $c);
chdir($cwd);
$chdir && chdir($cwd);
}
}
$remove && unlink($path);
@ -5859,7 +6068,7 @@ abstract class elFinderVolumeDriver {
continue;
}
$isDir = is_dir($p);
if ($chkName && ! $this->nameAccepted($name)) {
if ($chkName && ! $this->nameAccepted($name, $isDir)) {
self::localRmdirRecursive($p);
$res['names'][] = $p;
$res['rmNames'][] = $name;
@ -5896,7 +6105,7 @@ abstract class elFinderVolumeDriver {
unlink($path);
$res['symlinks'][] = $path;
$res['rmNames'][] = basename($path);
} else if ($chkName && ! $this->nameAccepted($name)) {
} else if ($chkName && ! $this->nameAccepted($name, false)) {
unlink($path);
$res['names'][] = $path;
$res['rmNames'][] = $name;

View File

@ -231,6 +231,40 @@ class elFinderVolumeDropbox2 extends elFinderVolumeDriver
return rtrim($dir, '/').'/'.$displayName;
}
/**
* Get OAuth2 access token form OAuth1 tokens.
*
* @param string $app_key
* @param string $app_secret
* @param string $oauth1_token
* @param string $oauth1_secret
*
* @return string|false
*/
public static function getTokenFromOauth1($app_key, $app_secret, $oauth1_token, $oauth1_secret)
{
$data = [
'oauth1_token' => $oauth1_token,
'oauth1_token_secret' => $oauth1_secret,
];
$auth = base64_encode($app_key.':'.$app_secret);
$ch = curl_init('https://api.dropboxapi.com/2/auth/token/from_oauth1');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Basic '.$auth,
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
$result = curl_exec($ch);
curl_close($ch);
$res = $result ? json_decode($result, true) : [];
return isset($res['oauth2_token']) ? $res['oauth2_token'] : false;
}
/*********************************************************************/
/* EXTENDED FUNCTIONS */
/*********************************************************************/
@ -501,9 +535,6 @@ class elFinderVolumeDropbox2 extends elFinderVolumeDriver
}
}
if (!$this->tmp && is_writable($this->options['tmbPath'])) {
$this->tmp = $this->options['tmbPath'];
}
if (!$this->tmp && ($tmp = elFinder::getStaticVar('commonTempPath'))) {
$this->tmp = $tmp;
}
@ -526,6 +557,11 @@ class elFinderVolumeDropbox2 extends elFinderVolumeDriver
{
parent::configure();
// fallback of $this->tmp
if (!$this->tmp && $this->tmbPathWritable) {
$this->tmp = $this->tmbPath;
}
$this->disabled[] = 'archive';
$this->disabled[] = 'extract';
@ -799,6 +835,13 @@ class elFinderVolumeDropbox2 extends elFinderVolumeDriver
*/
public function getContentUrl($hash, $options = [])
{
if (!empty($options['temporary'])) {
// try make temporary file
$url = parent::getContentUrl($hash, $options);
if ($url) {
return $url;
}
}
$file = $this->file($hash);
if (($file = $this->file($hash)) !== false && (!$file['url'] || $file['url'] == 1)) {
$path = $this->decode($hash);

View File

@ -48,6 +48,21 @@ class elFinderVolumeFTP extends elFinderVolumeDriver {
**/
protected $ftpOsUnix;
/**
* FTP LIST command option
*
* @var string
*/
protected $ftpListOption = '-al';
/**
* Is connected server Pure FTPd?
*
* @var bool
*/
protected $isPureFtpd = false;
/**
* Tmp folder path
*
@ -91,8 +106,8 @@ class elFinderVolumeFTP extends elFinderVolumeDriver {
'separator' => '/',
'dirMode' => 0755,
'fileMode' => 0644,
'rootCssClass' => 'elfinder-navbar-root-ftp'
'rootCssClass' => 'elfinder-navbar-root-ftp',
'ftpListOption' => '-al',
);
$this->options = array_merge($this->options, $opts);
$this->options['mimeDetect'] = 'internal';
@ -175,6 +190,10 @@ class elFinderVolumeFTP extends elFinderVolumeDriver {
$this->options['syncChkAsTs'] = true;
}
if(isset($this->options['ftpListOption'])) {
$this->ftpListOption = $this->options['ftpListOption'];
}
return $this->connect();
}
@ -198,7 +217,8 @@ class elFinderVolumeFTP extends elFinderVolumeDriver {
$this->tmp = $tmp;
}
if (!$this->tmp && $this->tmbPath) {
// fallback of $this->tmp
if (!$this->tmp && $this->tmbPathWritable) {
$this->tmp = $this->tmbPath;
}
@ -269,9 +289,32 @@ class elFinderVolumeFTP extends elFinderVolumeDriver {
}
}
$help = ftp_raw($this->connect, 'HELP');
$this->isPureFtpd = stripos(implode(' ', $help), 'Pure-FTPd') !== false;
return true;
}
/**
* Call ftp_rawlist with option prefix
*
* @param string $path
* @return array
*/
protected function ftpRawList($path) {
if ($this->isPureFtpd) {
$path = str_replace(' ', '\ ', $path);
}
if ($this->ftpListOption) {
$path = $this->ftpListOption . ' ' . $path;
}
$res = ftp_rawlist($this->connect, $path);
if ($res === false) {
$res = array();
}
return $res;
}
/*********************************************************************/
/* FS API */
/*********************************************************************/
@ -439,7 +482,7 @@ class elFinderVolumeFTP extends elFinderVolumeDriver {
$list = array();
$encPath = $this->convEncIn($path);
foreach (ftp_rawlist($this->connect, $encPath) as $raw) {
foreach ($this->ftpRawList($encPath) as $raw) {
if (($stat = $this->parseRaw($raw, $encPath))) {
$list[] = $stat;
}
@ -707,7 +750,7 @@ class elFinderVolumeFTP extends elFinderVolumeDriver {
);
if ($this->isMyReload()) {
$ts = 0;
foreach (ftp_rawlist($this->connect, $path) as $str) {
foreach ($this->ftpRawList($path) as $str) {
if (($stat = $this->parseRaw($str, $path))) {
$ts = max($ts, $stat['ts']);
}
@ -751,6 +794,7 @@ class elFinderVolumeFTP extends elFinderVolumeDriver {
array_pop($parts);
$parts = array_map('strtolower', $parts);
$stat = array();
$mode = '';
foreach ($parts as $part) {
list($key, $val) = explode('=', $part);
@ -770,7 +814,15 @@ class elFinderVolumeFTP extends elFinderVolumeDriver {
break;
case 'unix.mode':
$stat['chmod'] = $val;
$mode = strval($val);
break;
case 'unix.uid':
$stat['owner'] = $val;
break;
case 'unix.gid':
$stat['group'] = $val;
break;
case 'perm':
@ -790,15 +842,16 @@ class elFinderVolumeFTP extends elFinderVolumeDriver {
$stat['size'] = 0;
}
if (isset($stat['chmod'])) {
if ($mode) {
$stat['perm'] = '';
if ($stat['chmod'][0] == 0) {
$stat['chmod'] = substr($stat['chmod'], 1);
if ($mode[0] === '0') {
$mode = substr($mode, 1);
}
$perm = array();
for ($i = 0; $i <= 2; $i++) {
$perm[$i] = array(false, false, false);
$n = isset($stat['chmod'][$i]) ? $stat['chmod'][$i] : 0;
$n = isset($mode[$i]) ? $mode[$i] : 0;
if ($n - 4 >= 0) {
$perm[$i][0] = true;
@ -822,8 +875,6 @@ class elFinderVolumeFTP extends elFinderVolumeDriver {
} else {
$stat['perm'] .= '-';
}
$stat['perm'] .= ' ';
}
$stat['perm'] = trim($stat['perm']);
@ -833,8 +884,12 @@ class elFinderVolumeFTP extends elFinderVolumeDriver {
$stat['read'] = $stat['mime'] == 'directory' ? $read && (($owner && $perm[0][2]) || $perm[1][2] || $perm[2][2]) : $read;
$stat['write'] = ($owner && $perm[0][1]) || $perm[1][1] || $perm[2][1];
unset($stat['chmod']);
if ($this->options['statOwner']) {
$stat['isowner'] = $owner;
} else {
unset($stat['owner'], $stat['group'], $stat['perm']);
}
}
return $stat;
@ -853,7 +908,7 @@ class elFinderVolumeFTP extends elFinderVolumeDriver {
**/
protected function _subdirs($path) {
foreach (ftp_rawlist($this->connect, $path) as $str) {
foreach ($this->ftpRawList($path) as $str) {
$info = preg_split('/\s+/', $str, 9);
if (!isset($this->ftpOsUnix)) {
$this->ftpOsUnix = !preg_match('/\d/', substr($info[0], 0, 1));
@ -899,7 +954,7 @@ class elFinderVolumeFTP extends elFinderVolumeDriver {
protected function _scandir($path) {
$files = array();
foreach (ftp_rawlist($this->connect, $path) as $str) {
foreach ($this->ftpRawList($path) as $str) {
if (($stat = $this->parseRaw($str, $path, true))) {
$files[] = $this->_joinPath($path, $stat['name']);
}
@ -1410,7 +1465,7 @@ class elFinderVolumeFTP extends elFinderVolumeDriver {
*/
protected function ftp_scan_dir($remote_directory, $targets = null)
{
$buff = ftp_rawlist($this->connect, $remote_directory);
$buff = $this->ftpRawList($remote_directory);
$items = array();
if ($targets && is_array($targets)) {
$targets = array_flip($targets);

View File

@ -110,6 +110,7 @@ class elFinderVolumeGoogleDrive extends elFinderVolumeDriver
'gdAlias' => '%s@GDrive',
'googleApiClient' => '',
'path' => '/',
'tmbPath' => '',
'separator' => '/',
'useGoogleTmb' => true,
'acceptedName' => '#^[^/\\?*:|"<>]*[^./\\?*:|"<>]$#',
@ -976,9 +977,6 @@ class elFinderVolumeGoogleDrive extends elFinderVolumeDriver
}
}
if (!$this->tmp && is_writable($this->options['tmbPath'])) {
$this->tmp = $this->options['tmbPath'];
}
if (!$this->tmp && ($tmp = elFinder::getStaticVar('commonTempPath'))) {
$this->tmp = $tmp;
}
@ -1005,6 +1003,11 @@ class elFinderVolumeGoogleDrive extends elFinderVolumeDriver
{
parent::configure();
// fallback of $this->tmp
if (!$this->tmp && $this->tmbPathWritable) {
$this->tmp = $this->tmbPath;
}
$this->disabled[] = 'archive';
$this->disabled[] = 'extract';
@ -1324,6 +1327,13 @@ class elFinderVolumeGoogleDrive extends elFinderVolumeDriver
*/
public function getContentUrl($hash, $options = [])
{
if (!empty($options['temporary'])) {
// try make temporary file
$url = parent::getContentUrl($hash, $options);
if ($url) {
return $url;
}
}
if (($file = $this->file($hash)) == false || !$file['url'] || $file['url'] == 1) {
$path = $this->decode($hash);
@ -1726,7 +1736,8 @@ class elFinderVolumeGoogleDrive extends elFinderVolumeDriver
**/
protected function _copy($source, $targetDir, $name)
{
$path = $this->_normpath($targetDir.'/'.$name);
$source = $this->_normpath($source);
$targetDir = $this->_normpath($targetDir);
try {
$file = new \Google_Service_Drive_DriveFile();

View File

@ -26,11 +26,13 @@ class elFinderVolumeGroup extends elFinderVolumeDriver {
$this->options['path'] = '/';
$this->options['dirUrlOwn'] = true;
$this->options['syncMinMs'] = 0;
$this->options['tmbPath'] = '';
$this->options['disabled'] = array(
'archive',
'cut',
'duplicate',
'edit',
'empty',
'extract',
'getfile',
'mkdir',

View File

@ -577,7 +577,7 @@ class elFinderVolumeLocalFileSystem extends elFinderVolumeDriver {
if ($dirItr->hasChildren()) {
$dirs = true;
$name = $dirItr->getSubPathName();
while($name) {
while($dirItr->valid()) {
if (!$this->attr($path . DIRECTORY_SEPARATOR . $name, 'read', null, true)) {
$dirs = false;
$dirItr->next();
@ -644,6 +644,7 @@ class elFinderVolumeLocalFileSystem extends elFinderVolumeDriver {
* @author Dmitry (dio) Levashov
**/
protected function _scandir($path) {
elFinder::extendTimeLimit();
$files = array();
$cache = array();
$dirWritable = is_writable($path);
@ -908,8 +909,8 @@ class elFinderVolumeLocalFileSystem extends elFinderVolumeDriver {
return false;
}
// keep timestamp on upload
if ($mtime && $this->ARGS['cmd'] === 'upload' && isset($this->options['keepTimestamp']['upload'])) {
touch($path, $mtime);
if ($mtime && $this->ARGS['cmd'] === 'upload') {
touch($path, isset($this->options['keepTimestamp']['upload'])? $mtime : time());
}
// re-create the source file for remove processing of paste command
$isCmdPaste && !$isCmdCopy && touch($uri);
@ -1005,7 +1006,7 @@ class elFinderVolumeLocalFileSystem extends elFinderVolumeDriver {
if ($this->quarantine) {
$dir = $this->quarantine.DIRECTORY_SEPARATOR.md5(basename($path).mt_rand());
$archive = $dir.DIRECTORY_SEPARATOR.basename($path);
$archive = (isset($arc['toSpec']) || $arc['cmd'] === 'phpfunction')? '' : $dir.DIRECTORY_SEPARATOR.basename($path);
if (!mkdir($dir)) {
return false;
@ -1017,12 +1018,12 @@ class elFinderVolumeLocalFileSystem extends elFinderVolumeDriver {
chmod($dir, 0777);
// copy in quarantine
if (!copy($path, $archive)) {
if (!is_readable($path) || ($archive && !copy($path, $archive))) {
return false;
}
// extract in quarantine
$this->unpackArchive($archive, $arc);
$this->unpackArchive($path, $arc, $archive? true : $dir);
// get files list
$ls = self::localScandir($dir);

View File

@ -148,7 +148,8 @@ class elFinderVolumeMySQL extends elFinderVolumeDriver {
$this->tmpPath = $tmp;
}
if (!$this->tmpPath && $this->tmbPath && $this->tmbPathWritable) {
// fallback of $this->tmp
if (!$this->tmpPath && $this->tmbPathWritable) {
$this->tmpPath = $this->tmbPath;
}
@ -542,6 +543,9 @@ class elFinderVolumeMySQL extends elFinderVolumeDriver {
unset($stat['height']);
$stat['size'] = 0;
} else {
if (!$stat['mime']) {
unset($stat['mime']);
}
unset($stat['dirs']);
}
unset($stat['id']);
@ -657,7 +661,7 @@ class elFinderVolumeMySQL extends elFinderVolumeDriver {
* @author Dmitry (dio) Levashov
**/
protected function _mkfile($path, $name) {
return $this->make($path, $name, 'text/plain') ? $this->_joinPath($path, $name) : false;
return $this->make($path, $name, '') ? $this->_joinPath($path, $name) : false;
}
/**

View File

@ -747,9 +747,6 @@ class elFinderVolumeOneDrive extends elFinderVolumeDriver
}
}
if (!$this->tmp && is_writable($this->options['tmbPath'])) {
$this->tmp = $this->options['tmbPath'];
}
if (!$this->tmp && ($tmp = elFinder::getStaticVar('commonTempPath'))) {
$this->tmp = $tmp;
}
@ -783,6 +780,11 @@ class elFinderVolumeOneDrive extends elFinderVolumeDriver
{
parent::configure();
// fallback of $this->tmp
if (!$this->tmp && $this->tmbPathWritable) {
$this->tmp = $this->tmbPath;
}
$this->disabled[] = 'archive';
$this->disabled[] = 'extract';
}
@ -1010,6 +1012,13 @@ class elFinderVolumeOneDrive extends elFinderVolumeDriver
**/
public function getContentUrl($hash, $options = array())
{
if (!empty($options['temporary'])) {
// try make temporary file
$url = parent::getContentUrl($hash, $options);
if ($url) {
return $url;
}
}
$res = '';
if (($file = $this->file($hash)) == false || !$file['url'] || $file['url'] == 1) {
$path = $this->decode($hash);

View File

@ -0,0 +1,50 @@
<?php
/**
* elFinder driver for trash bin at local filesystem.
*
* @author NaokiSawada
**/
class elFinderVolumeTrash extends elFinderVolumeLocalFileSystem
{
/**
* Driver id
* Must be started from letter and contains [a-z0-9]
* Used as part of volume id.
*
* @var string
**/
protected $driverId = 't';
public function __construct()
{
parent::__construct();
// original option of the Trash
$this->options['lockEverything'] = false; // Lock all items in the trash to disable delete, move, rename.
// common options as the volume driver
$this->options['alias'] = 'Trash';
$this->options['quarantine'] = '';
$this->options['rootCssClass'] = 'elfinder-navbar-root-trash';
$this->options['copyOverwrite'] = false;
$this->options['uiCmdMap'] = array('paste' => 'hidden', 'mkdir' => 'hidden', 'copy' => 'restore');
$this->options['disabled'] = array('archive', 'duplicate', 'edit', 'extract', 'mkfile', 'places', 'put', 'rename', 'resize', 'upload');
}
public function mount(array $opts)
{
if ($this->options['lockEverything']) {
if (!is_array($opts['attributes'])) {
$opts['attributes'] = array();
}
$attr = array(
'pattern' => '/./',
'locked' => true,
);
array_unshift($opts['attributes'], $attr);
}
// force set `copyJoin` to true
$opts['copyJoin'] = true;
return parent::mount($opts);
}
}

View File

@ -74,7 +74,7 @@ class elFinderPluginAutoResize extends elFinderPlugin {
}
public function onUpLoadPreSave(&$path, &$name, $src, $elfinder, $volume) {
public function onUpLoadPreSave(&$thash, &$name, $src, $elfinder, $volume) {
$opts = $this->getCurrentOpts($volume);
if (! $this->iaEnabled($opts)) {

View File

@ -59,7 +59,7 @@ class elFinderPluginAutoRotate extends elFinderPlugin {
}
public function onUpLoadPreSave(&$path, &$name, $src, $elfinder, $volume) {
public function onUpLoadPreSave(&$thash, &$name, $src, $elfinder, $volume) {
$opts = $this->getCurrentOpts($volume);
if (! $this->iaEnabled($opts)) {

View File

@ -28,6 +28,7 @@
* 'enable' => true,
* 'nfc' => true,
* 'nfkc' => true,
* 'umlauts' => false,
* 'lowercase' => false,
* 'convmap' => array()
* )
@ -43,6 +44,7 @@
* 'enable' => true,
* 'nfc' => true,
* 'nfkc' => true,
* 'umlauts' => false,
* 'lowercase' => false,
* 'convmap' => array()
* )
@ -68,6 +70,7 @@ class elFinderPluginNormalizer extends elFinderPlugin
'enable' => true, // For control by volume driver
'nfc' => true, // Canonical Decomposition followed by Canonical Composition
'nfkc' => true, // Compatibility Decomposition followed by Canonical
'umlauts' => false, // Convert umlauts with their closest 7 bit ascii equivalent
'lowercase' => false, // Make chars lowercase
'convmap' => array()// Convert map ('FROM' => 'TO') array
);
@ -112,15 +115,13 @@ class elFinderPluginNormalizer extends elFinderPlugin
}
}
public function onUpLoadPreSave(&$path, &$name, $src, $elfinder, $volume) {
// NOTE: $thash is directory hash so it unneed to process at here
public function onUpLoadPreSave(&$thash, &$name, $src, $elfinder, $volume) {
$opts = $this->getCurrentOpts($volume);
if (! $opts['enable']) {
return false;
}
if ($path) {
$path = $this->normalize($path, $opts);
}
$name = $this->normalize($name, $opts);
return true;
}
@ -145,6 +146,11 @@ class elFinderPluginNormalizer extends elFinderPlugin
}
}
}
if ($opts['umlauts']) {
if (strpos($str = htmlentities($str, ENT_QUOTES, 'UTF-8'), '&') !== false) {
$str = html_entity_decode(preg_replace('~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|tilde|uml);~i', '$1', $str), ENT_QUOTES, 'utf-8');
}
}
if ($opts['convmap'] && is_array($opts['convmap'])) {
$str = strtr($str, $opts['convmap']);
}

View File

@ -58,7 +58,8 @@ class elFinderPluginSanitizer extends elFinderPlugin
$defaults = array(
'enable' => true, // For control by volume driver
'targets' => array('\\','/',':','*','?','"','<','>','|'), // target chars
'replace' => '_' // replace to this
'replace' => '_', // replace to this
'pathAllows' => array('/') // Characters allowed in path name of characters in `targets` array
);
$this->opts = array_merge($defaults, $opts);
@ -101,15 +102,13 @@ class elFinderPluginSanitizer extends elFinderPlugin
}
}
public function onUpLoadPreSave(&$path, &$name, $src, $elfinder, $volume) {
// NOTE: $thash is directory hash so it unneed to process at here
public function onUpLoadPreSave(&$thash, &$name, $src, $elfinder, $volume) {
$opts = $this->getCurrentOpts($volume);
if (! $opts['enable']) {
return false;
}
if ($path) {
$path = $this->sanitizeFileName($path, $opts, array('/'));
}
$name = $this->sanitizeFileName($name, $opts);
return true;
}

View File

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

View File

@ -79,7 +79,7 @@ class elFinderPluginWatermark extends elFinderPlugin {
}
public function onUpLoadPreSave(&$path, &$name, $src, $elfinder, $volume) {
public function onUpLoadPreSave(&$thash, &$name, $src, $elfinder, $volume) {
$opts = $this->getCurrentOpts($volume);
if (! $this->iaEnabled($opts)) {

View File

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@ -1,8 +1,8 @@
<?php
/**
* Файл-заглушка, предназначенный для запрета показа списка файлов в текущей директории,
* если через адресную строку браузера было прямое общращение к данной директории.
*/
header('Location:/');
exit;
/**
* Файл-заглушка, предназначенный для запрета показа списка файлов в текущей директории,
* если через адресную строку браузера было прямое общращение к данной директории.
*/
header('Location:/');
exit;
?>