Packages

phoenix_kit

1.2.8
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
phoenix_kit lib phoenix_kit_web live modules_live.ex
Raw

lib/phoenix_kit_web/live/modules_live.ex

defmodule PhoenixKitWeb.Live.ModulesLive do
use PhoenixKitWeb, :live_view
alias PhoenixKit.EmailTracking
alias PhoenixKit.ReferralCodes
alias PhoenixKit.Settings
alias PhoenixKit.Utils.Routes
def mount(_params, session, socket) do
# Get current path for navigation
current_path = get_current_path(socket, session)
# Get project title from settings
project_title = Settings.get_setting("project_title", "PhoenixKit")
# Load module states
referral_codes_config = ReferralCodes.get_config()
email_tracking_config = EmailTracking.get_config()
socket =
socket
|> assign(:current_path, current_path)
|> assign(:page_title, "Modules")
|> assign(:project_title, project_title)
|> assign(:referral_codes_enabled, referral_codes_config.enabled)
|> assign(:referral_codes_required, referral_codes_config.required)
|> assign(:max_uses_per_code, referral_codes_config.max_uses_per_code)
|> assign(:max_codes_per_user, referral_codes_config.max_codes_per_user)
|> assign(:email_tracking_enabled, email_tracking_config.enabled)
|> assign(:email_tracking_save_body, email_tracking_config.save_body)
|> assign(:email_tracking_ses_events, email_tracking_config.ses_events)
|> assign(:email_tracking_retention_days, email_tracking_config.retention_days)
{:ok, socket}
end
def handle_event("toggle_referral_codes", _params, socket) do
# Since we're sending "toggle", we just flip the current state
new_enabled = !socket.assigns.referral_codes_enabled
result =
if new_enabled do
ReferralCodes.enable_system()
else
ReferralCodes.disable_system()
end
case result do
{:ok, _setting} ->
socket =
socket
|> assign(:referral_codes_enabled, new_enabled)
|> put_flash(
:info,
if(new_enabled,
do: "Referral codes system enabled",
else: "Referral codes system disabled"
)
)
{:noreply, socket}
{:error, _changeset} ->
socket = put_flash(socket, :error, "Failed to update referral codes system")
{:noreply, socket}
end
end
def handle_event("toggle_referral_codes_required", _params, socket) do
# Since we're sending "toggle", we just flip the current state
new_required = !socket.assigns.referral_codes_required
result = ReferralCodes.set_required(new_required)
case result do
{:ok, _setting} ->
socket =
socket
|> assign(:referral_codes_required, new_required)
|> put_flash(
:info,
if(new_required,
do: "Referral codes are now required",
else: "Referral codes are now optional"
)
)
{:noreply, socket}
{:error, _changeset} ->
socket = put_flash(socket, :error, "Failed to update referral codes requirement setting")
{:noreply, socket}
end
end
def handle_event("update_max_uses_per_code", %{"max_uses_per_code" => value}, socket) do
case Integer.parse(value) do
{max_uses, _} when max_uses > 0 and max_uses <= 10_000 ->
case ReferralCodes.set_max_uses_per_code(max_uses) do
{:ok, _setting} ->
socket =
socket
|> assign(:max_uses_per_code, max_uses)
|> put_flash(:info, "Maximum uses per code updated to #{max_uses}")
{:noreply, socket}
{:error, _changeset} ->
socket = put_flash(socket, :error, "Failed to update maximum uses per code")
{:noreply, socket}
end
_ ->
socket = put_flash(socket, :error, "Please enter a valid number between 1 and 10,000")
{:noreply, socket}
end
end
def handle_event("update_max_codes_per_user", %{"max_codes_per_user" => value}, socket) do
case Integer.parse(value) do
{max_codes, _} when max_codes > 0 and max_codes <= 1000 ->
case ReferralCodes.set_max_codes_per_user(max_codes) do
{:ok, _setting} ->
socket =
socket
|> assign(:max_codes_per_user, max_codes)
|> put_flash(:info, "Maximum codes per user updated to #{max_codes}")
{:noreply, socket}
{:error, _changeset} ->
socket = put_flash(socket, :error, "Failed to update maximum codes per user")
{:noreply, socket}
end
_ ->
socket = put_flash(socket, :error, "Please enter a valid number between 1 and 1,000")
{:noreply, socket}
end
end
def handle_event("toggle_email_tracking", _params, socket) do
# Toggle email tracking system
new_enabled = !socket.assigns.email_tracking_enabled
result =
if new_enabled do
EmailTracking.enable_system()
else
EmailTracking.disable_system()
end
case result do
{:ok, _setting} ->
socket =
socket
|> assign(:email_tracking_enabled, new_enabled)
|> put_flash(
:info,
if(new_enabled,
do: "Email tracking system enabled",
else: "Email tracking system disabled"
)
)
{:noreply, socket}
{:error, _changeset} ->
socket = put_flash(socket, :error, "Failed to update email tracking system")
{:noreply, socket}
end
end
def handle_event("toggle_email_tracking_save_body", _params, socket) do
# Toggle email body saving
new_save_body = !socket.assigns.email_tracking_save_body
result = EmailTracking.set_save_body(new_save_body)
case result do
{:ok, _setting} ->
socket =
socket
|> assign(:email_tracking_save_body, new_save_body)
|> put_flash(
:info,
if(new_save_body,
do: "Email body saving enabled",
else: "Email body saving disabled"
)
)
{:noreply, socket}
{:error, _changeset} ->
socket = put_flash(socket, :error, "Failed to update email body saving setting")
{:noreply, socket}
end
end
def handle_event("toggle_email_tracking_ses_events", _params, socket) do
# Toggle AWS SES events tracking
new_ses_events = !socket.assigns.email_tracking_ses_events
result = EmailTracking.set_ses_events(new_ses_events)
case result do
{:ok, _setting} ->
socket =
socket
|> assign(:email_tracking_ses_events, new_ses_events)
|> put_flash(
:info,
if(new_ses_events,
do: "AWS SES events tracking enabled",
else: "AWS SES events tracking disabled"
)
)
{:noreply, socket}
{:error, _changeset} ->
socket = put_flash(socket, :error, "Failed to update AWS SES events tracking")
{:noreply, socket}
end
end
def handle_event("update_email_tracking_retention", %{"retention_days" => value}, socket) do
case Integer.parse(value) do
{retention_days, _} when retention_days > 0 and retention_days <= 365 ->
case EmailTracking.set_retention_days(retention_days) do
{:ok, _setting} ->
socket =
socket
|> assign(:email_tracking_retention_days, retention_days)
|> put_flash(:info, "Email retention period updated to #{retention_days} days")
{:noreply, socket}
{:error, _changeset} ->
socket = put_flash(socket, :error, "Failed to update email retention period")
{:noreply, socket}
end
_ ->
socket = put_flash(socket, :error, "Please enter a valid number between 1 and 365")
{:noreply, socket}
end
end
defp get_current_path(_socket, _session) do
# For ModulesLive, always return modules path
Routes.path("/admin/modules")
end
end