180 lines
3.8 KiB
Lua
180 lines
3.8 KiB
Lua
-- session.lua
|
|
|
|
function session_set(key, value)
|
|
__response.session = __response.session or {}
|
|
__response.session[key] = value
|
|
if __ctx.session and __ctx.session.data then
|
|
__ctx.session.data[key] = value
|
|
end
|
|
end
|
|
|
|
function session_get(key)
|
|
return __ctx.session and __ctx.session.data and __ctx.session.data[key]
|
|
end
|
|
|
|
function session_id()
|
|
return __ctx.session and __ctx.session.id
|
|
end
|
|
|
|
function session_get_all()
|
|
if __ctx.session and __ctx.session.data then
|
|
local copy = {}
|
|
for k, v in pairs(__ctx.session.data) do
|
|
copy[k] = v
|
|
end
|
|
return copy
|
|
end
|
|
return {}
|
|
end
|
|
|
|
function session_delete(key)
|
|
__response.session = __response.session or {}
|
|
__response.session[key] = "__DELETE__"
|
|
if __ctx.session and __ctx.session.data then
|
|
__ctx.session.data[key] = nil
|
|
end
|
|
end
|
|
|
|
function session_clear()
|
|
__response.session = {__clear_all = true}
|
|
if __ctx.session and __ctx.session.data then
|
|
for k in pairs(__ctx.session.data) do
|
|
__ctx.session.data[k] = nil
|
|
end
|
|
end
|
|
end
|
|
|
|
function session_flash(key, value)
|
|
__response.flash = __response.flash or {}
|
|
__response.flash[key] = value
|
|
end
|
|
|
|
function session_get_flash(key)
|
|
-- Check current flash data first
|
|
if __response.flash and __response.flash[key] ~= nil then
|
|
return __response.flash[key]
|
|
end
|
|
|
|
-- Check session flash data
|
|
if __ctx.session and __ctx.session.flash and __ctx.session.flash[key] ~= nil then
|
|
return __ctx.session.flash[key]
|
|
end
|
|
|
|
return nil
|
|
end
|
|
|
|
function session_has_flash(key)
|
|
-- Check current flash
|
|
if __response.flash and __response.flash[key] ~= nil then
|
|
return true
|
|
end
|
|
|
|
-- Check session flash
|
|
if __ctx.session and __ctx.session.flash and __ctx.session.flash[key] ~= nil then
|
|
return true
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
function session_get_all_flash()
|
|
local flash = {}
|
|
|
|
-- Add session flash data first
|
|
if __ctx.session and __ctx.session.flash then
|
|
for k, v in pairs(__ctx.session.flash) do
|
|
flash[k] = v
|
|
end
|
|
end
|
|
|
|
-- Add current response flash (overwrites session flash if same key)
|
|
if __response.flash then
|
|
for k, v in pairs(__response.flash) do
|
|
flash[k] = v
|
|
end
|
|
end
|
|
|
|
return flash
|
|
end
|
|
|
|
function session_flash_now(key, value)
|
|
-- Flash for current request only (not persisted)
|
|
_G._current_flash = _G._current_flash or {}
|
|
_G._current_flash[key] = value
|
|
end
|
|
|
|
function session_get_flash_now(key)
|
|
return _G._current_flash and _G._current_flash[key]
|
|
end
|
|
|
|
-- ======================================================================
|
|
-- FLASH HELPER FUNCTIONS
|
|
-- ======================================================================
|
|
|
|
function flash_success(message)
|
|
session_flash("success", message)
|
|
end
|
|
|
|
function flash_error(message)
|
|
session_flash("error", message)
|
|
end
|
|
|
|
function flash_warning(message)
|
|
session_flash("warning", message)
|
|
end
|
|
|
|
function flash_info(message)
|
|
session_flash("info", message)
|
|
end
|
|
|
|
function flash_message(type, message)
|
|
session_flash(type, message)
|
|
end
|
|
|
|
-- Get flash messages by type
|
|
function get_flash_success()
|
|
return session_get_flash("success")
|
|
end
|
|
|
|
function get_flash_error()
|
|
return session_get_flash("error")
|
|
end
|
|
|
|
function get_flash_warning()
|
|
return session_get_flash("warning")
|
|
end
|
|
|
|
function get_flash_info()
|
|
return session_get_flash("info")
|
|
end
|
|
|
|
-- Check if flash messages exist
|
|
function has_flash_success()
|
|
return session_has_flash("success")
|
|
end
|
|
|
|
function has_flash_error()
|
|
return session_has_flash("error")
|
|
end
|
|
|
|
function has_flash_warning()
|
|
return session_has_flash("warning")
|
|
end
|
|
|
|
function has_flash_info()
|
|
return session_has_flash("info")
|
|
end
|
|
|
|
function redirect_with_flash(url, type, message, status)
|
|
session_flash(type or "info", message)
|
|
http_redirect(url, status)
|
|
end
|
|
|
|
function redirect_with_success(url, message, status)
|
|
redirect_with_flash(url, "success", message, status)
|
|
end
|
|
|
|
function redirect_with_error(url, message, status)
|
|
redirect_with_flash(url, "error", message, status)
|
|
end
|