uploader.phtml 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. // @codingStandardsIgnoreFile
  7. /** @var $block \Magento\Cms\Block\Adminhtml\Wysiwyg\Images\Content\Uploader */
  8. $filters = $block->getConfig()->getFilters() ?? [];
  9. $allowedExtensions = [];
  10. foreach ($filters as $media_type) {
  11. $allowedExtensions = array_merge($allowedExtensions, array_map(function ($fileExt) {
  12. return ltrim($fileExt, '.*');
  13. }, $media_type['files']));
  14. }
  15. $resizeConfig = $block->getImageUploadConfigData()->getIsResizeEnabled()
  16. ? "{action: 'resize', maxWidth: "
  17. . $block->escapeHtml($block->getImageUploadMaxWidth())
  18. . ", maxHeight: "
  19. . $block->escapeHtml($block->getImageUploadMaxHeight())
  20. . "}"
  21. : "{action: 'resize'}";
  22. ?>
  23. <div id="<?= $block->getHtmlId() ?>" class="uploader">
  24. <span class="fileinput-button form-buttons">
  25. <span><?= $block->escapeHtml(__('Upload Images')) ?></span>
  26. <input class="fileupload" type="file" name="<?= $block->escapeHtmlAttr($block->getConfig()->getFileField()) ?>" data-url="<?= $block->escapeUrl($block->getConfig()->getUrl()) ?>" multiple>
  27. </span>
  28. <div class="clear"></div>
  29. <script type="text/x-magento-template" id="<?= $block->getHtmlId() ?>-template">
  30. <div id="<%- data.id %>" class="file-row">
  31. <span class="file-info"><%- data.name %> (<%- data.size %>)</span>
  32. <div class="progressbar-container">
  33. <div class="progressbar upload-progress" style="width: 0%;"></div>
  34. </div>
  35. <div class="clear"></div>
  36. </div>
  37. </script>
  38. <script>
  39. require([
  40. 'jquery',
  41. 'mage/template',
  42. 'Magento_Ui/js/lib/validation/validator',
  43. 'Magento_Ui/js/modal/alert',
  44. 'jquery/file-uploader',
  45. 'domReady!',
  46. 'mage/translate'
  47. ], function ($, mageTemplate, validator, uiAlert) {
  48. var maxFileSize = <?= $block->escapeJs($block->getFileSizeService()->getMaxFileSize()) ?>,
  49. allowedExtensions = '<?= $block->escapeHtml(implode(' ', $allowedExtensions)) ?>';
  50. $('#<?= $block->getHtmlId() ?> .fileupload').fileupload({
  51. dataType: 'json',
  52. formData: {
  53. isAjax: 'true',
  54. form_key: FORM_KEY
  55. },
  56. sequentialUploads: true,
  57. acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
  58. allowedExtensions: allowedExtensions,
  59. maxFileSize: maxFileSize,
  60. dropZone: $('#<?= $block->getHtmlId() ?>').closest('[role="dialog"]'),
  61. add: function (e, data) {
  62. var progressTmpl = mageTemplate('#<?= $block->getHtmlId() ?>-template'),
  63. fileSize,
  64. tmpl,
  65. validationResult;
  66. data.files = data.files.filter(function (file) {
  67. fileSize = typeof file.size == "undefined" ?
  68. $.mage.__('We could not detect a size.') :
  69. byteConvert(file.size);
  70. if (maxFileSize) {
  71. validationResult = validator('validate-max-size', file.size, maxFileSize);
  72. if (!validationResult.passed) {
  73. uiAlert({
  74. content: validationResult.message
  75. });
  76. return false;
  77. }
  78. }
  79. if (allowedExtensions) {
  80. validationResult = validator('validate-file-type', file.name, allowedExtensions);
  81. if (!validationResult.passed) {
  82. uiAlert({
  83. content: validationResult.message
  84. });
  85. return false;
  86. }
  87. }
  88. data.fileId = Math.random().toString(36).substr(2, 9);
  89. tmpl = progressTmpl({
  90. data: {
  91. name: file.name,
  92. size: fileSize,
  93. id: data.fileId
  94. }
  95. });
  96. $(tmpl).data('image', data).appendTo('#<?= $block->getHtmlId() ?>');
  97. return true;
  98. });
  99. if (data.files.length) {
  100. $(this).fileupload('process', data).done(function () {
  101. data.submit();
  102. });
  103. }
  104. },
  105. done: function (e, data) {
  106. var progressSelector = '#' + data.fileId + ' .progressbar-container .progressbar';
  107. var tempErrorMessage = document.createElement("div");
  108. $(progressSelector).css('width', '100%');
  109. $('[data-action="show-error"]').children(".message").remove();
  110. if (data.result && !data.result.hasOwnProperty('errorcode')) {
  111. $(progressSelector).removeClass('upload-progress').addClass('upload-success');
  112. } else {
  113. tempErrorMessage.className = "message message-warning warning";
  114. tempErrorMessage.innerHTML = data.result.error;
  115. $('[data-action="show-error"]').append(tempErrorMessage);
  116. $(progressSelector).removeClass('upload-progress').addClass('upload-failure');
  117. }
  118. },
  119. progress: function (e, data) {
  120. var progress = parseInt(data.loaded / data.total * 100, 10);
  121. var progressSelector = '#' + data.fileId + ' .progressbar-container .progressbar';
  122. $(progressSelector).css('width', progress + '%');
  123. },
  124. fail: function (e, data) {
  125. var progressSelector = '#' + data.fileId + ' .progressbar-container .progressbar';
  126. $(progressSelector).removeClass('upload-progress').addClass('upload-failure');
  127. }
  128. });
  129. $('#<?= $block->getHtmlId() ?> .fileupload').fileupload('option', {
  130. process: [{
  131. action: 'load',
  132. fileTypes: /^image\/(gif|jpeg|png)$/,
  133. maxFileSize: <?= (int) $block->getFileSizeService()->getMaxFileSize() ?> * 10
  134. },
  135. <?= /* @noEscape */ $resizeConfig ?>,
  136. {
  137. action: 'save'
  138. }]
  139. });
  140. });
  141. </script>
  142. </div>