feat: email fallback and consistent auth checks across presenter components
ae_comp__event_presenter_obj_li.svelte: - Email Access Link now shows for presenter.email when person_primary_email is null (same fallback logic as +page.svelte). Passes email as person_id when no Person record exists. Uses person_passcode ?? passcode. - Visibility gate changed from administrator_access to trusted_access so staff signed in via any method can still send links (was blocking non-admin staff). - Icon changed to class="mr-1" for consistency. presenter_view.svelte: - Email field <li>, passcode <li>, and biography textarea disabled now all check auth__kv.presenter[email] as a secondary key alongside auth__kv.presenter[id], matching the pattern established in presenter_page_menu.svelte. Presenters who signed in via email identity (no Person record) can now see and edit their own fields without needing a Person record link. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -507,12 +507,9 @@ $effect(() => {
|
||||
|
||||
<li
|
||||
class:hidden={!$ae_loc.trusted_access &&
|
||||
!events_auth_loc.current.auth__kv.presenter[
|
||||
$lq__event_presenter_obj?.event_presenter_id
|
||||
] &&
|
||||
!events_auth_loc.current.auth__kv.session[
|
||||
$lq__event_presenter_obj.event_session_id
|
||||
]}>
|
||||
!events_auth_loc.current.auth__kv.presenter[$lq__event_presenter_obj?.event_presenter_id] &&
|
||||
!events_auth_loc.current.auth__kv.presenter[$lq__event_presenter_obj?.email ?? ''] &&
|
||||
!events_auth_loc.current.auth__kv.session[$lq__event_presenter_obj.event_session_id]}>
|
||||
<Element_ae_obj_field_editor
|
||||
object_type={'event_presenter'}
|
||||
object_id={$lq__event_presenter_obj?.event_presenter_id}
|
||||
@@ -1055,9 +1052,8 @@ $effect(() => {
|
||||
<li
|
||||
class:hidden={!$lq__event_presenter_obj.person_id ||
|
||||
(!$ae_loc.trusted_access &&
|
||||
!events_auth_loc.current.auth__kv.presenter[
|
||||
$lq__event_presenter_obj?.event_presenter_id
|
||||
])}>
|
||||
!events_auth_loc.current.auth__kv.presenter[$lq__event_presenter_obj?.event_presenter_id] &&
|
||||
!events_auth_loc.current.auth__kv.presenter[$lq__event_presenter_obj?.email ?? ''])}>
|
||||
<Element_ae_obj_field_editor
|
||||
object_type={'person'}
|
||||
object_id={$lq__event_presenter_obj.person_id}
|
||||
@@ -1150,9 +1146,8 @@ $effect(() => {
|
||||
name="biography"
|
||||
id="presenter__biography"
|
||||
disabled={!$ae_loc.trusted_access &&
|
||||
!events_auth_loc.current.auth__kv.presenter[
|
||||
$lq__event_presenter_obj?.event_presenter_id
|
||||
]}
|
||||
!events_auth_loc.current.auth__kv.presenter[$lq__event_presenter_obj?.event_presenter_id] &&
|
||||
!events_auth_loc.current.auth__kv.presenter[$lq__event_presenter_obj?.email ?? '']}
|
||||
class="textarea ae_value event_presenter__biography font-mono"
|
||||
class:preset-tonal-error={ae_tmp.biography &&
|
||||
ae_tmp.biography.length > 600
|
||||
|
||||
@@ -186,40 +186,33 @@ let ae_tmp: key_val = $state({});
|
||||
{/if}
|
||||
</a>
|
||||
|
||||
{#if pres_mgmt_loc.current.show__email_access_link && event_presenter_obj?.person_primary_email && ($ae_loc.administrator_access || !events_auth_loc.current.auth__person?.id)}
|
||||
{#if pres_mgmt_loc.current.show__email_access_link && (event_presenter_obj?.person_primary_email || event_presenter_obj?.email) && ($ae_loc.trusted_access || !events_auth_loc.current.auth__person?.id)}
|
||||
<button
|
||||
type="button"
|
||||
onclick={() => {
|
||||
console.log('Email the access link');
|
||||
if (!event_presenter_obj.person_primary_email) {
|
||||
alert(
|
||||
'No email address found for this presenter.'
|
||||
);
|
||||
// Prefer Person-record email; fall back to presenter.email for
|
||||
// presenters without a Person record (common for LCI/iMIS gaps).
|
||||
const use_email = event_presenter_obj.person_primary_email ?? event_presenter_obj.email;
|
||||
const use_person_id = event_presenter_obj.person_id ?? event_presenter_obj.email;
|
||||
const use_passcode = event_presenter_obj.person_passcode ?? event_presenter_obj.passcode;
|
||||
|
||||
if (!use_email) {
|
||||
alert('No email address found for this presenter.');
|
||||
return;
|
||||
}
|
||||
if (
|
||||
confirm(
|
||||
`This will send the sign in email to ${event_presenter_obj.person_primary_email}`
|
||||
)
|
||||
) {
|
||||
console.log('Send the email to the presenter.');
|
||||
} else {
|
||||
console.log('Cancelled sending the email.');
|
||||
return false;
|
||||
if (!confirm(`This will send the sign in email to ${use_email}`)) {
|
||||
return;
|
||||
}
|
||||
|
||||
events_func.email_sign_in__event_presenter({
|
||||
api_cfg: $ae_api,
|
||||
to_email:
|
||||
event_presenter_obj.person_primary_email,
|
||||
to_email: use_email,
|
||||
to_name:
|
||||
event_presenter_obj?.full_name ??
|
||||
'-- not set --',
|
||||
base_url: $ae_loc.url_origin,
|
||||
person_id: event_presenter_obj?.person_id,
|
||||
person_passcode:
|
||||
event_presenter_obj.person_passcode ??
|
||||
'-- not set --',
|
||||
person_id: use_person_id,
|
||||
person_passcode: use_passcode ?? '-- not set --',
|
||||
event_id: event_presenter_obj.event_id,
|
||||
event_session_id:
|
||||
event_presenter_obj.event_session_id,
|
||||
@@ -238,7 +231,7 @@ let ae_tmp: key_val = $state({});
|
||||
class="btn preset-tonal-secondary border-secondary-500 hover:preset-filled-secondary-500 my-0.5 border transition-all hover:transition-all"
|
||||
class:btn-sm={display_mode != 'default'}
|
||||
title="Email the access link to the presenter">
|
||||
<Mail size="1em" class="mx-1" />
|
||||
<Mail size="1em" class="mr-1" />
|
||||
Email Access Link
|
||||
</button>
|
||||
{/if}
|
||||
|
||||
Reference in New Issue
Block a user