Browse Source

Last fixes

pull/3/head
M@d D3n 7 years ago
parent
commit
3323b45943
  1. 15
      .htaccess
  2. 2
      admin/lang/bg/blocks.txt
  3. 15
      admin/lang/bg/docs.txt
  4. 23
      admin/lang/bg/request.txt
  5. 11
      admin/lang/bg/sysblocks.txt
  6. 2
      admin/templates/documents/docs_simple.tpl
  7. 8
      admin/templates/documents/form.tpl
  8. 4
      admin/templates/js/filemanager.js
  9. 2
      admin/templates/js/filemanager_template.js
  10. 2
      admin/templates/noperm.tpl
  11. 4
      admin/templates/settings/settings_case.tpl
  12. 2
      class/class.core.php
  13. 617
      class/class.docs.php
  14. 68
      class/class.settings.php
  15. 52
      class/class.thumbnail.php
  16. 4
      fields/image_mega/field.php
  17. 2
      fields/image_multi/field.php
  18. 2
      fields/image_multi_new_3inputs/field.php
  19. 4
      fields/image_single/field.php
  20. 2
      functions/func.block.php
  21. 33
      functions/func.common.php
  22. 2
      functions/func.parserequest.php
  23. 5
      functions/func.sysblock.php
  24. 61
      functions/func.thumbnails.php
  25. 9
      inc/config.php
  26. 20
      inc/init.php
  27. 21
      inc/sitemap.php
  28. 85
      inc/thumb.php
  29. 22
      index.php
  30. 2
      install/index.php
  31. 1
      lib/redactor/codemirror/codemirror_connect.tpl
  32. 51
      lib/redactor/elfinder/css/elfinder.full.css
  33. 4
      lib/redactor/elfinder/css/elfinder.min.css
  34. 4
      lib/redactor/elfinder/css/theme.css
  35. BIN
      lib/redactor/elfinder/img/edit_aceeditor.png
  36. BIN
      lib/redactor/elfinder/img/edit_ckeditor.png
  37. BIN
      lib/redactor/elfinder/img/edit_codemirror.png
  38. BIN
      lib/redactor/elfinder/img/edit_creativecloud.png
  39. BIN
      lib/redactor/elfinder/img/edit_pixlreditor.png
  40. BIN
      lib/redactor/elfinder/img/edit_pixlrexpress.png
  41. BIN
      lib/redactor/elfinder/img/edit_simplemde.png
  42. BIN
      lib/redactor/elfinder/img/edit_tinymce.png
  43. BIN
      lib/redactor/elfinder/img/titleBg.png
  44. BIN
      lib/redactor/elfinder/img/toolbar.png
  45. BIN
      lib/redactor/elfinder/img/volume_icon_trash.png
  46. 4558
      lib/redactor/elfinder/js/elfinder.full.js
  47. 27
      lib/redactor/elfinder/js/elfinder.min.js
  48. 1027
      lib/redactor/elfinder/js/extras/editors.default.js
  49. 43
      lib/redactor/elfinder/js/i18n/elfinder.LANG.js
  50. 23
      lib/redactor/elfinder/js/i18n/elfinder.cs.js
  51. 183
      lib/redactor/elfinder/js/i18n/elfinder.id.js
  52. 205
      lib/redactor/elfinder/js/i18n/elfinder.jp.js
  53. 111
      lib/redactor/elfinder/js/i18n/elfinder.pl.js
  54. 2
      lib/redactor/elfinder/js/i18n/elfinder.ru.js
  55. 39
      lib/redactor/elfinder/js/i18n/elfinder.sk.js
  56. 10
      lib/redactor/elfinder/js/i18n/help/en.html
  57. 10
      lib/redactor/elfinder/js/i18n/help/jp.html
  58. 10
      lib/redactor/elfinder/js/i18n/help/ru.html
  59. 8
      lib/redactor/elfinder/js/proxy/elFinderSupportVer1.js
  60. 2
      lib/redactor/elfinder/php/.tmp/.htaccess
  61. 0
      lib/redactor/elfinder/php/MySQLStorage.sql
  62. 1
      lib/redactor/elfinder/php/autoload.php
  63. 27
      lib/redactor/elfinder/php/connector.minimal.php-dist
  64. 13
      lib/redactor/elfinder/php/connector.php
  65. 27
      lib/redactor/elfinder/php/connector.php-dist
  66. 14
      lib/redactor/elfinder/php/connector_template.php
  67. 289
      lib/redactor/elfinder/php/elFinder.class.php
  68. 5
      lib/redactor/elfinder/php/elFinderConnector.class.php
  69. 0
      lib/redactor/elfinder/php/elFinderFlysystemGoogleDriveNetmount.php
  70. 0
      lib/redactor/elfinder/php/elFinderPlugin.php
  71. 9
      lib/redactor/elfinder/php/elFinderSession.php
  72. 0
      lib/redactor/elfinder/php/elFinderSessionInterface.php
  73. 17
      lib/redactor/elfinder/php/elFinderVolumeBox.class.php
  74. 477
      lib/redactor/elfinder/php/elFinderVolumeDriver.class.php
  75. 0
      lib/redactor/elfinder/php/elFinderVolumeDropbox.class.php
  76. 49
      lib/redactor/elfinder/php/elFinderVolumeDropbox2.class.php
  77. 87
      lib/redactor/elfinder/php/elFinderVolumeFTP.class.php
  78. 19
      lib/redactor/elfinder/php/elFinderVolumeGoogleDrive.class.php
  79. 2
      lib/redactor/elfinder/php/elFinderVolumeGroup.class.php
  80. 13
      lib/redactor/elfinder/php/elFinderVolumeLocalFileSystem.class.php
  81. 8
      lib/redactor/elfinder/php/elFinderVolumeMySQL.class.php
  82. 15
      lib/redactor/elfinder/php/elFinderVolumeOneDrive.class.php
  83. 50
      lib/redactor/elfinder/php/elFinderVolumeTrash.class.php
  84. 0
      lib/redactor/elfinder/php/libs/GdBmp.php
  85. 0
      lib/redactor/elfinder/php/mime.types
  86. 2
      lib/redactor/elfinder/php/plugins/AutoResize/plugin.php
  87. 2
      lib/redactor/elfinder/php/plugins/AutoRotate/plugin.php
  88. 14
      lib/redactor/elfinder/php/plugins/Normalizer/plugin.php
  89. 9
      lib/redactor/elfinder/php/plugins/Sanitizer/plugin.php
  90. 0
      lib/redactor/elfinder/php/plugins/Watermark/logo.png
  91. 2
      lib/redactor/elfinder/php/plugins/Watermark/plugin.php
  92. 0
      lib/redactor/elfinder/php/resources/video.png
  93. 4
      modules/index.php

