Packages

phoenix_kit

1.7.21
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 modules posts web settings.ex
Raw

lib/modules/posts/web/settings.ex

defmodule PhoenixKitWeb.Live.Modules.Posts.Settings do
@moduledoc """
LiveView for posts module configuration and settings management.
This module provides a comprehensive interface for managing all aspects
of the PhoenixKit posts system, including:
- **Content Limits**: Configure max media, title length, subtitle, content, mentions, tags
- **Module Configuration**: Enable/disable module, set pagination, default status
- **Feature Toggles**: Control comments, likes, scheduling, groups, reposts, SEO
- **Moderation**: Configure post approval and comment moderation
## Route
This LiveView is mounted at `{prefix}/admin/posts/settings` and requires
appropriate admin permissions.
Note: `{prefix}` is your configured PhoenixKit URL prefix (default: `/phoenix_kit`).
## Features
- Real-time settings updates with immediate effect
- Input validation with user-friendly error messages
- Preview of limits and examples
- Organized by category for easy navigation
## Permissions
Access is restricted to users with admin or owner roles in PhoenixKit.
"""
use PhoenixKitWeb, :live_view
alias PhoenixKit.Settings
def mount(_params, _session, socket) do
# Get project title from settings
project_title = Settings.get_setting("project_title", "PhoenixKit")
# Load all posts settings
socket =
socket
|> assign(:page_title, "Posts Settings")
|> assign(:project_title, project_title)
|> assign(:saving, false)
|> load_settings()
{:ok, socket}
end
def handle_event("save", params, socket) do
socket = assign(socket, :saving, true)
# Extract settings from params
settings = Map.get(params, "settings", %{})
# Update all settings
results =
Enum.map(settings, fn {key, value} ->
Settings.update_setting(key, value)
end)
# Check if all updates succeeded
socket =
if Enum.all?(results, fn
{:ok, _} -> true
_ -> false
end) do
socket
|> put_flash(:info, "Settings saved successfully")
|> load_settings()
else
put_flash(socket, :error, "Failed to save some settings")
end
{:noreply, assign(socket, :saving, false)}
end
def handle_event("reset_defaults", _params, socket) do
# Reset all settings to defaults
defaults = %{
# Content Limits
"posts_max_media" => "10",
"posts_max_title_length" => "255",
"posts_max_subtitle_length" => "500",
"posts_max_content_length" => "50000",
"posts_max_mentions" => "10",
"posts_max_tags" => "20",
# Module Configuration
"posts_enabled" => "true",
"posts_per_page" => "20",
"posts_default_status" => "draft",
# Feature Toggles
"posts_comments_enabled" => "true",
"posts_likes_enabled" => "true",
"posts_allow_scheduling" => "true",
"posts_allow_groups" => "true",
"posts_allow_reposts" => "true",
"posts_seo_auto_slug" => "true",
"posts_show_view_count" => "true",
# Moderation
"posts_require_approval" => "false",
"posts_comment_moderation" => "false"
}
Enum.each(defaults, fn {key, value} ->
Settings.update_setting(key, value)
end)
{:noreply,
socket
|> put_flash(:info, "Settings reset to defaults")
|> load_settings()}
end
defp load_settings(socket) do
socket
# Content Limits
|> assign(:posts_max_media, Settings.get_setting("posts_max_media", "10"))
|> assign(:posts_max_title_length, Settings.get_setting("posts_max_title_length", "255"))
|> assign(
:posts_max_subtitle_length,
Settings.get_setting("posts_max_subtitle_length", "500")
)
|> assign(
:posts_max_content_length,
Settings.get_setting("posts_max_content_length", "50000")
)
|> assign(:posts_max_mentions, Settings.get_setting("posts_max_mentions", "10"))
|> assign(:posts_max_tags, Settings.get_setting("posts_max_tags", "20"))
# Module Configuration
|> assign(:posts_enabled, Settings.get_setting("posts_enabled", "true"))
|> assign(:posts_per_page, Settings.get_setting("posts_per_page", "20"))
|> assign(:posts_default_status, Settings.get_setting("posts_default_status", "draft"))
# Feature Toggles
|> assign(
:posts_comments_enabled,
Settings.get_setting("posts_comments_enabled", "true")
)
|> assign(:posts_likes_enabled, Settings.get_setting("posts_likes_enabled", "true"))
|> assign(
:posts_allow_scheduling,
Settings.get_setting("posts_allow_scheduling", "true")
)
|> assign(:posts_allow_groups, Settings.get_setting("posts_allow_groups", "true"))
|> assign(:posts_allow_reposts, Settings.get_setting("posts_allow_reposts", "true"))
|> assign(:posts_seo_auto_slug, Settings.get_setting("posts_seo_auto_slug", "true"))
|> assign(:posts_show_view_count, Settings.get_setting("posts_show_view_count", "true"))
# Moderation
|> assign(:posts_require_approval, Settings.get_setting("posts_require_approval", "false"))
|> assign(
:posts_comment_moderation,
Settings.get_setting("posts_comment_moderation", "false")
)
end
end