0200-domain-select.lua 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. return function(form, uci)
  2. local site_i18n = i18n 'gluon-site'
  3. local fs = require 'nixio.fs'
  4. local json = require 'jsonc'
  5. local site = require 'gluon.site'
  6. local selected_domain = uci:get('gluon', 'core', 'domain')
  7. local configured = uci:get_first('gluon-setup-mode','setup_mode', 'configured') == '1' or (selected_domain ~= site.default_domain())
  8. local function get_domain_list()
  9. local list = {}
  10. for domain_path in fs.glob('/lib/gluon/domains/*.json') do
  11. local domain_code = domain_path:match('([^/]+)%.json$')
  12. local domain = assert(json.load(domain_path))
  13. if not domain.hide_domain or (configured and domain.domain_code == selected_domain) then
  14. table.insert(list, {
  15. domain_code = domain_code,
  16. domain_name = domain.domain_names[domain_code],
  17. })
  18. end
  19. end
  20. table.sort(list, function(a, b) return a.domain_name < b.domain_name end)
  21. return list
  22. end
  23. local s = form:section(Section, nil, site_i18n.translate('gluon-config-mode:domain-select'))
  24. local o = s:option(ListValue, 'domain', site_i18n.translate('gluon-config-mode:domain'))
  25. if configured then
  26. o.default = selected_domain
  27. end
  28. for _, domain in ipairs(get_domain_list()) do
  29. o:value(domain.domain_code, domain.domain_name)
  30. end
  31. local domain_changed = false
  32. function o:write(data)
  33. if data ~= selected_domain then
  34. domain_changed = true
  35. uci:set('gluon', 'core', 'domain', data)
  36. end
  37. end
  38. local function reconfigure()
  39. if domain_changed then
  40. os.execute('gluon-reconfigure')
  41. end
  42. end
  43. return {'gluon', reconfigure}
  44. end