analytics/Plausible.Site.Memberships.AcceptInvitation.html
2025-03-13 13:44:47 +00:00

437 lines
14 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="ExDoc v0.35.1">
<meta name="project" content="Plausible v0.0.1">
<title>Plausible.Site.Memberships.AcceptInvitation — Plausible v0.0.1</title>
<link rel="stylesheet" href="dist/html-elixir-P45HOAC7.css" />
<script src="dist/handlebars.runtime-NWIB6V2M.js"></script>
<script src="dist/handlebars.templates-K7URE6B4.js"></script>
<script src="dist/sidebar_items-695ED9D9.js"></script>
<script src="docs_config.js"></script>
<script async src="dist/html-PVRIOB7F.js"></script>
</head>
<body data-type="modules" class="page-module">
<script>
try {
var settings = JSON.parse(localStorage.getItem('ex_doc:settings') || '{}');
if (settings.theme === 'dark' ||
((settings.theme === 'system' || settings.theme == null) &&
window.matchMedia('(prefers-color-scheme: dark)').matches)
) {
document.body.classList.add('dark')
}
} catch (error) { }
</script>
<div class="body-wrapper">
<button id="sidebar-menu" class="sidebar-button sidebar-toggle" aria-label="toggle sidebar" aria-controls="sidebar">
<i class="ri-menu-line ri-lg" title="Collapse/expand sidebar"></i>
</button>
<nav id="sidebar" class="sidebar">
<div class="sidebar-header">
<div class="sidebar-projectInfo">
<a href="readme.html" class="sidebar-projectImage">
<img src="assets/logo.png" alt="Plausible" />
</a>
<div>
<a href="readme.html" class="sidebar-projectName" translate="no">
Plausible
</a>
<div class="sidebar-projectVersion" translate="no">
v0.0.1
</div>
</div>
</div>
<ul id="sidebar-listNav" class="sidebar-listNav" role="tablist">
<li>
<button id="extras-list-tab-button" role="tab" data-type="extras" aria-controls="extras-tab-panel" aria-selected="true" tabindex="0">
Pages
</button>
</li>
<li>
<button id="modules-list-tab-button" role="tab" data-type="modules" aria-controls="modules-tab-panel" aria-selected="false" tabindex="-1">
Modules
</button>
</li>
<li>
<button id="tasks-list-tab-button" role="tab" data-type="tasks" aria-controls="tasks-tab-panel" aria-selected="false" tabindex="-1">
<span translate="no">Mix</span> Tasks
</button>
</li>
</ul>
</div>
<div id="extras-tab-panel" class="sidebar-tabpanel" role="tabpanel" aria-labelledby="extras-list-tab-button">
<ul id="extras-full-list" class="full-list"></ul>
</div>
<div id="modules-tab-panel" class="sidebar-tabpanel" role="tabpanel" aria-labelledby="modules-list-tab-button" hidden>
<ul id="modules-full-list" class="full-list"></ul>
</div>
<div id="tasks-tab-panel" class="sidebar-tabpanel" role="tabpanel" aria-labelledby="tasks-list-tab-button" hidden>
<ul id="tasks-full-list" class="full-list"></ul>
</div>
</nav>
<main class="content">
<output role="status" id="toast"></output>
<div id="content" class="content-inner">
<div class="top-search">
<div class="search-settings">
<form class="search-bar" action="search.html">
<label class="search-label">
<span class="sr-only">Search documentation of Plausible</span>
<input name="q" type="text" class="search-input" placeholder="Press / to search" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" />
</label>
<button type="submit" class="search-button" aria-label="Submit Search">
<i class="ri-search-2-line ri-lg" aria-hidden="true" title="Submit search"></i>
</button>
<button type="button" tabindex="-1" class="search-close-button" aria-hidden="true">
<i class="ri-close-line ri-lg" title="Cancel search"></i>
</button>
</form>
<div class="autocomplete">
</div>
<button class="icon-settings display-settings">
<i class="ri-settings-3-line"></i>
<span class="sr-only">Settings</span>
</button>
</div>
</div>
<div id="top-content">
<h1>
<a href="https://github.com/plausible/analytics/blob/main/lib/plausible/site/memberships/accept_invitation.ex#L1" title="View Source" class="icon-action" rel="help">
<i class="ri-code-s-slash-line" aria-hidden="true"></i>
<span class="sr-only">View Source</span>
</a>
<span translate="no">Plausible.Site.Memberships.AcceptInvitation</span>
<small class="app-vsn" translate="no">(Plausible v0.0.1)</small>
</h1>
<section id="moduledoc">
<p>Service for accepting invitations, including ownership transfers.</p><p>Accepting invitation accounts for the fact that it's possible
that accepting user has an existing membership for the site and
acts permissively to not unnecessarily disrupt the flow while
also maintaining integrity of site memberships. This also applies
to cases where users update their email address between issuing
the invitation and accepting it.</p>
</section>
</div>
<section id="summary" class="details-list">
<h1 class="section-heading">
<a class="hover-link" href="#summary">
<i class="ri-link-m" aria-hidden="true"></i>
</a>
<span class="text">Summary</span>
</h1>
<div class="summary-types summary">
<h2>
<a href="#types">Types</a>
</h2>
<div class="summary-row">
<div class="summary-signature">
<a href="#t:accept_error/0" data-no-tooltip translate="no">accept_error()</a>
</div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#t:membership/0" data-no-tooltip translate="no">membership()</a>
</div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#t:transfer_error/0" data-no-tooltip translate="no">transfer_error()</a>
</div>
</div>
</div>
<div class="summary-functions summary">
<h2>
<a href="#functions">Functions</a>
</h2>
<div class="summary-row">
<div class="summary-signature">
<a href="#accept_invitation/3" data-no-tooltip translate="no">accept_invitation(invitation_or_transfer_id, user, team \\ nil)</a>
</div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#bulk_transfer_ownership_direct/3" data-no-tooltip translate="no">bulk_transfer_ownership_direct(sites, new_owner, team \\ nil)</a>
</div>
</div>
</div>
</section>
<section id="types" class="details-list">
<h1 class="section-heading">
<a class="hover-link" href="#types">
<i class="ri-link-m" aria-hidden="true"></i>
</a>
<span class="text">Types</span>
</h1>
<div class="types-list">
<section class="detail" id="t:accept_error/0">
<div class="detail-header">
<a href="#t:accept_error/0" class="detail-link" data-no-tooltip aria-label="Link to this type">
<i class="ri-link-m" aria-hidden="true"></i>
</a>
<h1 class="signature" translate="no">accept_error()</h1>
<a href="https://github.com/plausible/analytics/blob/main/lib/plausible/site/memberships/accept_invitation.ex#L31" class="icon-action" rel="help" aria-label="View Source">
<i class="ri-code-s-slash-line" aria-hidden="true"></i>
</a>
</div>
<section class="docstring">
<div class="specs">
<pre translate="no"><span class="attribute">@type</span> accept_error() ::
:invitation_not_found
| Plausible.Billing.Quota.Limits.over_limits_error()
| <a href="https://hexdocs.pm/ecto/3.12.5/Ecto.Changeset.html#t:t/0">Ecto.Changeset.t</a>()
| :no_plan
| :multiple_teams
| :permission_denied</pre>
</div>
</section>
</section>
<section class="detail" id="t:membership/0">
<div class="detail-header">
<a href="#t:membership/0" class="detail-link" data-no-tooltip aria-label="Link to this type">
<i class="ri-link-m" aria-hidden="true"></i>
</a>
<h1 class="signature" translate="no">membership()</h1>
<a href="https://github.com/plausible/analytics/blob/main/lib/plausible/site/memberships/accept_invitation.ex#L39" class="icon-action" rel="help" aria-label="View Source">
<i class="ri-code-s-slash-line" aria-hidden="true"></i>
</a>
</div>
<section class="docstring">
<div class="specs">
<pre translate="no"><span class="attribute">@type</span> membership() :: %Plausible.Teams.Membership{
__meta__: <a href="https://hexdocs.pm/elixir/typespecs.html#built-in-types">term</a>(),
guest_memberships: <a href="https://hexdocs.pm/elixir/typespecs.html#built-in-types">term</a>(),
id: <a href="https://hexdocs.pm/elixir/typespecs.html#built-in-types">term</a>(),
inserted_at: <a href="https://hexdocs.pm/elixir/typespecs.html#built-in-types">term</a>(),
is_autocreated: <a href="https://hexdocs.pm/elixir/typespecs.html#built-in-types">term</a>(),
role: <a href="https://hexdocs.pm/elixir/typespecs.html#built-in-types">term</a>(),
team: <a href="https://hexdocs.pm/elixir/typespecs.html#built-in-types">term</a>(),
team_id: <a href="https://hexdocs.pm/elixir/typespecs.html#built-in-types">term</a>(),
updated_at: <a href="https://hexdocs.pm/elixir/typespecs.html#built-in-types">term</a>(),
user: <a href="https://hexdocs.pm/elixir/typespecs.html#built-in-types">term</a>(),
user_id: <a href="https://hexdocs.pm/elixir/typespecs.html#built-in-types">term</a>()
}</pre>
</div>
</section>
</section>
<section class="detail" id="t:transfer_error/0">
<div class="detail-header">
<a href="#t:transfer_error/0" class="detail-link" data-no-tooltip aria-label="Link to this type">
<i class="ri-link-m" aria-hidden="true"></i>
</a>
<h1 class="signature" translate="no">transfer_error()</h1>
<a href="https://github.com/plausible/analytics/blob/main/lib/plausible/site/memberships/accept_invitation.ex#L23" class="icon-action" rel="help" aria-label="View Source">
<i class="ri-code-s-slash-line" aria-hidden="true"></i>
</a>
</div>
<section class="docstring">
<div class="specs">
<pre translate="no"><span class="attribute">@type</span> transfer_error() ::
Plausible.Billing.Quota.Limits.over_limits_error()
| <a href="https://hexdocs.pm/ecto/3.12.5/Ecto.Changeset.html#t:t/0">Ecto.Changeset.t</a>()
| :transfer_to_self
| :no_plan
| :multiple_teams
| :permission_denied</pre>
</div>
</section>
</section>
</div>
</section>
<section id="functions" class="details-list">
<h1 class="section-heading">
<a class="hover-link" href="#functions">
<i class="ri-link-m" aria-hidden="true"></i>
</a>
<span class="text">Functions</span>
</h1>
<div class="functions-list">
<section class="detail" id="accept_invitation/3">
<span id="accept_invitation/2"></span>
<div class="detail-header">
<a href="#accept_invitation/3" class="detail-link" data-no-tooltip aria-label="Link to this function">
<i class="ri-link-m" aria-hidden="true"></i>
</a>
<h1 class="signature" translate="no">accept_invitation(invitation_or_transfer_id, user, team \\ nil)</h1>
<a href="https://github.com/plausible/analytics/blob/main/lib/plausible/site/memberships/accept_invitation.ex#L59" class="icon-action" rel="help" aria-label="View Source">
<i class="ri-code-s-slash-line" aria-hidden="true"></i>
</a>
</div>
<section class="docstring">
<div class="specs">
<pre translate="no"><span class="attribute">@spec</span> accept_invitation(
<a href="https://hexdocs.pm/elixir/String.html#t:t/0">String.t</a>(),
<a href="Plausible.Auth.User.html#t:t/0">Plausible.Auth.User.t</a>(),
<a href="Plausible.Teams.Team.html#t:t/0">Plausible.Teams.Team.t</a>() | nil
) ::
{:ok, <a href="https://hexdocs.pm/elixir/typespecs.html#basic-types">map</a>()} | {:error, <a href="#t:accept_error/0">accept_error</a>()}</pre>
</div>
</section>
</section>
<section class="detail" id="bulk_transfer_ownership_direct/3">
<span id="bulk_transfer_ownership_direct/2"></span>
<div class="detail-header">
<a href="#bulk_transfer_ownership_direct/3" class="detail-link" data-no-tooltip aria-label="Link to this function">
<i class="ri-link-m" aria-hidden="true"></i>
</a>
<h1 class="signature" translate="no">bulk_transfer_ownership_direct(sites, new_owner, team \\ nil)</h1>
<a href="https://github.com/plausible/analytics/blob/main/lib/plausible/site/memberships/accept_invitation.ex#L43" class="icon-action" rel="help" aria-label="View Source">
<i class="ri-code-s-slash-line" aria-hidden="true"></i>
</a>
</div>
<section class="docstring">
<div class="specs">
<pre translate="no"><span class="attribute">@spec</span> bulk_transfer_ownership_direct(
[<a href="Plausible.Site.html#t:t/0">Plausible.Site.t</a>()],
<a href="Plausible.Auth.User.html#t:t/0">Plausible.Auth.User.t</a>(),
<a href="Plausible.Teams.Team.html#t:t/0">Plausible.Teams.Team.t</a>() | nil
) :: {:ok, [<a href="#t:membership/0">membership</a>()]} | {:error, <a href="#t:transfer_error/0">transfer_error</a>()}</pre>
</div>
</section>
</section>
</div>
</section>
<footer class="footer">
<p>
<span class="line">
<button class="a-main footer-button display-quick-switch" title="Search HexDocs packages">
Search HexDocs
</button>
<a href="Plausible.epub" title="ePub version">
Download ePub version
</a>
</span>
</p>
<p class="built-using">
Built using
<a href="https://github.com/elixir-lang/ex_doc" title="ExDoc" target="_blank" rel="help noopener" translate="no">ExDoc</a> (v0.35.1) for the
<a href="https://elixir-lang.org" title="Elixir" target="_blank" translate="no">Elixir programming language</a>
</p>
</footer>
</div>
</main>
</div>
<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
<script>mermaid.initialize({startOnLoad: true})</script>
</body>
</html>