15
.htaccess

@ -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

2
admin/lang/bg/blocks.txt

@ -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> Този алиас вече е използван в друг визуален блок"

15
admin/lang/bg/docs.txt

@ -284,3 +284,18 @@ DOC_SEARCH_FIELD_EQ = "Равно на"
DOC_SEARCH_FIELD_TEXT = "Стойност"
DOC_TEMPLATE_DEFAULT = "Използвай по подразбиране"
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 = "Изберете език"

23
admin/lang/bg/request.txt

@ -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"
// v 3.2
REQUEST_PAGINATION = "Постранична навигация"
REQUEST_NAVI_TPL = "Шаблон за постранична навигация"
REQUEST_OTHER = "Още"
REQUEST_SHOW_SQL = "Покажи SQL заявката"
REQUEST_DOC_ON_PAGE = "Брой елементи на заявката на страница"
REQUEST_PAGES_CURENT = "Номер страница"
REQUEST_PAGES_TOTAL = "Общ брой страници"

11
admin/lang/bg/sysblocks.txt

@ -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> Този алиас вече е използван в друг системен блок"

2
admin/templates/documents/docs_simple.tpl

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

8
admin/templates/documents/form.tpl

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

4
admin/templates/js/filemanager.js

@ -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,

2
admin/templates/js/filemanager_template.js

@ -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 : 'Файловый менеджер'

2
admin/templates/noperm.tpl

@ -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>

4
admin/templates/settings/settings_case.tpl

@ -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>

2
class/class.core.php

@ -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',

617
class/class.docs.php

File diff suppressed because it is too large Load Diff

68
class/class.settings.php

