module_files_act_list.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package modules
  2. import (
  3. "fmt"
  4. "html"
  5. "os"
  6. "path/filepath"
  7. "strings"
  8. "golang-fave/engine/assets"
  9. "golang-fave/engine/builder"
  10. "golang-fave/engine/utils"
  11. "golang-fave/engine/wrapper"
  12. )
  13. func (this *Modules) RegisterAction_FilesList() *Action {
  14. return this.newAction(AInfo{
  15. Mount: "files-list",
  16. WantAdmin: true,
  17. }, func(wrap *wrapper.Wrapper) {
  18. pf_path := utils.SafeFilePath(utils.Trim(wrap.R.FormValue("path")))
  19. // Set path
  20. wrap.Write(`fave.FilesManagerSetPath('` + pf_path + `');`)
  21. // Render table
  22. start_dir := strings.Join([]string{wrap.DHtdocs, "public"}, string(os.PathSeparator)) + pf_path + "*"
  23. str_dirs := ""
  24. str_files := ""
  25. if files, err := filepath.Glob(start_dir); err == nil {
  26. for _, file := range files {
  27. file_name := file
  28. i := strings.LastIndex(file_name, string(os.PathSeparator))
  29. if i != -1 {
  30. file_name = file_name[i+1:]
  31. }
  32. if utils.IsDir(file) {
  33. actions := builder.DataTableAction(&[]builder.DataTableActionRow{
  34. {
  35. Icon: assets.SysSvgIconView,
  36. Href: "/public" + pf_path + file_name + "/",
  37. Hint: "View",
  38. Target: "_blank",
  39. },
  40. {
  41. Icon: assets.SysSvgIconRemove,
  42. Href: "javascript:fave.FilesManagerRemoveFolder(\\'" + pf_path + file_name + "\\',\\'Are you sure want to delete folder?\\');",
  43. Hint: "Delete",
  44. Classes: "delete",
  45. },
  46. })
  47. str_dirs += `<tr class="dir"><td class="col_name"><a href="javascript:fave.FilesManagerLoadData(\'` + pf_path + file_name + `/` + `\');"><span class="text-dotted">` + html.EscapeString(file_name) + `</span></a></td><td class="col_type"><b>DIR</b></td><td class="col_action">` + actions + `</td></tr>`
  48. } else {
  49. actions := builder.DataTableAction(&[]builder.DataTableActionRow{
  50. {
  51. Icon: assets.SysSvgIconView,
  52. Href: "/public" + pf_path + file_name,
  53. Hint: "View",
  54. Target: "_blank",
  55. },
  56. {
  57. Icon: assets.SysSvgIconRemove,
  58. Href: "javascript:fave.FilesManagerRemoveFile(\\'" + pf_path + file_name + "\\',\\'Are you sure want to delete file?\\');",
  59. Hint: "Delete",
  60. Classes: "delete",
  61. },
  62. })
  63. size_value := float64(utils.GetFileSize(file))
  64. size_text := "Bytes"
  65. if size_value > 1024 {
  66. size_value = size_value / 1024
  67. size_text = "Kb"
  68. }
  69. if size_value > 1024 {
  70. size_value = size_value / 1024
  71. size_text = "Mb"
  72. }
  73. if size_value > 1024 {
  74. size_value = size_value / 1024
  75. size_text = "Gb"
  76. }
  77. str_size := fmt.Sprintf("%5.2f %s", size_value, size_text)
  78. str_files += `<tr class="file"><td class="col_name"><span class="text-dotted">` + html.EscapeString(file_name) + `</span></td><td class="col_type">` + str_size + `</td><td class="col_action">` + actions + `</td></tr>`
  79. }
  80. }
  81. }
  82. if pf_path != "/" {
  83. str_dirs = `<tr class="dir"><td class="col_name"><a href="javascript:fave.FilesManagerLoadDataUp(\'` + pf_path + `\');">..</a></td><td class="col_type">&nbsp;</td><td class="col_action">&nbsp;</td></tr>` + str_dirs
  84. }
  85. table := `<table class="table data-table table-striped table-bordered table-hover table_fm_files"><thead><tr><th class="col_name">File name</th><th class="col_type">Size</th><th class="col_action">Action</th></tr></thead><tbody>` + str_dirs + str_files + `</tbody></table>`
  86. wrap.Write(`$('#sys-modal-files-manager .dialog-data').html('` + table + `');`)
  87. // Enable buttons
  88. wrap.Write(`fave.FilesManagerEnableDisableButtons(false);`)
  89. })
  90. }