투표 기본값을 무시하여 "public=true" 설정

이 문제로 어려움을 겪는 사이트가 얼마나 될지 궁금합니다. 저도 기본적으로 공개(Public)로 설정되어 있으면 좋겠습니다.

저도 UI가 더 개선될 수 있다고 생각합니다.

  • 다중 투표(MultiVote Polls)에서 단일 투표(Single Vote Polls)를 만들 수 있으므로, 제 생각에는 ‘단일’ 옵션이 필요 없다고 봅니다.
  • 확장 UI를 항상 표시하는 것이 좋습니다.
  • 기본적으로 Public=True로 설정하거나, 구현이 더 쉽다면 Anonymous=False로 설정하는 옵션이 있으면 좋겠습니다.
  • 공개(Public) 체크박스를 상단으로 이동하거나, 공개 투표와 익명 투표를 위한 UI를 별도로 만드는 것이 좋습니다. 너무 쉽게 놓치기 때문입니다.

테마 컴포넌트 변경에는 익숙하지 않습니다. 현재까지 누군가가 만든 쉬운 우회 방법이 있다면, 구현 방법과 Discourse 업데이트 시 확인해야 할 사항에 대한 설명과 함께 공유해 주시면 정말 좋겠습니다.

저는 초보이지만 문제를 해결하는 데 관심이 있어서 chat-gpt에게 질문했습니다:

여기가 그 답변입니다:

발견하신 스크립트는 좋은 시작입니다. 이 스크립트는 poll-ui-builder 컨트롤러를 수정하여 컨트롤러의 onShow() 함수가 호출될 때 publicPoll 프로퍼티를 true로 설정합니다. 이는 실제로 Theme Component로 추가될 예정인 것입니다.

그러나 실행 순서 때문에 코드가 작동하지 않을 수 있습니다. 원래의 onShow() 메서드가 publicPoll을 false로 설정한 후, 수정된 코드가 그 이후에 publicPoll을 true로 설정하기 때문입니다.

올바른 방법은 먼저 부모의 onShow 메서드를 호출한 다음 publicPoll을 true로 설정하는 것입니다:

<script type="text/discourse-plugin" version="0.8">
api.modifyClass("controller:poll-ui-builder", {
  onShow() {
    this._super(...arguments);
    this.set('publicPoll', true);
  }
});
</script>

이 스크립트를 테마에 추가하려면 다음 단계를 따르세요:

  1. Discourse 관리자 대시보드로 이동합니다.
  2. “Customize” 섹션에서 "Themes"를 클릭합니다.
  3. 수정하려는 테마를 선택합니다.
  4. 테마 편집 화면에서 "Edit CSS/HTML"을 클릭합니다.
  5. 왼쪽 사이드바에서 "</> Common"을 클릭합니다.
  6. 위의 스크립트를 “</> Common” 섹션에 붙여넣습니다.
  7. “Save” 버튼을 클릭합니다.

이렇게 하면 변경 사항이 테마에 적용됩니다. 테마 변경 사항은 해당 테마를 사용하는 사용자에게만 적용된다는 점을 기억하세요. 여러 테마를 사용하고 있다면 이 수정 사항을 각각의 테마에 추가해야 합니다.

또한 변경 사항이 올바르게 로드되도록 브라우저 캐시를 비우거나 하드 리로드를 수행하는 것을 잊지 마세요.

저는 포럼의 관리자분과 함께 이 단계를 따르려고 하지만, 시간이 좀 걸릴 것입니다. 만약 여기에서 다른 분들이 먼저 이걸 시도해 보고 피드백을 주신다면 매우 감사하겠습니다.

또 하나, 제가 바꾸고 싶은 것은 UI의 동작 방식입니다. 간단한 화면을 건너뛰고 싶어서 다시 chat-gpt에게 질문했습니다:

현재 코드에서 확장된 뷰는 showAdvanced 프로퍼티에 의해 제어됩니다. 이 값이 true로 설정되면 고급 뷰가 표시됩니다.

항상 고급 뷰를 표시하려면 poll-ui-builder 컨트롤러의 onShow() 메서드를 수정하여 showAdvanced를 true로 설정할 수 있습니다. 이전에 만든 테마 컴포넌트에 이 수정 사항을 추가할 수 있습니다. 여기 업데이트된 스크립트가 있습니다:

<script type="text/discourse-plugin" version="0.8">
api.modifyClass("controller:poll-ui-builder", {
  onShow() {
    this._super(...arguments);
    this.set('publicPoll', true);
    this.set('showAdvanced', true);
  }
});
</script>

이전에 설명한 단계를 따라 이 스크립트를 테마에 추가하는 것을 잊지 마세요. 스크립트가 저장되면 투표 UI가 로드될 때 항상 고급 뷰가 표시되어야 합니다.

다시 한번, 변경 사항이 올바르게 로드되도록 브라우저 캐시를 비우거나 하드 리로드를 수행하는 것을 잊지 마세요.

어떻게든 제가 직접 시도하고 테스트하고 싶지만, 이전에 언급했듯이 저는 단지 모더레이터일 뿐 사이트의 관리자가 아니므로, 며칠 또는 몇 주가 걸릴 것입니다.

해결하신 것을 정말 기쁘게 생각합니다. :+1:

참고로, 여러 프로퍼티를 수정하고 싶다면 이 문법을 사용할 수 있습니다:

    this.setProperties({
        'publicPoll': true,
        'showAdvanced': true
    });

실제로는 제가 직접 한 것이 아니라, 이 링크에서 제공된 코드를 Chat-GPT에 입력했을 뿐입니다:

그리고 @JammyDodger 님이 첫 번째로 제안한 내용을 바탕으로 제 두 가지 요구사항을 해결할 수 있는지 물어보았습니다 :smiley:

작동이 잘되면 좋겠고, discourse에 대해 또 하나의 멋진 점을 배운 셈입니다.

테스트해 봤는데 작동합니다! :partying_face:

정말 훌륭하네요. :slight_smile: 감사합니다. :pray:

그리고 테마 컴포넌트로 제공되는 모습은 다음과 같습니다:

우리 인스턴스에서는 더 이상 작동하지 않습니다.
해당 코드가 여전히 남아 있는지 확인할 수 없었습니다. 그 권한이 없기 때문입니다.

@JammyDodger 님과 @nathank 님의 포럼에서는 여전히 작동하나요?

지금 제 테스트 사이트에서도 작동하지 않는 것 같습니다. 최근 변경 사항에 맞게 업데이트가 필요할 수도 있겠네요.

이 내용을 Development 토픽으로 분리하겠습니다 :+1:

이 모달이 호출되던 것이 다음과 같이 리팩토링되었음을 확인했습니다:

하지만 이를 API를 통해 어떻게 상호작용해야 하는지 파악하지 못하고 있습니다. 새로운 모달 파일은 여기에 있습니다:

https://github.com/discourse/discourse/blob/main/plugins/poll/assets/javascripts/discourse/components/modal/poll-ui-builder.js

문서에 이에 대한 설명이 없는 것으로 보이므로, 이제 이 모달을 어떻게 호출해야 하는지 알 수 없습니다. 도와주실 수 있을까요?

좋은 소식입니다. :slight_smile: 이 문제에 대해 뭔가 해결책이 있을 것 같은데요…