@ -68,44 +68,76 @@ 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";
if (isset($_REQUEST['more']))
{
$set = '<?php' . "\r\n\r\n";
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) {
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{
}
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 {
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 {
}
else
{
$AVE_Template->assign('CMS_CONFIG', $GLOBALS['CMS_CONFIG']);
$AVE_Template->assign('content', $AVE_Template->fetch('settings/settings_case.tpl'));
}

52
class/class.thumbnail.php

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

4
fields/image_mega/field.php

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

2
fields/image_multi/field.php

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

2
fields/image_multi_new_3inputs/field.php

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

4
fields/image_single/field.php

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

2
functions/func.block.php

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

33
functions/func.common.php

@ -1019,4 +1019,37 @@ function isAjax()
{
return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'));
}
/**
* Функция делает компрессию данных (gzip)
*
* @return string
*/
function gzip_compress($data)
{
$Gzip = strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false;
if ($Gzip && GZIP_COMPRESSION)
{
$content = gzencode (trim(preg_replace( '/\s+/', ' ', $data)), 9);
header ('Content-Encoding: gzip');
}
else
{
$content = $data;
}
header ('Content-Type: text/html; charset=utf-8');
header ('Cache-Control: must-revalidate');
if (OUTPUT_EXPIRE)
{
$expire = 'Expires: ' . gmdate ("D, d M Y H:i:s", time() + OUTPUT_EXPIRE_OFFSET) . ' GMT';
header ($expire);
}
header ('Content-Length: ' . strlen($content));
header ('Vary: Accept-Encoding');
echo $content;
}
?>

2
functions/func.parserequest.php

@ -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 != '')
{

5
functions/func.sysblock.php

@ -27,7 +27,6 @@ function parse_sysblock($id)
$eval_sysblock = false;
if ($id != '')
{
$eval_sysblock = true;
@ -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 . '<'.'?');

61
functions/func.thumbnails.php

@ -6,40 +6,47 @@
* @package AVE.cms
* @version 3.x
* @filesource
* @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
* @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
/*
|----------------------------------------------------------------------------------
| Формирование ссылки на миниатюру определённого размера,
| если размер не указан формируется миниатюра шириной 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)) {
if (empty($params['link']))
return false;
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);
if(!is_dir($path)){
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)){
if (! file_exists(BASE_DIR . $link))
{
file_put_contents(BASE_DIR . $link . '.tmp', $params['link']);
}
@ -50,7 +57,8 @@ function make_thumbnail($params)
{
$size = $params['size'];
if (!preg_match('/^[r|c|f|t]\d+x\d+r*$/', $size)) return false;
if (! preg_match('/^[r|c|f|t|s]\d+x\d+r*$/', $size))
return false;
}
else
{
@ -61,22 +69,27 @@ function make_thumbnail($params)
$countParts = count($nameParts);
if ($countParts < 2) return false;
if ($countParts < 2)
return false;
$nameParts[$countParts-2] .= '-' . $size;
return dirname($params['link']) . '/' . THUMBNAIL_DIR . '/' . implode('.', $nameParts);
}
/**
* Формирование ссылки на миниатюру определённого размера
*
* @param array $params параметры
* @return string
/*
|----------------------------------------------------------------------------------
| Формирование ссылки на миниатюру определённого размера
|----------------------------------------------------------------------------------
| @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])) : '');
return ((is_array($params) && isset($params[2]))
? make_thumbnail(array('size' => $params[1], 'link' => $params[2]))
: '');
}
?>

9
inc/config.php

@ -97,7 +97,11 @@
$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']['THUMBNAIL_SIZES'] = array('DESCR' => 'Разрешенные методы и размеры для миниатюр (через запятую)','default'=>'','TYPE'=>'string','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['THUMBNAIL_IPTC'] = array('DESCR' => 'Генерировать миниютарам IPTC','default'=>false,'TYPE'=>'bool','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'=>'');
@ -133,6 +137,11 @@
$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');

20
inc/init.php

@ -35,7 +35,8 @@
foreach ($GLOBALS as $key => $value)
{
if (!isset($allowed[$key])) unset($GLOBALS[$key]);
if (!isset($allowed[$key]))
unset($GLOBALS[$key]);
}
}
@ -220,10 +221,12 @@
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 {
@ -331,15 +334,18 @@
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();

21
inc/sitemap.php

@ -18,8 +18,6 @@ define('START_MICROTIME', microtime());
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');
@ -33,6 +31,9 @@ if(substr($_SERVER['REQUEST_URI'], 0, strlen('/index.php?')) != '/index.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'];
@ -47,7 +48,9 @@ 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(

85
inc/thumb.php

@ -68,12 +68,28 @@
return is_dir($path) || (mkdir(dirname($path), $mode) && _mkdir($path, $mode));
}
//-- Подгружаем настройки системы
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']);
//-- Вызов чере $_GET параметры
//-- ToDo
if (! empty($_REQUEST['thumb']))
{
$imagefile = '/'.
@ -82,25 +98,36 @@
. '/' . 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')
die('No image');
$baseDir = str_replace("\\", "/", dirname(dirname(__FILE__)));
//-- Базовая папка
$baseDir = str_replace('\\', '/', dirname(dirname(__FILE__)));
//-- Если файл существует, показываем его
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("Content-Length: " . (string) filesize($baseDir . $imagefile), true);
readfile($baseDir . $imagefile);
exit;
}
@ -122,18 +149,35 @@
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);
//-- Если нет параметров, отдаем 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;
}
//-- Иначе
else
{
list ($size, $method, $width, $height) = $matches;
@ -153,7 +197,9 @@
{
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), '/') . '/');
@ -166,6 +212,7 @@
file_put_contents("$imagePath/$imageName",$img);
setEXIFF("$imagePath/$imageName");
$save = true;
}
@ -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,20 +279,30 @@
$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($AVE_DB)){
//-- Если в настройках разрешена генерация IPTC тегов для миниатюр
if (THUMBNAIL_IPTC)
{
if (! isset($AVE_DB))
{
@require(BASE_DIR . '/class/class.database.php');
$sitename= @$AVE_DB->Query("SELECT site_name FROM " . PREFIX . "_settings LIMIT 1")->GetCell();
}
@ -265,5 +332,5 @@
}
}
}
}
?>

22
index.php

@ -91,6 +91,11 @@
$content = ob_get_clean();
if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') && GZIP_COMPRESSION)
{
ob_start('ob_gzhandler');
}
else
ob_start();
eval ('?>' . $content . '<?');
@ -139,16 +144,21 @@
// Тут заменяем [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);
?>

2
install/index.php

@ -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');

1
lib/redactor/codemirror/codemirror_connect.tpl

@ -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">

51
lib/redactor/elfinder/css/elfinder.full.css

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

4
lib/redactor/elfinder/css/elfinder.min.css vendored

File diff suppressed because one or more lines are too long

4
lib/redactor/elfinder/css/theme.css

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

BIN
lib/redactor/elfinder/img/edit_aceeditor.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 532 B

BIN
lib/redactor/elfinder/img/edit_ckeditor.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 770 B

BIN
lib/redactor/elfinder/img/edit_codemirror.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 550 B

BIN
lib/redactor/elfinder/img/edit_creativecloud.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 662 B

BIN
lib/redactor/elfinder/img/edit_pixlreditor.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 993 B

BIN
lib/redactor/elfinder/img/edit_pixlrexpress.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 979 B

BIN
lib/redactor/elfinder/img/edit_simplemde.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 B

BIN
lib/redactor/elfinder/img/edit_tinymce.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 B

BIN
lib/redactor/elfinder/img/titleBg.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 296 B

BIN
lib/redactor/elfinder/img/toolbar.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 19 KiB

BIN
lib/redactor/elfinder/img/volume_icon_trash.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 768 B

4558
lib/redactor/elfinder/js/elfinder.full.js

File diff suppressed because it is too large Load Diff

27
lib/redactor/elfinder/js/elfinder.min.js vendored

File diff suppressed because one or more lines are too long

1027
lib/redactor/elfinder/js/extras/editors.default.js

File diff suppressed because it is too large Load Diff

43
lib/redactor/elfinder/js/i18n/elfinder.LANG.js

@ -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',

23
lib/redactor/elfinder/js/i18n/elfinder.cs.js

@ -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.',
@ -68,7 +70,7 @@
'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,7 +84,7 @@
'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
@ -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 ********************************/
@ -166,6 +168,8 @@
'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', // 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',
@ -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ý',
@ -471,3 +477,4 @@
}
};
}));

