Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions lib/modules/sitemap/sources/router_discovery.ex
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ defmodule PhoenixKit.Modules.Sitemap.Sources.RouterDiscovery do
# Internal/functional pages - not for search engine indexing
"/checkout",
"/cart",
"/newsletters/unsubscribe",
"/health",
"/ready",
# Infrastructure
Expand Down
1 change: 1 addition & 0 deletions lib/phoenix_kit/module_registry.ex
Original file line number Diff line number Diff line change
Expand Up @@ -431,6 +431,7 @@ defmodule PhoenixKit.ModuleRegistry do
[
%{
module: PhoenixKit.Newsletters,
key: "newsletters",
hex_package: "phoenix_kit_newsletters",
name: "Newsletters",
description:
Expand Down
18 changes: 17 additions & 1 deletion lib/phoenix_kit_web/live/modules.ex
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ defmodule PhoenixKitWeb.Live.Modules do
external_modules = load_external_modules(module_configs)
dep_warnings = ModuleRegistry.dependency_warnings()
not_installed = ModuleRegistry.not_installed_packages()
not_installed_keys = not_installed |> Enum.map(& &1.key) |> MapSet.new()

socket =
socket
Expand All @@ -42,6 +43,7 @@ defmodule PhoenixKitWeb.Live.Modules do
|> assign(:external_modules, external_modules)
|> assign(:dep_warnings, dep_warnings)
|> assign(:not_installed_packages, not_installed)
|> assign(:not_installed_keys, not_installed_keys)

{:ok, socket}
end
Expand Down Expand Up @@ -458,9 +460,23 @@ defmodule PhoenixKitWeb.Live.Modules do
icon: (perm && perm[:icon]) || "hero-puzzle-piece",
description: (perm && perm[:description]) || "External module",
enabled: config[:enabled] || false,
version: if(function_exported?(mod, :version, 0), do: mod.version(), else: "0.0.0")
version: if(function_exported?(mod, :version, 0), do: mod.version(), else: "0.0.0"),
required_modules:
if(function_exported?(mod, :required_modules, 0), do: mod.required_modules(), else: []),
admin_links: extract_admin_links(mod)
}
end)
|> Enum.sort_by(& &1.name)
end

defp extract_admin_links(mod) do
if Code.ensure_loaded?(mod) and function_exported?(mod, :admin_tabs, 0) do
mod.admin_tabs()
|> Enum.filter(fn tab -> tab.live_view != nil and tab.visible != false end)
|> Enum.take(3)
|> Enum.map(fn tab -> %{label: tab.label, path: "/admin/" <> tab.path, icon: tab.icon} end)
else
[]
end
end
end
67 changes: 23 additions & 44 deletions lib/phoenix_kit_web/live/modules.html.heex
Original file line number Diff line number Diff line change
Expand Up @@ -211,50 +211,6 @@
</PhoenixKitWeb.Components.Core.ModuleCard.module_card>
<% end %>

<%!-- Newsletters Module --%>
<%= if "newsletters" in @accessible_modules do %>
<% cfg = @module_configs["newsletters"] || %{} %>
<PhoenixKitWeb.Components.Core.ModuleCard.module_card
title="Newsletters"
description="Email broadcasts and subscription management"
icon="📨"
enabled={cfg[:enabled]}
toggle_event="toggle_module"
toggle_key="newsletters"
>
<:status_badges>
<span class={[
"badge",
if(cfg[:enabled], do: "badge-success", else: "badge-neutral")
]}>
{if cfg[:enabled], do: "Enabled", else: "Disabled"}
</span>
<%= unless mcfg(@module_configs, "emails", :enabled, false) do %>
<span class="badge badge-warning">Requires Emails</span>
<% end %>
</:status_badges>

<:action_buttons>
<%= if cfg[:enabled] do %>
<div class="flex gap-2">
<.link
navigate={PhoenixKit.Utils.Routes.path("/admin/newsletters/broadcasts")}
class="btn btn-outline btn-sm flex-1"
>
<.icon name="hero-paper-airplane" class="w-4 h-4 mr-1" /> Broadcasts
</.link>
<.link
navigate={PhoenixKit.Utils.Routes.path("/admin/newsletters/lists")}
class="btn btn-outline btn-sm flex-1"
>
<.icon name="hero-list-bullet" class="w-4 h-4 mr-1" /> Lists
</.link>
</div>
<% end %>
</:action_buttons>
</PhoenixKitWeb.Components.Core.ModuleCard.module_card>
<% end %>

