모든 이메일이 비활성화될 때 UX 관점에서 몇 가지 이상한 일이 발생합니다.
이것들을 버그라고 규정하고 싶습니다.
- 스태프가 아닌 사용자까지 포함해 모든 사람이 시스템이 이메일을 보내지 않는다는 메시지를 받습니다. 이 알림을 끄는 방법이 없어 보입니다. 사용자가 이 알림을 계속 받는 데는 이유가 없어 보입니다. 스태프나 관리자만 표시하는 것이 적절할 수도 있습니다. 언젠가 의도적인 결정이었을 수도 있습니다. 다만 관련 논의는 찾지 못했습니다.
if (
this.siteSettings.disable_emails === "yes" ||
this.siteSettings.disable_emails === "non-staff"
) {
notices.push(
Notice.create({
text: I18n.t("emails_are_disabled"), // "All outgoing email has been globally disabled by an administrator. No email notifications of any kind will be sent."
id: "alert-emails-disabled",
})
);
}
가드 조건을 다음과 같이 변경해야 한다고 생각합니다.
if (
this.get("currentUser.staff") && // 또는 currentUser.admin
(this.siteSettings.disable_emails === "yes" ||
this.siteSettings.disable_emails === "non-staff")
) {
…
아니면 최소한 누가 이 알림을 받을지 결정할 수 있는 설정을 두는 것이 좋습니다. (예: 모든 사람/스태프/관리자/없음)
또한 FIX: Show 'emails disabled' to staff users when disabled for non-staf… · discourse/discourse@acc121f · GitHub 에서 이 수정 사항의 아이디어는 이메일 비활성화 알림을 스태프에게만 표시해야 한다는 것이었던 것 같습니다. 하지만 스펙 https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/tests/acceptance/email-notice-test.js#L24 은 모든 사람이 알림을 확인하는 것을 검증하고 있습니다.
부수적인 언급으로: test("when … 라는 표현이 조금 혼란스럽습니다. 예를 들어: When enabled 은 실제로 disable_emails = "yes" 를 테스트합니다. 설정 변경에 대한 테스트를 이해하지만, 실제로는 이메일 비활성화를 테스트하는 것이고, 반대로 When disabled 는 이메일 활성화 상태를 테스트합니다. 아마도 최종 효과보다는 설정된 값에 초점을 맞춘 것이 프로젝트의 관례일 것입니다. 그렇다면 전혀 문제가 되지 않습니다. 다만 신규 입장에서 보면 조금 낯설게 느껴질 뿐입니다.
disable_emails가 “yes” 또는 “non-staff” 로 설정되어 있든, 이메일 섹션은 모든 사용자의 사용자 설정 페이지에 여전히 표시됩니다. 이는 이상한데, 템플릿 내부에는 다이제스트나 메일링 리스트가 비활성화될 때 해당 부분을 비활성화하는 체크가 존재하기 때문입니다.
확인하실 수 있듯이, 여기에는 체크가 없습니다. https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/templates/preferences.hbs#L18
<li class="nav-emails">
{{#link-to "preferences.emails"}}
{{i18n "user.preferences_nav.emails"}}
{{/link-to}}
</li>
제 버전에서는 다음과 같은 코드를 사용했습니다. (이것이 여러분이 하는 방식인지 모르겠습니다. 참고로) 제안 사항에 개방적입니다 ![]()
{{#if (show-emails-preferences model siteSettings.disable_emails)}}
<li class="nav-emails">
{{#link-to "preferences.emails"}}
{{i18n "user.preferences_nav.emails"}}
{{/link-to}}
</li>
{{/if}}
여기서 show-emails-preferences 는 다음과 같이 헬퍼에서 정의됩니다:
registerUnbound("show-emails-preferences", (model, disable_emails, args) => {
let result = true;
if(disable_emails === 'yes'){
result = false;
}else if(disable_emails === 'non-staff'){
result = model.staff ? true : false;
}else{
result = true;
}
return result;
});
이 중 가치 있는 개선 사항이 있다면 알려주세요. PR을 만들 수 있습니다.
감사합니다