183
lib/redactor/elfinder/js/i18n/elfinder.id.js

@ -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) {
@ -13,11 +14,12 @@
}
}(this, function(elFinder) {
elFinder.prototype.i18.id = {
translator : 'Suyadi &lt;1441177004009@student.unsika.ac.id&gt;',
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',
fancyDateFormat : '$1 H:i',
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 **********************************/
@ -49,6 +51,7 @@
'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.',
@ -58,13 +61,15 @@
'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".',
'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.',
'errUploadFileSize' : 'Berkas melampaui ukuran yang diperbolehkan.',
'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".',
@ -72,6 +77,7 @@
'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.',
@ -82,16 +88,16 @@
'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.',
'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.',
'errNetMount' : 'Tidak dapat membaca susunan "$1".',
'errNetMountNoDriver' : 'Protokol tidak didukung.',
'errNetMountFailed' : 'Tidak dapat membaca susunannya.',
'errNetMountHostReq' : 'Host harus ada.',
'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"',
@ -99,6 +105,14 @@
'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',
@ -115,6 +129,7 @@
'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',
@ -122,6 +137,8 @@
'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',
@ -129,6 +146,13 @@
'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',
@ -138,7 +162,23 @@
'btnCancel' : 'Batal',
'btnNo' : 'Tidak',
'btnYes' : 'Ya',
'btnMount' : 'Baca susunan',
'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
/******************************** notifications ********************************/
'ntfopen' : 'Buka folder',
'ntffile' : 'Buka berkas',
@ -159,15 +199,29 @@
'ntfresize' : 'Mengubah ukuran citra',
'ntfsmth' : 'Melakukan sesuatu',
'ntfloadimg' : 'Memuat citra',
'ntfnetmount' : 'Membaca susunan volume jaringan',
'ntfdim' : 'Mendapatkan dimensi 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
/*********************************** volumes *********************************/
'volume_Trash' : 'Sampah', //from v2.1.24 added 29.4.2017
/************************************ dates **********************************/
'dateUnknown' : 'tak diketahui',
'Today' : 'Hari ini',
'Yesterday' : 'Kemarin',
'msJan' : 'Jan',
'msFeb' : 'Peb',
'msFeb' : 'Feb',
'msMar' : 'Mar',
'msApr' : 'Apr',
'msMay' : 'Mei',
@ -211,11 +265,26 @@
'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',
@ -272,6 +341,7 @@
'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',
@ -283,15 +353,68 @@
'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',
'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',
@ -304,7 +427,7 @@
'kindMsPP' : 'Dokumen Ms. Powerpoint',
'kindOO' : 'Dokumen Open Office',
'kindAppFlash' : 'Aplikasi Flash',
'kindPDF' : 'Portable Document Format (PDF)',
'kindPDF' : 'Portable Dokumen Format (PDF)',
'kindTorrent' : 'Berkas Bittorrent',
'kind7z' : 'Arsip 7z',
'kindTAR' : 'Arsip TAR',
@ -339,6 +462,7 @@
'kindAWK' : 'Kode-sumber AWK',
'kindCSV' : 'Dokumen CSV',
'kindDOCBOOK' : 'Dokumen Docbook XML',
'kindMarkdown' : 'Markdown text', // added 20.7.2015
// images
'kindImage' : 'Citra',
'kindBMP' : 'Citra BMP',
@ -371,3 +495,4 @@
}
};
}));

