mirror of
https://github.com/plausible/analytics.git
synced 2024-12-23 01:22:15 +03:00
Bring back premium feature notices in tiles (#4742)
* Lost tapes: bring back premium feature notices in tiles * Ensure that e-mail CTA is only presented to business/enterprise customers * Format * Fix typespecs * Add t() type to EnterprisePlan * Reduce Plan.t() definition Found no reason for it to be there.
This commit is contained in:
parent
0404522b5a
commit
8bd32b68c9
@ -2,6 +2,8 @@ defmodule Plausible.Billing.EnterprisePlan do
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
|
||||
@type t() :: %__MODULE__{}
|
||||
|
||||
@required_fields [
|
||||
:user_id,
|
||||
:paddle_plan_id,
|
||||
|
@ -4,7 +4,7 @@ defmodule Plausible.Billing.Plan do
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
|
||||
@type t() :: %__MODULE__{} | :enterprise
|
||||
@type t() :: %__MODULE__{}
|
||||
|
||||
embedded_schema do
|
||||
# Due to grandfathering, we sometimes need to check the "generation" (e.g.
|
||||
|
@ -105,6 +105,8 @@ defmodule Plausible.Billing.Plans do
|
||||
end)
|
||||
end
|
||||
|
||||
@spec get_subscription_plan(nil | Subscription.t()) ::
|
||||
nil | :free_10k | Plan.t() | EnterprisePlan.t()
|
||||
def get_subscription_plan(nil), do: nil
|
||||
|
||||
def get_subscription_plan(subscription) do
|
||||
|
@ -302,17 +302,24 @@ defmodule PlausibleWeb.Components.Billing.Notice do
|
||||
defp upgrade_call_to_action(assigns) do
|
||||
billable_user = Plausible.Users.with_subscription(assigns.billable_user)
|
||||
|
||||
plan =
|
||||
Plans.get_regular_plan(billable_user.subscription, only_non_expired: true)
|
||||
|
||||
trial? = Plausible.Users.on_trial?(assigns.billable_user)
|
||||
growth? = plan && plan.kind == :growth
|
||||
upgrade_assistance_required? =
|
||||
case Plans.get_subscription_plan(billable_user.subscription) do
|
||||
%Plausible.Billing.Plan{kind: :business} -> true
|
||||
%Plausible.Billing.EnterprisePlan{} -> true
|
||||
_ -> false
|
||||
end
|
||||
|
||||
cond do
|
||||
assigns.billable_user.id !== assigns.current_user.id ->
|
||||
~H"please reach out to the site owner to upgrade their subscription"
|
||||
|
||||
growth? || trial? ->
|
||||
upgrade_assistance_required? ->
|
||||
~H"""
|
||||
please contact <a href="mailto:hello@plausible.io" class="underline">hello@plausible.io</a>
|
||||
to upgrade your subscription
|
||||
"""
|
||||
|
||||
true ->
|
||||
~H"""
|
||||
please
|
||||
<.link
|
||||
@ -322,12 +329,6 @@ defmodule PlausibleWeb.Components.Billing.Notice do
|
||||
upgrade your subscription
|
||||
</.link>
|
||||
"""
|
||||
|
||||
true ->
|
||||
~H"""
|
||||
please contact <a href="mailto:hello@plausible.io" class="underline">hello@plausible.io</a>
|
||||
to upgrade your subscription
|
||||
"""
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -12,12 +12,13 @@
|
||||
Compose Goals into Funnels
|
||||
</:subtitle>
|
||||
|
||||
<PlausibleWeb.Components.Billing.Notice.premium_feature
|
||||
billable_user={@site.owner}
|
||||
current_user={@current_user}
|
||||
feature_mod={Plausible.Billing.Feature.Funnels}
|
||||
/>
|
||||
|
||||
<div :if={Plausible.Billing.Feature.Funnels.enabled?(@site)}>
|
||||
<PlausibleWeb.Components.Billing.Notice.premium_feature
|
||||
billable_user={@site.owner}
|
||||
current_user={@current_user}
|
||||
feature_mod={Plausible.Billing.Feature.Funnels}
|
||||
/>
|
||||
<%= live_render(@conn, PlausibleWeb.Live.FunnelSettings,
|
||||
session: %{"site_id" => @site.id, "domain" => @site.domain}
|
||||
) %>
|
||||
|
@ -13,13 +13,14 @@
|
||||
create custom metrics.
|
||||
</:subtitle>
|
||||
|
||||
<PlausibleWeb.Components.Billing.Notice.premium_feature
|
||||
billable_user={@site.owner}
|
||||
current_user={@current_user}
|
||||
feature_mod={Plausible.Billing.Feature.Props}
|
||||
grandfathered?
|
||||
/>
|
||||
|
||||
<div :if={Plausible.Billing.Feature.Props.enabled?(@site)}>
|
||||
<PlausibleWeb.Components.Billing.Notice.premium_feature
|
||||
billable_user={@site.owner}
|
||||
current_user={@current_user}
|
||||
feature_mod={Plausible.Billing.Feature.Props}
|
||||
grandfathered?
|
||||
/>
|
||||
<%= live_render(@conn, PlausibleWeb.Live.PropsSettings,
|
||||
id: "props-form",
|
||||
session: %{"site_id" => @site.id, "domain" => @site.domain}
|
||||
|
@ -10,6 +10,18 @@ defmodule PlausibleWeb.Live.FunnelSettingsTest do
|
||||
describe "GET /:domain/settings/funnels" do
|
||||
setup [:create_user, :log_in, :create_site]
|
||||
|
||||
@tag :ee_only
|
||||
test "premium feature notice renders", %{conn: conn, site: site, user: user} do
|
||||
user
|
||||
|> Plausible.Auth.User.end_trial()
|
||||
|> Plausible.Repo.update!()
|
||||
|
||||
conn = get(conn, "/#{site.domain}/settings/funnels")
|
||||
resp = conn |> html_response(200) |> text()
|
||||
|
||||
assert resp =~ "please upgrade your subscription"
|
||||
end
|
||||
|
||||
test "lists funnels for the site and renders help link", %{conn: conn, site: site} do
|
||||
{:ok, _} = setup_funnels(site)
|
||||
conn = get(conn, "/#{site.domain}/settings/funnels")
|
||||
@ -18,6 +30,8 @@ defmodule PlausibleWeb.Live.FunnelSettingsTest do
|
||||
assert resp =~ "Compose Goals into Funnels"
|
||||
assert resp =~ "From blog to signup"
|
||||
assert resp =~ "From signup to blog"
|
||||
refute resp =~ "Your account does not have access"
|
||||
refute resp =~ "please upgrade your subscription"
|
||||
assert element_exists?(resp, "a[href=\"https://plausible.io/docs/funnel-analysis\"]")
|
||||
end
|
||||
|
||||
|
@ -6,6 +6,18 @@ defmodule PlausibleWeb.Live.PropsSettingsTest do
|
||||
describe "GET /:domain/settings/properties" do
|
||||
setup [:create_user, :log_in, :create_site]
|
||||
|
||||
@tag :ee_only
|
||||
test "premium feature notice renders", %{conn: conn, site: site, user: user} do
|
||||
user
|
||||
|> Plausible.Auth.User.end_trial()
|
||||
|> Plausible.Repo.update!()
|
||||
|
||||
conn = get(conn, "/#{site.domain}/settings/properties")
|
||||
resp = conn |> html_response(200) |> text()
|
||||
|
||||
assert resp =~ "please upgrade your subscription"
|
||||
end
|
||||
|
||||
test "lists props for the site and renders links", %{conn: conn, site: site} do
|
||||
{:ok, site} = Plausible.Props.allow(site, ["amount", "logged_in", "is_customer"])
|
||||
conn = get(conn, "/#{site.domain}/settings/properties")
|
||||
@ -21,6 +33,7 @@ defmodule PlausibleWeb.Live.PropsSettingsTest do
|
||||
assert resp =~ "amount"
|
||||
assert resp =~ "logged_in"
|
||||
assert resp =~ "is_customer"
|
||||
refute resp =~ "please upgrade your subscription"
|
||||
end
|
||||
|
||||
test "lists props with disallow actions", %{conn: conn, site: site} do
|
||||
|
Loading…
Reference in New Issue
Block a user