manut
(Manuel Tancoigne)
9월 26, 2025, 1:56오후
1
안녕하세요!
이벤트 커스텀 태그와 새로운 WYSIWYG ProseMirror 편집기에서 문제가 발생하고 있습니다. 이벤트 양식에서 입력한 커스텀 필드가 생성된 문자열에 포함되지 않습니다. 마크다운 편집기를 사용하면 이전과 동일하게 정상적으로 작동합니다.
재현 방법:
Discourse Calendar 플러그인을 활성화합니다.
플러그인 설정에서 커스텀 필드를 하나 추가합니다.
새 게시물을 위한 양식을 엽니다.
ProseMirror 편집기를 선택합니다.
커스텀 필드 값을 가진 이벤트를 생성합니다(옵션 > 이벤트 생성).
이벤트를 확인합니다.
마크다운 편집기로 전환합니다.
현재 발생하는 현상
[event] 태그에 커스텀 필드가 없습니다.
기대되는 동작
[event] 태그에 커스텀 필드가 포함되어야 합니다.
참고 사항
ProseMirror 대신 마크다운 편집기로 시작하여 동일한 작업을 수행하면, [event] 태그에 커스텀 필드가 정상적으로 표시됩니다.
2개의 좋아요
manut
(Manuel Tancoigne)
9월 26, 2025, 2:07오후
2
새 이벤트를 검증할 때 toolbarEvent에서 어떤 일이 일어나고 있는지 조금 조사해 보았습니다: addText() 메서드는 두 경우 모두 올바른 마크업을 받는 것으로 보입니다:
[event start="..." status="..." timezone="..." end="..." cf_1="abcd"]\n[/event]
manut
(Manuel Tancoigne)
9월 27, 2025, 4:11오전
3
도움이 된다면, 문제를 재현하기 위한 QUnit 테스트를 여기에 공유합니다:
// plugins/discourse-calendar/test/javascripts/acceptance/post-event-builder-custom-tags-test.js
import { click, find,visit, fillIn } from "@ember/test-helpers";
import { test} from "qunit";
import { acceptance } from "discourse/tests/helpers/qunit-helpers";
import selectKit from "discourse/tests/helpers/select-kit-helper";
import { i18n } from "discourse-i18n";
acceptance("Discourse Calendar - New event form with custom fields", function (needs) {
needs.user({ admin: true, can_create_discourse_post_event: true });
needs.settings({
discourse_local_dates_enabled: true,
calendar_enabled: true,
discourse_post_event_enabled: true,
discourse_post_event_allowed_on_groups: "",
discourse_post_event_allowed_custom_fields: "my_custom_field",
coopaname_integration_enabled: false,
});
test("filling the form with MD editor fills the custom fields", async function (assert) {
await ensureEventTagHasFields(assert, 'md');
});
test("filling the form with WYSIWYG editor fills the custom fields", async function (assert) {
await ensureEventTagHasFields(assert, 'wysiwyg');
});
});
async function ensureEventTagHasFields(assert, editorType){
await visit("/");
await click('#create-topic');
const categoryChooser = selectKit(".category-chooser");
await categoryChooser.expand();
await categoryChooser.selectRowByValue(2);
await switchEditorTo(editorType);
await click(".toolbar-menu__options-trigger");
await click(`button[title='${i18n("discourse_post_event.builder_modal.attach")}']`);
await fillIn('input.custom-field-input', 'some value')
await click('.d-modal__footer > button');
await switchEditorTo('md');
const fields = ['start', 'status', 'timezone', 'myCustomField'];
const content = await find(".d-editor-input").value;
fields.forEach((field) => {
assert.true(content.includes(`${field}="`), `${field} is present in event tag`);
});
}
async function switchEditorTo(type){
const editorSwitch = find('button.composer-toggle-switch');
const isInMarkdown = editorSwitch.attributes['aria-checked'].value === 'false';
if (isInMarkdown && type === 'wysiwyg' || !isInMarkdown && type === 'md') {
await click(editorSwitch);
}
}
manut
(Manuel Tancoigne)
9월 29, 2025, 2:09오후
4
물론, 테스트에서 coopaname_integration_enabled: false, 이 라인을 제거하세요
manut
(Manuel Tancoigne)
10월 29, 2025, 2:10오후
5
같은 기능을 가진 다른 플러그인을 찾지 못해 문제점을 파악하기가 어렵습니다.
폼을 검증할 때 this.args.model.toolbarEvent.addText()에 올바른 텍스트를 전달하고 있습니다.
console.log(TM)를 몇 번 찍어보니 text-manipulation.js#addText()에서 this.convertFromMarkdown(text)가 호출되고 있었습니다. 문제가 여기에서 발생하는 것 같습니다. 어떤 스키마가 강제되고 있는데, 이 스키마에는 사용자 정의 필드가 포함되어 있지 않습니다.
여전히 조사 중입니다 …
manut
(Manuel Tancoigne)
10월 29, 2025, 2:25오후
6
이 문제는 에디터 확장 프로그램 discourse-calendar/assets/javascripts/discourse/pre-initializers/rich-editor-extension.js에서 비롯됩니다. convertFromMarkdown() 함수에서 사용되는 속성 목록은 EVENT_ATTRIBUTES 상수로 정의되어 있습니다. 이 목록에 사용자 지정 필드를 추가하면 정상적으로 작동합니다.
const EVENT_ATTRIBUTES = {
// ...
chatChannelId: { default: null },
myCustomField: {default: null}
};
해당 파일에는 사용자 지정 필드에 대한 정보가 전혀 없으며, 이 상수에 모든 사용자 지정 필드를 어떻게 추가해야 하는지 모르겠습니다. 이 확장 프로그램은 처리 과정의 초기 단계에서 등록되는 것 같습니다.
새로운 에디터는 비활성화할 수 없어 플러그인이 사용 불가능한 상태이며, 이로 인해 Discourse 3.4에 묶여 있는 상황입니다. 아이디어가 있으시면 알려주시면 감사하겠습니다.
renato
(Renato Atilio)
10월 29, 2025, 2:30오후
7
맞습니다, 현재 리치 에디터 에서는 커스텀 필드를 지원하지 않습니다. 앞으로의 최선의 방향을 조사해 보겠습니다.
manut:
비활성화할 수 없는 새 에디터
비활성화할 수 있습니다. 관리자라면 콘솔을 통해 SiteSettings.rich_editor = false를 설정할 수 있으며, 이러한 경우를 대비해 콘솔은 여전히 최후의 수단으로 사용 가능합니다.
1개의 좋아요
manut
(Manuel Tancoigne)
10월 29, 2025, 2:37오후
8
답변해 주셔서 감사합니다. 지금은 편집기를 비활성화하겠습니다.
renato
(Renato Atilio)
에 닫힘
7월 21, 2026, 12:46오후
13