205
lib/redactor/elfinder/js/i18n/elfinder.jp.js

@ -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,95 +19,102 @@
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
'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
'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' : 'アーカイブ作成',
@ -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,6 +155,7 @@
'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' : '閉じる',
@ -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' : '不明',
@ -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' : '不明',

111
lib/redactor/elfinder/js/i18n/elfinder.pl.js

@ -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',

2
lib/redactor/elfinder/js/i18n/elfinder.ru.js

@ -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' : 'Неизвестный',

39
lib/redactor/elfinder/js/i18n/elfinder.sk.js

@ -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ý.',
@ -68,21 +70,22 @@
'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
@ -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',
@ -166,6 +173,11 @@
'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ť', // 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',
@ -262,9 +280,11 @@
'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',
@ -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 @@
}
};
}));

10
lib/redactor/elfinder/js/i18n/help/en.html

@ -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>

10
lib/redactor/elfinder/js/i18n/help/jp.html

@ -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>

10
lib/redactor/elfinder/js/i18n/help/ru.html

@ -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>

8
lib/redactor/elfinder/js/proxy/elFinderSupportVer1.js

@ -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,

2
lib/redactor/elfinder/php/.tmp/.htaccess

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

0
lib/redactor/elfinder/inc/MySQLStorage.sql → lib/redactor/elfinder/php/MySQLStorage.sql

