mirror of
https://github.com/plausible/analytics.git
synced 2024-12-27 03:21:37 +03:00
e71de6dc1f
* Invite existing user to a site * Add invitation flow for non-existing users * Accept and reject invitations * Use invitation flow for existing users * Locking mechanism for sites * Authorization for site settings * Show usage based on site ownership * Add ability to remove members from a site * Do not show settings link to viewer roles * Ability to remove invitations * Remove `Plausible.Sites.count_for/1` * Fix tests * Do not show the trial banner after the trial * Correct trial emails * Transfer ownership * Send invitation email to existing user * Add invitation email flows * Add plug for role-based authorization * Rename AuthorizeStatsPlug -> AuthorizeSiteAccess * Add email flow for ownership transfer * Fix URLs in emails * Fix small copy issues * Make 'People' its own section in site settings * Notify user via email if their access has been removed * Check site lock status when invitation is accepted * Check lock status when user subscribes * Make sure only admins and owners can create shared links * Changelog * Add LockSites to daily cron * Clean invitations after 48 hours * Add notices about expiry * Add invitation expired page * Add doc link
83 lines
1.8 KiB
Elixir
83 lines
1.8 KiB
Elixir
defmodule Plausible.Workers.SendTrialNotifications do
|
|
use Plausible.Repo
|
|
|
|
use Oban.Worker,
|
|
queue: :trial_notification_emails,
|
|
max_attempts: 1
|
|
|
|
require Logger
|
|
|
|
@impl Oban.Worker
|
|
def perform(_job) do
|
|
users =
|
|
Repo.all(
|
|
from u in Plausible.Auth.User,
|
|
left_join: s in Plausible.Billing.Subscription,
|
|
on: s.user_id == u.id,
|
|
where: is_nil(s.id),
|
|
order_by: u.inserted_at
|
|
)
|
|
|
|
for user <- users do
|
|
case Timex.diff(user.trial_expiry_date, Timex.today(), :days) do
|
|
7 ->
|
|
if Plausible.Auth.has_active_sites?(user, [:owner]) do
|
|
send_one_week_reminder(user)
|
|
end
|
|
|
|
1 ->
|
|
if Plausible.Auth.has_active_sites?(user, [:owner]) do
|
|
send_tomorrow_reminder(user)
|
|
end
|
|
|
|
0 ->
|
|
if Plausible.Auth.has_active_sites?(user, [:owner]) do
|
|
send_today_reminder(user)
|
|
end
|
|
|
|
-1 ->
|
|
if Plausible.Auth.has_active_sites?(user, [:owner]) do
|
|
send_over_reminder(user)
|
|
end
|
|
|
|
_ ->
|
|
nil
|
|
end
|
|
end
|
|
|
|
:ok
|
|
end
|
|
|
|
defp send_one_week_reminder(user) do
|
|
PlausibleWeb.Email.trial_one_week_reminder(user)
|
|
|> send_email()
|
|
end
|
|
|
|
defp send_tomorrow_reminder(user) do
|
|
usage = Plausible.Billing.usage_breakdown(user)
|
|
|
|
PlausibleWeb.Email.trial_upgrade_email(user, "tomorrow", usage)
|
|
|> send_email()
|
|
end
|
|
|
|
defp send_today_reminder(user) do
|
|
usage = Plausible.Billing.usage_breakdown(user)
|
|
|
|
PlausibleWeb.Email.trial_upgrade_email(user, "today", usage)
|
|
|> send_email()
|
|
end
|
|
|
|
defp send_over_reminder(user) do
|
|
PlausibleWeb.Email.trial_over_email(user)
|
|
|> send_email()
|
|
end
|
|
|
|
defp send_email(email) do
|
|
try do
|
|
Plausible.Mailer.send_email(email)
|
|
rescue
|
|
_ -> nil
|
|
end
|
|
end
|
|
end
|