diff --git a/common/js/plugins/jquery.fileupload/js/main.js b/common/js/plugins/jquery.fileupload/js/main.js
index 99f2d40d0..d504d0284 100644
--- a/common/js/plugins/jquery.fileupload/js/main.js
+++ b/common/js/plugins/jquery.fileupload/js/main.js
@@ -205,15 +205,23 @@
}
catch(err) {}
}
+ if (typeof result.files !== 'undefined') {
+ $container.data('editorStatus', result);
+ } else {
+ $container.data('editorStatus', null);
+ }
} else if (result.message) {
+ $container.data('editorStatus', null);
alert(result.message);
return false;
} else {
+ $container.data('editorStatus', null);
alert(window.xe.msg_file_upload_error + " (Type 6)" + "
\n" + res.response().result);
return false;
}
},
fail: function(e, res) {
+ $container.data('editorStatus', null);
lastUploadTime = Date.now();
setTimeout(function() {
if (lastUploadTime < Date.now() - 800) {
@@ -228,7 +236,7 @@
},
stop: function() {
lastUploadTime = Date.now();
- self.loadFilelist($container);
+ self.loadFilelist($container, true);
},
start: function() {
lastUploadTime = Date.now();
@@ -261,7 +269,7 @@
$container.data('xefu-instance', this);
// 파일 목록 불러오기
- this.loadFilelist($container);
+ this.loadFilelist($container, true);
// 본문 삽입
data.settings.actSelectedInsertContent.on('click', function() {
@@ -415,20 +423,25 @@
file_srls.push(file_srl);
}
- exec_json('file.procFileDelete', {'file_srls': file_srls.join(','), 'editor_sequence': data.editorSequence}, function() {
+ exec_json('file.procFileDelete', {'file_srls': file_srls.join(','), 'editor_sequence': data.editorSequence}, function(result) {
$.each(file_srls, function(idx, srl){
data.settings.fileList.find('ul').find('li[data-file-srl=' + srl + ']').remove();
});
var ckeditor = _getCkeInstance(data.editorSequence);
var regexp = new RegExp('<(img|audio|video) [^>]*data-file-srl="(' + file_srls.join('|') + ')"[^>]*>', 'g');
ckeditor.setData(ckeditor.getData().replace(regexp, ''));
- self.loadFilelist($container);
+ if (result.error == 0 && typeof result.files !== 'undefined') {
+ $container.data('editorStatus', result);
+ } else {
+ $container.data('editorStatus', null);
+ }
+ self.loadFilelist($container, true);
});
},
/**
* 파일 목록 갱신
*/
- loadFilelist: function($container) {
+ loadFilelist: function($container, useEditorStatus) {
var self = this;
var data = $container.data();
var obj = {};
@@ -436,7 +449,7 @@
obj.editor_sequence = data.editorSequence;
obj.allow_chunks = 'Y';
- $.exec_json('file.getFileList', obj, function(res){
+ var refreshList = function(res) {
data.uploadTargetSrl = res.upload_target_srl;
if(editorRelKeys[data.editorSequence]) {
editorRelKeys[data.editorSequence].primary.value = res.upload_target_srl;
@@ -503,11 +516,18 @@
// 컨트롤, 리스트 표시
data.settings.controll.show()
data.settings.fileList.show();
- }, function(data, xhr) {
- if (xhr.status != 200) {
- return false;
- }
- });
+ };
+
+ // Get file list from HTML data-editor-status attribute when initializing.
+ if (useEditorStatus && typeof data.editorStatus !== 'undefined' && data.editorStatus !== null) {
+ refreshList(data.editorStatus);
+ } else {
+ $.exec_json('file.getFileList', obj, refreshList, function(data, xhr) {
+ if (xhr.status != 200) {
+ return false;
+ }
+ });
+ }
},
setCover: function($container, selected_el) {
var data = $container.data();
diff --git a/modules/editor/skins/ckeditor/file_upload.html b/modules/editor/skins/ckeditor/file_upload.html
index 589d902d7..e67763992 100644
--- a/modules/editor/skins/ckeditor/file_upload.html
+++ b/modules/editor/skins/ckeditor/file_upload.html
@@ -2,7 +2,10 @@
-
+
+
diff --git a/modules/file/file.controller.php b/modules/file/file.controller.php
index 706adf716..31fcee19c 100644
--- a/modules/file/file.controller.php
+++ b/modules/file/file.controller.php
@@ -170,6 +170,23 @@ class FileController extends File
{
$this->add('download_url', FileModel::getDownloadUrl($output->get('file_srl'), $output->get('sid'), 0, $output->get('source_filename')));
}
+
+ // Add upload status (getFileList)
+ try
+ {
+ $file_list = FileModel::getInstance()->getFileList($editor_sequence);
+ foreach ($file_list as $key => $val)
+ {
+ if (!isset($this->variables[$key]))
+ {
+ $this->add($key, $val);
+ }
+ }
+ }
+ catch (Exception $e)
+ {
+ // pass
+ }
}
/**
@@ -608,6 +625,23 @@ class FileController extends File
if(!FileModel::isDeletable($file_info)) continue;
$output = $this->deleteFile($file_srl);
}
+
+ // Add upload status (getFileList)
+ try
+ {
+ $file_list = FileModel::getInstance()->getFileList($editor_sequence);
+ foreach ($file_list as $key => $val)
+ {
+ if (!isset($this->variables[$key]))
+ {
+ $this->add($key, $val);
+ }
+ }
+ }
+ catch (Exception $e)
+ {
+ // pass
+ }
}
/**
diff --git a/modules/file/file.model.php b/modules/file/file.model.php
index a0ab5f827..4781038d0 100644
--- a/modules/file/file.model.php
+++ b/modules/file/file.model.php
@@ -20,42 +20,53 @@ class FileModel extends File
* It is used when a file list of the upload_target_srl is requested for creating/updating a document.
* Attempt to replace with sever-side session if upload_target_srl is not yet determined
*
- * @return void
+ * @return object
*/
- public function getFileList()
+ public function getFileList($editor_sequence = null, $upload_target_srl = null, $upload_target_type = null)
{
$file_list = [];
$attached_size = 0;
- $editor_sequence = intval(Context::get('editor_sequence'));
- $upload_target_srl = $_SESSION['upload_info'][$editor_sequence]->upload_target_srl ?? 0;
+ $editor_sequence = $editor_sequence ?? intval(Context::get('editor_sequence'));
+ $upload_target_srl = $upload_target_srl ?? $_SESSION['upload_info'][$editor_sequence]->upload_target_srl ?? 0;
// Get uploaded files
if($upload_target_srl)
{
- $oDocument = DocumentModel::getDocument($upload_target_srl);
+ if (!$upload_target_type || $upload_target_type === 'document')
+ {
+ $oDocument = DocumentModel::getDocument($upload_target_srl);
+ }
+ else
+ {
+ $oDocument = null;
+ }
// Check permissions of the comment
- if(!$oDocument->isExists())
+ if(!$oDocument || !$oDocument->isExists())
{
- $oComment = CommentModel::getComment($upload_target_srl);
- if($oComment->isExists())
+ if (!$upload_target_type || $upload_target_type === 'comment')
{
- if(!$oComment->isAccessible())
+ $oComment = CommentModel::getComment($upload_target_srl);
+ if($oComment->isExists())
{
- throw new Rhymix\Framework\Exceptions\NotPermitted;
+ if(!$oComment->isAccessible())
+ {
+ throw new Rhymix\Framework\Exceptions\NotPermitted;
+ }
+ $oDocument = DocumentModel::getDocument($oComment->get('document_srl'));
}
- $oDocument = DocumentModel::getDocument($oComment->get('document_srl'));
}
}
// Check permissions of the document
- if($oDocument->isExists() && !$oDocument->isAccessible())
+ if($oDocument && $oDocument->isExists() && !$oDocument->isAccessible())
{
throw new Rhymix\Framework\Exceptions\NotPermitted;
}
// Check permissions of the module
- if($module_srl = isset($oComment) ? $oComment->get('module_srl') : $oDocument->get('module_srl'))
+ $module_srl = isset($oComment) ? $oComment->get('module_srl') : ($oDocument ? $oDocument->get('module_srl') : 0);
+ if ($module_srl)
{
$module_info = ModuleModel::getModuleInfoByModuleSrl($module_srl);
if(empty($module_info->module_srl))
@@ -96,44 +107,49 @@ class FileModel extends File
}
}
- // Set output
- $this->add('files', $file_list);
- $this->add('attached_size', FileHandler::filesize($attached_size));
- $this->add('editor_sequence', $editor_sequence);
- $this->add('upload_target_srl', $upload_target_srl);
+ // Initialize return value
+ $result = new \stdClass;
+ $result->files = $file_list;
+ $result->editor_sequence = $editor_sequence;
+ $result->upload_target_srl = $upload_target_srl;
+ $result->upload_status = self::getUploadStatus($attached_size);
// Set upload config
$upload_config = self::getUploadConfig();
+ $result->attached_size = FileHandler::filesize($attached_size);
+ $result->left_size = max(0, ($upload_config->allowed_attach_size * 1024 * 1024) - $attached_size);
if($this->user->isAdmin())
{
- $this->add('allowed_filesize', sprintf('%s (%s)', lang('common.unlimited'), lang('common.admin')));
- $this->add('allowed_attach_size', sprintf('%s (%s)', lang('common.unlimited'), lang('common.admin')));
- $this->add('allowed_extensions', []);
+ $result->allowed_filesize = sprintf('%s (%s)', lang('common.unlimited'), lang('common.admin'));
+ $result->allowed_attach_size = sprintf('%s (%s)', lang('common.unlimited'), lang('common.admin'));
+ $result->allowed_extensions = [];
}
else
{
- $this->add('allowed_filesize', FileHandler::filesize($upload_config->allowed_filesize * 1024 * 1024));
- $this->add('allowed_attach_size', FileHandler::filesize($upload_config->allowed_attach_size * 1024 * 1024));
- $this->add('allowed_extensions', $upload_config->allowed_extensions);
+ $result->allowed_filesize = FileHandler::filesize($upload_config->allowed_filesize * 1024 * 1024);
+ $result->allowed_attach_size = FileHandler::filesize($upload_config->allowed_attach_size * 1024 * 1024);
+ $result->allowed_extensions = $upload_config->allowed_extensions;
}
-
if(!$this->user->isAdmin())
{
if (isset($_SESSION['upload_info'][$editor_sequence]->allowed_filesize))
{
- $this->add('allowed_filesize', FileHandler::filesize($_SESSION['upload_info'][$editor_sequence]->allowed_filesize));
- $this->add('allowed_attach_size', FileHandler::filesize($_SESSION['upload_info'][$editor_sequence]->allowed_filesize));
+ $result->allowed_filesize = FileHandler::filesize($_SESSION['upload_info'][$editor_sequence]->allowed_filesize);
+ $result->allowed_attach_size = FileHandler::filesize($_SESSION['upload_info'][$editor_sequence]->allowed_filesize);
}
if (isset($_SESSION['upload_info'][$editor_sequence]->allowed_extensions))
{
- $this->add('allowed_extensions', $_SESSION['upload_info'][$editor_sequence]->allowed_extensions);
+ $result->allowed_extensions = $_SESSION['upload_info'][$editor_sequence]->allowed_extensions;
}
}
-
+ $result->allowed_filetypes = $upload_config->allowed_filetypes ?? null;
+
// for compatibility
- $this->add('allowed_filetypes', $upload_config->allowed_filetypes);
- $this->add('upload_status', self::getUploadStatus($attached_size));
- $this->add('left_size', $upload_config->allowed_attach_size * 1024 * 1024 - $attached_size);
+ foreach ($result as $key => $val)
+ {
+ $this->add($key, $val);
+ }
+ return $result;
}
/**