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
|
<li
|
||||||
class:hidden={!$ae_loc.trusted_access &&
|
class:hidden={!$ae_loc.trusted_access &&
|
||||||
!events_auth_loc.current.auth__kv.presenter[
|
!events_auth_loc.current.auth__kv.presenter[$lq__event_presenter_obj?.event_presenter_id] &&
|
||||||
$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]}>
|
||||||
!events_auth_loc.current.auth__kv.session[
|
|
||||||
$lq__event_presenter_obj.event_session_id
|
|
||||||
]}>
|
|
||||||
<Element_ae_obj_field_editor
|
<Element_ae_obj_field_editor
|
||||||
object_type={'event_presenter'}
|
object_type={'event_presenter'}
|
||||||
object_id={$lq__event_presenter_obj?.event_presenter_id}
|
object_id={$lq__event_presenter_obj?.event_presenter_id}
|
||||||
@@ -1055,9 +1052,8 @@ $effect(() => {
|
|||||||
<li
|
<li
|
||||||
class:hidden={!$lq__event_presenter_obj.person_id ||
|
class:hidden={!$lq__event_presenter_obj.person_id ||
|
||||||
(!$ae_loc.trusted_access &&
|
(!$ae_loc.trusted_access &&
|
||||||
!events_auth_loc.current.auth__kv.presenter[
|
!events_auth_loc.current.auth__kv.presenter[$lq__event_presenter_obj?.event_presenter_id] &&
|
||||||
$lq__event_presenter_obj?.event_presenter_id
|
!events_auth_loc.current.auth__kv.presenter[$lq__event_presenter_obj?.email ?? ''])}>
|
||||||
])}>
|
|
||||||
<Element_ae_obj_field_editor
|
<Element_ae_obj_field_editor
|
||||||
object_type={'person'}
|
object_type={'person'}
|
||||||
object_id={$lq__event_presenter_obj.person_id}
|
object_id={$lq__event_presenter_obj.person_id}
|
||||||
@@ -1150,9 +1146,8 @@ $effect(() => {
|
|||||||
name="biography"
|
name="biography"
|
||||||
id="presenter__biography"
|
id="presenter__biography"
|
||||||
disabled={!$ae_loc.trusted_access &&
|
disabled={!$ae_loc.trusted_access &&
|
||||||
!events_auth_loc.current.auth__kv.presenter[
|
!events_auth_loc.current.auth__kv.presenter[$lq__event_presenter_obj?.event_presenter_id] &&
|
||||||
$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="textarea ae_value event_presenter__biography font-mono"
|
||||||
class:preset-tonal-error={ae_tmp.biography &&
|
class:preset-tonal-error={ae_tmp.biography &&
|
||||||
ae_tmp.biography.length > 600
|
ae_tmp.biography.length > 600
|
||||||
|
|||||||
@@ -186,40 +186,33 @@ let ae_tmp: key_val = $state({});
|
|||||||
{/if}
|
{/if}
|
||||||
</a>
|
</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
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
onclick={() => {
|
onclick={() => {
|
||||||
console.log('Email the access link');
|
// Prefer Person-record email; fall back to presenter.email for
|
||||||
if (!event_presenter_obj.person_primary_email) {
|
// presenters without a Person record (common for LCI/iMIS gaps).
|
||||||
alert(
|
const use_email = event_presenter_obj.person_primary_email ?? event_presenter_obj.email;
|
||||||
'No email address found for this presenter.'
|
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;
|
return;
|
||||||
}
|
}
|
||||||
if (
|
if (!confirm(`This will send the sign in email to ${use_email}`)) {
|
||||||
confirm(
|
return;
|
||||||
`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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
events_func.email_sign_in__event_presenter({
|
events_func.email_sign_in__event_presenter({
|
||||||
api_cfg: $ae_api,
|
api_cfg: $ae_api,
|
||||||
to_email:
|
to_email: use_email,
|
||||||
event_presenter_obj.person_primary_email,
|
|
||||||
to_name:
|
to_name:
|
||||||
event_presenter_obj?.full_name ??
|
event_presenter_obj?.full_name ??
|
||||||
'-- not set --',
|
'-- not set --',
|
||||||
base_url: $ae_loc.url_origin,
|
base_url: $ae_loc.url_origin,
|
||||||
person_id: event_presenter_obj?.person_id,
|
person_id: use_person_id,
|
||||||
person_passcode:
|
person_passcode: use_passcode ?? '-- not set --',
|
||||||
event_presenter_obj.person_passcode ??
|
|
||||||
'-- not set --',
|
|
||||||
event_id: event_presenter_obj.event_id,
|
event_id: event_presenter_obj.event_id,
|
||||||
event_session_id:
|
event_session_id:
|
||||||
event_presenter_obj.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 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'}
|
class:btn-sm={display_mode != 'default'}
|
||||||
title="Email the access link to the presenter">
|
title="Email the access link to the presenter">
|
||||||
<Mail size="1em" class="mx-1" />
|
<Mail size="1em" class="mr-1" />
|
||||||
Email Access Link
|
Email Access Link
|
||||||
</button>
|
</button>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
Reference in New Issue
Block a user