Packages
phoenix_kit
1.7.80
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/emails/web/email_tracking.ex
defmodule PhoenixKit.Modules.Emails.Web.EmailTracking do
@moduledoc """
LiveView for email tracking system settings and configuration.
This module provides a simplified interface for managing core email tracking
settings, offering quick toggles for essential email system features.
## Features
- **System Toggle**: Enable/disable email tracking system
- **Body Storage**: Control whether full email bodies are saved
- **SES Events**: Toggle AWS SES event processing
- **Retention Settings**: Configure data retention periods
## Route
This LiveView is mounted at `{prefix}/admin/settings/email-tracking` and requires
appropriate admin permissions.
Note: `{prefix}` is your configured PhoenixKit URL prefix (default: `/phoenix_kit`).
## Usage
This is a focused settings page for common email tracking configurations.
For advanced settings (AWS infrastructure, compression, archival, etc.),
see the main Emails settings page.
## Permissions
Access is restricted to users with admin or owner roles in PhoenixKit.
"""
use PhoenixKitWeb, :live_view
alias PhoenixKit.Modules.Emails
alias PhoenixKit.Settings
def mount(params, _session, socket) do
# Handle locale
locale =
params["locale"] || socket.assigns[:current_locale]
# Get project title from settings
project_title = Settings.get_project_title()
# Load email tracking configuration
email_tracking_config = Emails.get_config()
socket =
socket
|> assign(:current_locale, locale)
|> assign(:page_title, "Email Tracking")
|> assign(:project_title, project_title)
|> 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_email_tracking_save_body", _params, socket) do
# Toggle email body saving
new_save_body = !socket.assigns.email_tracking_save_body
result = Emails.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 = Emails.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 Emails.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
end