1
lib/redactor/elfinder/inc/autoload.php → lib/redactor/elfinder/php/autoload.php

@ -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]);

27
lib/redactor/elfinder/inc/connector.minimal.php-dist → lib/redactor/elfinder/php/connector.minimal.php-dist

@ -74,11 +74,17 @@ elFinder::$netDrivers['ftp'] = 'FTP';
* 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 $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)
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
)
)
);

13
lib/redactor/elfinder/inc/connector.php → lib/redactor/elfinder/php/connector.php

@ -85,11 +85,17 @@ elFinder::$netDrivers['ftp'] = 'FTP';
* 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 $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)
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
}
@ -155,3 +161,4 @@ $opts = array(
// run elFinder
$connector = new elFinderConnector(new elFinder($opts));
$connector->run();

27
lib/redactor/elfinder/inc/connector.php-dist → lib/redactor/elfinder/php/connector.php-dist

@ -74,11 +74,17 @@ elFinder::$netDrivers['ftp'] = 'FTP';
* 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 $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)
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
)
)
);

14
lib/redactor/elfinder/inc/connector_template.php → lib/redactor/elfinder/php/connector_template.php

@ -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';
@ -83,11 +85,17 @@ elFinder::$netDrivers['ftp'] = 'FTP';
* 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 $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)
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
}

289
lib/redactor/elfinder/inc/elFinder.class.php → lib/redactor/elfinder/php/elFinder.class.php

