buildscriptform.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <?php
  2. $this->loadModel('file');
  3. $filesName = 'scriptFile';
  4. $labelsName = 'scriptName';
  5. $maxUploadSize = strtoupper(ini_get('upload_max_filesize'));
  6. $dangerFiles = 'php,py,js,go,sh,bat,lua,rb,tcl,pl';
  7. js::set('scriptDangerExtensions', ',' . $dangerFiles . ',');
  8. js::set('maxUploadSize', $maxUploadSize);
  9. ?>
  10. <div class="file-input-list" data-append-way="before" data-filedName="<?php echo $filesName;?>" data-provide="fileInputList" data-each-file-max-size="<?php echo $maxUploadSize; ?>" data-file-size-error="<?php echo sprintf($lang->file->errorFileSize, $maxUploadSize); ?>">
  11. <div class="file-input">
  12. <div class="file-input-edit input-group">
  13. <div class="input-group-cell"><i class="icon icon-paper-clip text-muted"></i></div>
  14. <input type="text" name="<?php echo $labelsName;?>[]" class="form-control file-editbox" placeholder="<?php echo $lang->file->title;?>">
  15. <div class="input-group-btn">
  16. <button type="button" class="btn btn-success file-name-confirm"><i class="icon icon-check"></i></button>
  17. <button type="button" class="btn btn-gray file-name-cancel"><i class="icon icon-close"></i></button>
  18. </div>
  19. </div>
  20. <div class="file-input-normal input-group">
  21. <div class="input-group-cell"><i class="icon icon-paper-clip text-muted"></i></div>
  22. <div class="input-group-cell">
  23. <span class="file-title"></span>
  24. <small class="file-size muted"></small>
  25. </div>
  26. <div class="input-group-btn">
  27. <button type="button" class="fileAction btn btn-link file-input-rename" title="<?php echo $lang->file->edit;?>"><i class='icon icon-pencil-alt'></i></button>
  28. <button type="button" class="fileAction btn btn-link file-input-delete" onclick="changeHidden()" title="<?php echo $lang->delete;?>"><i class='icon icon-trash'></i></button>
  29. </div>
  30. </div>
  31. <input type="file" name="<?php echo $filesName;?>[]" onchange="checkDangerExtensions(this)" />
  32. </div>
  33. <button type="button" class="btn btn-link file-input-btn"><i class="icon icon-plus"></i> <?php echo $lang->file->addFile;?></button> <small class="muted"><?php echo sprintf($lang->file->maxUploadSize, $maxUploadSize);?></small>
  34. <input type="file" id="file-input-multiple" />
  35. <input type='hidden' name='script' id='scriptContent' value=''>
  36. </div>
  37. <script>
  38. var totalSize = 0;
  39. maxUploadSize = unitConversion(maxUploadSize);
  40. /**
  41. * Conversion unit to byte.
  42. *
  43. * @param string $maxUploadSize
  44. * @access public
  45. * @return int
  46. */
  47. function unitConversion(maxUploadSize)
  48. {
  49. var sizeOfString = maxUploadSize;
  50. if(sizeOfString.indexOf('K') != -1) maxUploadSize = parseFloat(maxUploadSize) * 1024;
  51. if(sizeOfString.indexOf('M') != -1) maxUploadSize = parseFloat(maxUploadSize) * 1024 * 1024;
  52. if(sizeOfString.indexOf('G') != -1) maxUploadSize = parseFloat(maxUploadSize) * 1024 * 1024 * 1024;
  53. return parseFloat(maxUploadSize);
  54. }
  55. /**
  56. * Check danger extension and file size.
  57. *
  58. * @param object $file
  59. * @access public
  60. * @return void
  61. */
  62. function checkDangerExtensions(file)
  63. {
  64. var fileName = $(file).val();
  65. var index = fileName.lastIndexOf(".");
  66. var fileSize = $(file)[0].files[0].size;
  67. totalSize += fileSize;
  68. if(index >= 0)
  69. {
  70. extension = fileName.substr(index + 1);
  71. if(scriptDangerExtensions.lastIndexOf(',' + extension + ',') < 0)
  72. {
  73. alert(<?php echo json_encode($this->lang->file->dangerFile);?>);
  74. $(file).val('');
  75. $('.file-input-normal').last().remove()
  76. return false;
  77. }
  78. if(fileSize == 0)
  79. {
  80. alert(<?php echo json_encode($this->lang->file->fileContentEmpty);?>);
  81. $(file).val('');
  82. return false;
  83. }
  84. if(totalSize >= maxUploadSize)
  85. {
  86. alert(<?php echo json_encode(sprintf($lang->file->errorFileSize, $maxUploadSize));?>);
  87. totalSize -= fileSize;
  88. $(file).val('');
  89. return false;
  90. }
  91. }
  92. $('.autoScript .file-input-btn').addClass('hidden');
  93. $('.autoScript .muted').addClass('hide');
  94. /* read file. */
  95. var reader = new FileReader();
  96. reader.readAsText($(file)[0].files[0], "UTF-8");
  97. reader.onload = function(evt){
  98. var fileString = evt.target.result;
  99. $('#scriptContent').val(fileString);
  100. }
  101. }
  102. function changeHidden(){
  103. $('.autoScript .file-input-btn').removeClass('hidden');
  104. $('.autoScript .muted').removeClass('hide');
  105. }
  106. </script>
  107. <style>
  108. #file-input-multiple {display: none;}
  109. .file-input .file-editbox {max-width: 40%;}
  110. .file-input-list .input-group-btn {float: left}
  111. .fileAction {color: #0c64eb !important;}
  112. .backgroundColor {background: #eff5ff;}
  113. </style>