<%!-- Languages Module --%>
<%= if "languages" in @accessible_modules do %>
<% cfg = @module_configs["languages"] || %{} %>
Expand Down Expand Up @@ -1412,11 +1368,34 @@
</span>
<span class="badge badge-outline">v{ext.version}</span>
<span class="badge badge-info badge-outline">External</span>
<%= for req_mod <- ext.required_modules do %>
<%= unless mcfg(@module_configs, req_mod, :enabled, false) do %>
<span class="badge badge-warning">
Requires {String.capitalize(req_mod)}
</span>
<% end %>
<% end %>
</div>
<span class="text-xs text-base-content/50">
{if ext.enabled, do: "Module is active", else: "Enable to activate"}
</span>
</div>

<%= if ext.enabled and ext.admin_links != [] do %>
<div class="flex gap-2 mt-2">
<%= for link <- ext.admin_links do %>
<.link
navigate={PhoenixKit.Utils.Routes.path(link.path)}
class="btn btn-outline btn-sm flex-1"
>
<%= if link.icon do %>
<.icon name={link.icon} class="w-4 h-4 mr-1" />
<% end %>
{link.label}
</.link>
<% end %>
</div>
<% end %>
</div>
</div>
<% end %>
Expand Down
16 changes: 14 additions & 2 deletions lib/phoenix_kit_web/live/settings/authorization.html.heex
Original file line number Diff line number Diff line change
Expand Up @@ -274,10 +274,22 @@
name="settings[magic_link_registration_enabled]"
type="checkbox"
value="true"
checked={@settings["magic_link_registration_enabled"] == "true"}
checked={
@settings["magic_link_registration_enabled"] == "true" and
@settings["allow_registration"] == "true"
}
disabled={@settings["allow_registration"] != "true"}
class="checkbox checkbox-primary"
/>
<span class="label-text">Enable Magic Link for registration</span>
<span class={[
"label-text",
@settings["allow_registration"] != "true" && "text-base-content/40"
]}>
Enable Magic Link for registration
<%= if @settings["allow_registration"] != "true" do %>
<span class="text-xs italic">(registration disabled)</span>
<% end %>
</span>
</div>
</div>

Expand Down
33 changes: 23 additions & 10 deletions lib/phoenix_kit_web/users/magic_link_registration_request.ex
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ defmodule PhoenixKitWeb.Users.MagicLinkRegistrationRequest do
use PhoenixKitWeb, :live_view

alias Phoenix.LiveView.JS
alias PhoenixKit.Settings
alias PhoenixKit.Users.MagicLinkRegistration
alias PhoenixKit.Utils.Routes
alias PhoenixKitWeb.Users.Auth
Expand All @@ -19,17 +20,29 @@ defmodule PhoenixKitWeb.Users.MagicLinkRegistrationRequest do
{:ok, socket}

:cont ->
# Get project title from settings (with Config fallback)
project_title = PhoenixKit.Settings.get_project_title()
if Settings.get_boolean_setting("allow_registration", true) do
# Get project title from settings (with Config fallback)
project_title = PhoenixKit.Settings.get_project_title()

{:ok,
socket
|> assign(:page_title, "Register via Magic Link")
|> assign(:project_title, project_title)
|> assign(:email, "")
|> assign(:email_sent, false)
|> assign(:error_message, nil)
|> assign(:loading, false)}
{:ok,
socket
|> assign(:page_title, "Register via Magic Link")
|> assign(:project_title, project_title)
|> assign(:email, "")
|> assign(:email_sent, false)
|> assign(:error_message, nil)
|> assign(:loading, false)}
else
socket =
socket
|> put_flash(
:error,
"User registration is currently disabled. Please contact an administrator."
)
|> redirect(to: Routes.path("/users/log-in"))

{:ok, socket}
end
end
end

Expand Down
Loading