@ -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'];
}
return array('size' => $size);
}
} else if (is_numeric($volRes)) {
$size += $volRes;
$files = $dirs = 'unknown';
$itemCount = false;
}
}
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,13 +1981,13 @@ 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);
@ -1957,7 +2036,20 @@ class elFinder {
}
}
$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,6 +2411,8 @@ 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);
}
@ -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
// 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] : '';
$name = substr(md5(basename($tmpname)), 0, 8) . $ext;
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 ($content !== '') {
if (! $args['conv'] || $args['conv'] == '1') {
// detect encoding
if ($content === '') {
$enc = '';
} else {
if (function_exists('mb_detect_encoding')) {
if ($enc = mb_detect_encoding($content , mb_detect_order(), true)) {
$encu = strtoupper($enc);
@ -2639,7 +2720,6 @@ class elFinder {
}
}
}
}
if ($args['conv']) {
$enc = $args['conv'];
if (strtoupper($enc) !== 'UTF-8') {
@ -2653,6 +2733,9 @@ class elFinder {
}
}
}
} else {
$content = 'data:' . ($mime? $mime : 'application/octet-stream') . ';base64,'.base64_encode($content);
}
if ($enc !== false) {
if ($content !== 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;

5
lib/redactor/elfinder/inc/elFinderConnector.class.php → lib/redactor/elfinder/php/elFinderConnector.class.php

@ -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']);

0
lib/redactor/elfinder/inc/elFinderFlysystemGoogleDriveNetmount.php → lib/redactor/elfinder/php/elFinderFlysystemGoogleDriveNetmount.php

0
lib/redactor/elfinder/inc/elFinderPlugin.php → lib/redactor/elfinder/php/elFinderPlugin.php

9
lib/redactor/elfinder/inc/elFinderSession.php → lib/redactor/elfinder/php/elFinderSession.php

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

0
lib/redactor/elfinder/inc/elFinderSessionInterface.php → lib/redactor/elfinder/php/elFinderSessionInterface.php

17
lib/redactor/elfinder/inc/elFinderVolumeBox.class.php → lib/redactor/elfinder/php/elFinderVolumeBox.class.php

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

477
lib/redactor/elfinder/inc/elFinderVolumeDriver.class.php → lib/redactor/elfinder/php/elFinderVolumeDriver.class.php

@ -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
@ -206,6 +229,8 @@ abstract class elFinderVolumeDriver {
'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,7 +359,9 @@ 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!
'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
@ -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();
@ -1224,6 +1300,10 @@ abstract class elFinderVolumeDriver {
? $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
if (!empty($this->options['archiveMimes']) && is_array($this->options['archiveMimes'])) {
@ -1282,6 +1362,61 @@ abstract class elFinderVolumeDriver {
$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
**/
@ -1799,10 +1938,18 @@ abstract class elFinderVolumeDriver {
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,11 +2372,17 @@ abstract class elFinderVolumeDriver {
if (!$stat['write']) {
return $this->setError($err, $errpath, elFinder::ERROR_PERM_DENIED);
}
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))) {
return $this->setError(elFinder::ERROR_REPLACE, $errpath);
@ -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 {
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
@ -3172,6 +3369,10 @@ abstract class elFinderVolumeDriver {
$h = base64_decode(strtr($h, '-_.', '+/='));
// TODO uncrypt hash and return path
$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,6 +4096,7 @@ abstract class elFinderVolumeDriver {
}
$ext = (false === $pos = strrpos($name, '.')) ? '' : substr($name, $pos + 1);
if (! $nameCheck && is_readable($path)) {
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)) {
@ -3931,6 +4110,9 @@ abstract class elFinderVolumeDriver {
} else if ($this->mimeDetect == 'mime_content_type') {
$type = mime_content_type($path);
}
} else {
$type = 'text/plain';
}
}
if (! $type) {
$type = elFinderVolumeDriver::mimetypeInternalDetect($path);
@ -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];
@ -4431,18 +4636,7 @@ abstract class elFinderVolumeDriver {
}
$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);
$this->procExec('unrar', $o, $c);
if ($c==0 || $c == 7) {
$arcs['extract']['application/x-rar'] = array('cmd' => 'unrar', 'argc' => 'x -y', 'ext' => 'rar');
}
$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');
}
}
}
@ -5800,24 +5995,38 @@ abstract class elFinderVolumeDriver {
*
* @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 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) {
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)) {
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;

0
lib/redactor/elfinder/inc/elFinderVolumeDropbox.class.php → lib/redactor/elfinder/php/elFinderVolumeDropbox.class.php

49
lib/redactor/elfinder/inc/elFinderVolumeDropbox2.class.php → lib/redactor/elfinder/php/elFinderVolumeDropbox2.class.php

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

87
lib/redactor/elfinder/inc/elFinderVolumeFTP.class.php → lib/redactor/elfinder/php/elFinderVolumeFTP.class.php

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

19
lib/redactor/elfinder/inc/elFinderVolumeGoogleDrive.class.php → lib/redactor/elfinder/php/elFinderVolumeGoogleDrive.class.php

@ -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();

2
lib/redactor/elfinder/inc/elFinderVolumeGroup.class.php → lib/redactor/elfinder/php/elFinderVolumeGroup.class.php

@ -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',

13
lib/redactor/elfinder/inc/elFinderVolumeLocalFileSystem.class.php → lib/redactor/elfinder/php/elFinderVolumeLocalFileSystem.class.php

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

8
lib/redactor/elfinder/inc/elFinderVolumeMySQL.class.php → lib/redactor/elfinder/php/elFinderVolumeMySQL.class.php

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

15
lib/redactor/elfinder/inc/elFinderVolumeOneDrive.class.php → lib/redactor/elfinder/php/elFinderVolumeOneDrive.class.php

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

50
lib/redactor/elfinder/php/elFinderVolumeTrash.class.php

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

0
lib/redactor/elfinder/inc/libs/GdBmp.php → lib/redactor/elfinder/php/libs/GdBmp.php

0
lib/redactor/elfinder/inc/mime.types → lib/redactor/elfinder/php/mime.types

2
lib/redactor/elfinder/inc/plugins/AutoResize/plugin.php → lib/redactor/elfinder/php/plugins/AutoResize/plugin.php

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

2
lib/redactor/elfinder/inc/plugins/AutoRotate/plugin.php → lib/redactor/elfinder/php/plugins/AutoRotate/plugin.php

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

14
lib/redactor/elfinder/inc/plugins/Normalizer/plugin.php → lib/redactor/elfinder/php/plugins/Normalizer/plugin.php

@ -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']);
}

9
lib/redactor/elfinder/inc/plugins/Sanitizer/plugin.php → lib/redactor/elfinder/php/plugins/Sanitizer/plugin.php

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

0
lib/redactor/elfinder/inc/plugins/Watermark/logo.png → lib/redactor/elfinder/php/plugins/Watermark/logo.png

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

2
lib/redactor/elfinder/inc/plugins/Watermark/plugin.php → lib/redactor/elfinder/php/plugins/Watermark/plugin.php

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

0
lib/redactor/elfinder/inc/resources/video.png → lib/redactor/elfinder/php/resources/video.png

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

4
modules/index.php

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

Loading…
Cancel
Save