Add backlinks between CRM, dashboard and site members (#4252)

* Add button to dashboard in site CRM edit form

* Add links to CRM for site and each user in "People" settingsg
This commit is contained in:
Adrian Gruntkowski 2024-06-20 14:03:58 +02:00 committed by GitHub
parent db1e755b0e
commit 766807e9fd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 75 additions and 0 deletions

View File

@ -25,6 +25,26 @@ defmodule Plausible.CrmExtensions do
]
end
def javascripts(%{assigns: %{context: "sites", resource: "site", entry: %{domain: domain}}}) do
base_url = PlausibleWeb.Endpoint.url()
[
Phoenix.HTML.raw("""
<script type="text/javascript">
(() => {
const cardBody = document.querySelector(".card-body")
if (cardBody) {
const buttonDOM = document.createElement("div")
buttonDOM.className = "mb-3 w-full text-right"
buttonDOM.innerHTML = '<div><a class="btn btn-outline-primary" href="#{base_url <> "/" <> domain}" target="_blank">Open Dashboard</a></div>'
cardBody.prepend(buttonDOM)
}
})()
</script>
""")
]
end
def javascripts(%{assigns: %{context: "billing", resource: "enterprise_plan", changeset: %{}}}) do
[
Phoenix.HTML.raw("""

View File

@ -27,6 +27,18 @@
<%= cond do %>
<% @conn.assigns[:current_user] -> %>
<ul class="flex items-center w-full sm:w-auto">
<li :if={
ee?() && @conn.assigns[:site] &&
Plausible.Auth.is_super_admin?(@conn.assigns[:current_user])
}>
<.styled_link
class="text-sm"
href={PlausibleWeb.Endpoint.url() <> "/crm/sites/site/#{@conn.assigns[:site].id}"}
new_tab={true}
>
CRM
</.styled_link>
</li>
<li
:if={ee?() and Plausible.Users.on_trial?(@conn.assigns[:current_user])}
class="hidden mr-6 sm:block"

View File

@ -20,6 +20,13 @@
<div class="flex-1 min-w-0">
<p class="text-sm font-medium text-gray-900 dark:text-gray-50 truncate">
<%= membership.user.name %>
<PlausibleWeb.Components.Generic.styled_link
:if={ee?() and Plausible.Auth.is_super_admin?(@current_user)}
new_tab={true}
href={PlausibleWeb.Endpoint.url() <> "/crm/auth/user/#{@current_user.id}"}
>
CRM
</PlausibleWeb.Components.Generic.styled_link>
</p>
<p class="text-sm text-gray-400 truncate">
<%= membership.user.email %>

View File

@ -488,6 +488,31 @@ defmodule PlausibleWeb.SiteControllerTest do
end
end
describe "GET /:website/settings/people" do
setup [:create_user, :log_in, :create_site]
@tag :ee_only
test "shows members page with links to CRM for super admin", %{
conn: conn,
user: user,
site: site
} do
patch_env(:super_admin_user_ids, [user.id])
conn = get(conn, "/#{site.domain}/settings/people")
resp = html_response(conn, 200)
assert resp =~ "/crm/auth/user/#{user.id}"
end
test "does not show CRM links to non-super admin user", %{conn: conn, user: user, site: site} do
conn = get(conn, "/#{site.domain}/settings/people")
resp = html_response(conn, 200)
refute resp =~ "/crm/auth/user/#{user.id}"
end
end
describe "GET /:website/settings/goals" do
setup [:create_user, :log_in, :create_site]

View File

@ -99,6 +99,11 @@ defmodule PlausibleWeb.StatsControllerTest do
conn = get(conn, "/" <> site.domain)
assert html_response(conn, 404) =~ "There's nothing here"
end
test "does not show CRM link to the site", %{conn: conn, site: site} do
conn = get(conn, "/" <> site.domain)
refute html_response(conn, 200) =~ "/crm/sites/site/#{site.id}"
end
end
describe "GET /:website - as a super admin" do
@ -152,6 +157,12 @@ defmodule PlausibleWeb.StatsControllerTest do
[{"div", attrs, _}] = find(resp, @react_container)
assert Enum.all?(attrs, fn {k, v} -> is_binary(k) and is_binary(v) end)
end
test "shows CRM link to the site", %{conn: conn} do
site = insert(:site)
conn = get(conn, "/" <> site.domain)
assert html_response(conn, 200) =~ "/crm/sites/site/#{site.id}"
end
end
defp make_user_super_admin(%{user: user}) do