diff --git a/Controller.js b/Controller.js index de41b0c..1534bd5 100644 --- a/Controller.js +++ b/Controller.js @@ -29,25 +29,32 @@ const self = this; - if (!form.querySelector('input[type=file]')|| !document.querySelector('input[type=file][form=' + form.id + ']')) { + if (!form.querySelector('input[type=file]') || !document.querySelector('input[type=file][form=' + form.id + ']')) { try { // Inject media upload into form view - this.app.uiManager.getFormManager().get(form.id).injectSubmit(function (e, requestId, requestGroup) + this.app.uiManager.getFormManager().get(form.id).injectSubmit(function (e, requestId) { /** global: jsOMS */ - let fileFields = e.querySelectorAll('input[type=file]'), + let fileFields = document.querySelectorAll( + '#' + e.id + ' input[type=file], ' + + 'input[form=' + e.id + '][type=file]' + ), uploader = new jsOMS.Modules.Models.Media.Upload(self.app.responseManager); uploader.setSuccess(e.id, function (type, response) { - e.querySelector('input[type=file]+input[type=hidden]').value = JSON.stringify(response.uploads); - self.app.eventManager.trigger(requestGroup, requestId); + document.querySelector('input[form=' + e.id + '][type=file]+input[form=' + e.id + '][type=hidden]').value = JSON.stringify(response); + self.app.eventManager.trigger(form.id, requestId); }); uploader.setUri('{/base}/{/lang}/api/media'); - for (let i = 0; i < fileFields.length; i++) { - for (let j = 0; j < fileFields[i].files.length; j++) { + const length = fileFields.length; + let fileLength = 0; + + for (let i = 0; i < length; i++) { + fileLength = fileFields[i].files.length; + for (let j = 0; j < fileLength; j++) { uploader.addFile(fileFields[i].files[j]); } } diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 71cc85e..0d2d22b 100644 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -61,7 +61,7 @@ class ApiController extends Controller $uploads = $this->uploadFiles( $request->getFiles(), $request->getHeader()->getAccount(), - (string) ($request->getData('path') ?? __DIR__ . '/../../Modules/Media/Files') + (string) ($request->getData('path') ?? __DIR__ . '/../../../Modules/Media/Files') ); $ids = []; @@ -70,7 +70,7 @@ class ApiController extends Controller } $response->getHeader()->set('Content-Type', MimeType::M_JSON . '; charset=utf-8', true); - $response->set($request->getUri()->__toString(), [['uploads' => $ids, 'type' => 'UI']]); + $response->set($request->getUri()->__toString(), $ids); } /** @@ -117,7 +117,7 @@ class ApiController extends Controller public static function createMediaPath(string $basePath = 'Modules/Media/Files') : string { - $rndPath = str_pad(dechex(rand(0, 65535)), 4, '0', STR_PAD_LEFT); + $rndPath = \str_pad(\dechex(\mt_rand(0, 65535)), 4, '0', STR_PAD_LEFT); return $basePath . '/' . $rndPath[0] . $rndPath[1] . '/' . $rndPath[2] . $rndPath[3]; } diff --git a/Models/Upload.js b/Models/Upload.js index 6170e1a..07f3a5f 100644 --- a/Models/Upload.js +++ b/Models/Upload.js @@ -66,9 +66,9 @@ { // TODO: validate file type + file size - let request = new jsOMS.Message.Request.Request(), - formData = new FormData(), - self = this; + const request = new jsOMS.Message.Request.Request(), + formData = new FormData(), + self = this; this.files.forEach(function (element, index) { @@ -76,23 +76,22 @@ }); request.setData(formData); - request.setType(jsOMS.Message.Request.RequestType.RAW); + request.setType(jsOMS.Message.Request.RequestType.FILE); request.setUri(this.uri); request.setMethod(jsOMS.Message.Request.RequestMethod.POST); request.setRequestHeader('HTTP_X_REQUESTED_WITH', 'XMLHttpRequest'); request.setSuccess(function (xhr) { try { - let response = JSON.parse(xhr.response); + const response = JSON.parse(xhr.response); - for (let k = 0; k < response.length; ++k) { - if (!self.success[formId]) { - self.responseManager.run(response[k].type, response[k]); - } else { - self.success[formId](response[k].type, response[k]); - } + if (!self.success[formId]) { + self.responseManager.run(null, response); + } else { + self.success[formId](null, response); } } catch (e) { + console.log(e); jsOMS.Log.Logger.instance.error(e); jsOMS.Log.Logger.instance.error('Invalid media upload response: ' + xhr.response); } diff --git a/Models/UploadFile.php b/Models/UploadFile.php index a6b49c7..67bbdf7 100644 --- a/Models/UploadFile.php +++ b/Models/UploadFile.php @@ -156,7 +156,7 @@ class UploadFile } if (!\is_dir($path)) { - Directory::create($path, 0655, true); + Directory::create($path, 0755, true); } if (!\is_uploaded_file($f['tmp_name'])) { diff --git a/Theme/Backend/Components/Upload/upload.tpl.php b/Theme/Backend/Components/Upload/upload.tpl.php index a9eee90..93dabf9 100644 --- a/Theme/Backend/Components/Upload/upload.tpl.php +++ b/Theme/Backend/Components/Upload/upload.tpl.php @@ -2,7 +2,7 @@

getHtml('Media') ?>

-
+
@@ -14,7 +14,7 @@
- +