Packages
phoenix_kit
1.7.94
1.7.208
1.7.207
1.7.206
1.7.205
1.7.204
1.7.203
1.7.202
1.7.201
1.7.200
1.7.199
1.7.198
1.7.197
1.7.196
1.7.194
1.7.193
1.7.192
1.7.191
1.7.190
1.7.189
1.7.187
1.7.186
1.7.185
1.7.184
1.7.183
1.7.182
1.7.181
1.7.180
1.7.179
1.7.178
1.7.177
1.7.176
1.7.175
1.7.174
1.7.173
1.7.172
1.7.171
1.7.170
1.7.169
1.7.168
1.7.167
1.7.166
1.7.165
1.7.164
1.7.162
1.7.161
1.7.160
1.7.159
1.7.157
1.7.156
1.7.155
1.7.154
1.7.153
1.7.152
1.7.151
1.7.150
1.7.149
1.7.146
1.7.145
1.7.144
1.7.143
1.7.138
1.7.133
1.7.132
1.7.131
1.7.130
1.7.128
1.7.126
1.7.125
1.7.121
1.7.120
1.7.119
1.7.118
1.7.117
1.7.116
1.7.115
1.7.114
1.7.113
1.7.112
1.7.111
1.7.110
1.7.109
1.7.108
1.7.107
1.7.106
1.7.105
1.7.104
1.7.103
1.7.102
1.7.101
1.7.100
1.7.99
1.7.98
1.7.97
1.7.96
1.7.95
1.7.94
1.7.93
1.7.92
1.7.91
1.7.90
1.7.89
1.7.88
1.7.87
1.7.86
1.7.85
1.7.84
1.7.83
1.7.82
1.7.81
1.7.80
1.7.79
1.7.78
1.7.77
1.7.76
1.7.75
1.7.74
1.7.71
1.7.70
1.7.69
1.7.66
1.7.65
1.7.64
1.7.63
1.7.62
1.7.61
1.7.59
1.7.58
1.7.57
1.7.56
1.7.55
1.7.54
1.7.53
1.7.52
1.7.51
1.7.49
1.7.44
1.7.43
1.7.42
1.7.41
1.7.39
1.7.38
1.7.37
1.7.36
1.7.34
1.7.33
1.7.31
1.7.30
1.7.29
1.7.28
1.7.27
1.7.26
1.7.25
1.7.24
1.7.23
1.7.22
1.7.21
1.7.20
1.7.19
1.7.18
1.7.17
1.7.16
1.7.15
1.7.14
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.20
1.6.19
1.6.18
1.6.17
1.6.16
1.6.15
1.6.14
1.6.13
1.6.12
1.6.11
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.5.2
1.5.1
1.5.0
1.4.9
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.10
1.2.9
1.2.8
1.2.7
1.2.5
1.2.4
1.2.2
1.2.1
1.2.0
1.1.0
1.0.0
A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more
Current section
Files
Jump to
Current section
Files
lib/modules/maintenance/maintenance.ex
defmodule PhoenixKit.Modules.Maintenance do
@moduledoc """
Maintenance Mode module for PhoenixKit.
This module provides a system-wide maintenance mode that shows a
maintenance page to all non-admin users while allowing
admins and owners to access the site normally.
## Settings
The module uses the following settings stored in the database:
- `maintenance_module_enabled` - Boolean to enable/disable the module settings page (default: false)
- `maintenance_enabled` - Boolean to enable/disable maintenance mode (default: false)
- `maintenance_header` - Main heading text (default: "Maintenance Mode")
- `maintenance_subtext` - Descriptive subtext (default: "We'll be back soon")
## Usage
# Check if module is enabled (settings page accessible)
if PhoenixKit.Modules.Maintenance.module_enabled?() do
# Show settings page
end
# Check if maintenance mode is enabled
if PhoenixKit.Modules.Maintenance.enabled?() do
# Show maintenance page to non-admin users
end
# Enable module (makes settings page accessible)
PhoenixKit.Modules.Maintenance.enable_module()
# Enable maintenance mode (shows maintenance page to users)
PhoenixKit.Modules.Maintenance.enable_system()
# Get module configuration
config = PhoenixKit.Modules.Maintenance.get_config()
# => %{module_enabled: true, enabled: true, header: "...", subtext: "..."}
"""
use PhoenixKit.Module
alias PhoenixKit.Dashboard.Tab
alias PhoenixKit.Settings
@default_header "Maintenance Mode"
@default_subtext "We'll be back soon. Our team is working hard to bring you something amazing!"
@doc """
Checks if the Maintenance module is enabled (settings page accessible).
## Examples
iex> PhoenixKit.Modules.Maintenance.module_enabled?()
false
"""
def module_enabled? do
Settings.get_boolean_setting("maintenance_module_enabled", false)
end
@doc """
Enables the Maintenance module (makes settings page accessible).
"""
def enable_module do
Settings.update_boolean_setting("maintenance_module_enabled", true)
end
@doc """
Disables the Maintenance module (hides settings page).
Also automatically disables maintenance mode to prevent users from being locked out.
"""
def disable_module do
# First disable maintenance mode
disable_system()
# Then disable the module (hides settings page)
Settings.update_boolean_setting("maintenance_module_enabled", false)
end
@impl PhoenixKit.Module
@doc """
Checks if Maintenance mode is enabled.
## Examples
iex> PhoenixKit.Modules.Maintenance.enabled?()
false
"""
def enabled? do
Settings.get_boolean_setting("maintenance_enabled", false)
end
@impl PhoenixKit.Module
@doc """
Enables the Maintenance mode.
When enabled, all non-admin users will see the maintenance page.
"""
def enable_system do
Settings.update_boolean_setting("maintenance_enabled", true)
end
@impl PhoenixKit.Module
@doc """
Disables the Maintenance mode.
When disabled, all users can access the site normally.
"""
def disable_system do
Settings.update_boolean_setting("maintenance_enabled", false)
end
@doc """
Gets the header text for the maintenance page.
## Examples
iex> PhoenixKit.Modules.Maintenance.get_header()
"Maintenance Mode"
"""
def get_header do
Settings.get_setting_cached("maintenance_header", @default_header)
end
@doc """
Updates the header text for the maintenance page.
"""
def update_header(header) when is_binary(header) do
Settings.update_setting("maintenance_header", header)
end
@doc """
Gets the subtext for the maintenance page.
## Examples
iex> PhoenixKit.Modules.Maintenance.get_subtext()
"We'll be back soon..."
"""
def get_subtext do
Settings.get_setting_cached("maintenance_subtext", @default_subtext)
end
@doc """
Updates the subtext for the maintenance page.
"""
def update_subtext(subtext) when is_binary(subtext) do
Settings.update_setting("maintenance_subtext", subtext)
end
@impl PhoenixKit.Module
@doc """
Gets the configuration for the Maintenance module.
Returns a map with:
- `module_enabled` - Boolean indicating if module settings page is accessible
- `enabled` - Boolean indicating if maintenance mode is enabled
- `header` - Main heading text
- `subtext` - Descriptive subtext
## Examples
iex> PhoenixKit.Modules.Maintenance.get_config()
%{
module_enabled: false,
enabled: false,
header: "Maintenance Mode",
subtext: "We'll be back soon..."
}
"""
def get_config do
%{
module_enabled: module_enabled?(),
enabled: enabled?(),
header: get_header(),
subtext: get_subtext()
}
end
# ============================================================================
# Module Behaviour Callbacks
# ============================================================================
@impl PhoenixKit.Module
def module_key, do: "maintenance"
@impl PhoenixKit.Module
def module_name, do: "Maintenance"
@impl PhoenixKit.Module
def permission_metadata do
%{
key: "maintenance",
label: "Maintenance",
icon: "hero-wrench-screwdriver",
description: "Maintenance mode and under-construction pages"
}
end
@impl PhoenixKit.Module
def settings_tabs do
[
Tab.new!(
id: :admin_settings_maintenance,
label: "Maintenance",
icon: "hero-wrench-screwdriver",
path: "maintenance",
priority: 932,
level: :admin,
parent: :admin_settings,
permission: "maintenance"
)
]
end
end