다른 카테고리에서 주제를 이동하는 것을 방지

이 기능을 비활성화할 옵션을 찾고 있습니다. 다른 카테고리마다 다른 모더레이터 팀이 있을 때, 사전 통보 없이 갑자기 해당 카테고리에 크거나 논란이 되는 스레드가 생길 수 있기 때문에 스레드 관리에 복잡성이 생길 수 있기 때문입니다.

Access rights for moving a topic to another category 의 내용을 읽었는데, 이 작업은 Trust Level 3 사용자만 수행할 수 있다고 되어 있습니다. 하지만 테스트 환경에서는 Trust Level 2 사용자가 이 작업을 수행할 수 있었습니다.

“스태프가 게시물을 편집한 후 편집 비활성화” 옵션을 활성화해 보았지만, 스레드의 카테고리를 변경하는 기능에는 영향을 미치지 않는 것 같습니다.

무엇을 놓치고 있는 걸까요? 아마도 제가 놓치고 있는 것 같습니다 :smiley:

테스트를 해야 할 것 같습니다. 카테고리 그룹 모드가 편집이나 이동 명령을 통해 주제를 이동할 수 있을 수도 있습니다.

Customization > Plugin 커스텀 신뢰 수준도 살펴보는 것이 좋습니다.

확인해 보았으며, 이 점을 고려하겠습니다. 하지만 먼저 스태프를 제외하고는 편집 시 해당 선택 항목을 숨기는 간단한 컴포넌트를 만들어 보려고 합니다.

단순한 기능을 수행하는 플러그인을 선호합니다 :slight_smile:

@Canapin 님이 지정된 그룹에 속하지 않는 그룹에서 좋아요 버튼을 숨기는 코드를 제공해 주셨습니다.

이 코드를 기반으로 작업을 시작해 보시면 좋은 출발점이 될 수 있습니다.

링크 수정됨

@Heliosurge (그리고 어디서나 보이는 @Canapin :stuck_out_tongue: ) 정말 감사합니다. 비슷한 플러그인을 찾아서 예제로 참고할 곳이 어디인지 막 생각하고 있었거든요 :slight_smile:

아주 잘했어요! 제 경험상 팀과 이 커뮤니티는 정말 훌륭합니다. :clinking_beer_mugs::smiling_face_with_sunglasses::+1:

한번 살펴봤는데, 좋은 MVP입니다. 다만 제가 찾는 커뮤니티는 기술에 매우 밝아서, 단순히 화면에서 숨기는 것보다 DOM이 해당 컴포넌트를 완전히 렌더링하지 않는 것이 더 나을 것 같습니다.

이를 위해 플러그인이 필요한가요, 아니면 컴포넌트로 어떻게든 구현할 수 있는 건가요?

구체적으로는 역할(role)에 따라 해당 select의 HTML이 생성되는지 여부를 판단해야 합니다.

컴포넌트 하나면 충분할 것 같습니다.

저는 코더가 아닙니다.

첫 번째 게시물을 수정할 때(제목 수정이 아닌 게시물 수정 작업에서) 카테고리 선택기를 숨기려면 다음 코드가 작동합니다:

<script type="text/discourse-plugin" version="1.6.0">
    let currentUser = api.getCurrentUser();
    api.modifyClass("component:composer-title", {
      pluginId: "PreventCategoryChange",
      didInsertElement: function() {
        if(currentUser.trust_level == 1) {
            let categoryInput = document.getElementsByClassName('category-input')[0];
            let miniTagChoser = document.getElementsByClassName('mini-tag-chooser')[0];
            if(categoryInput != null) {
                categoryInput.remove();
                if(miniTagChoser != null) {
                    miniTagChoser.style.marginLeft = '0';
                }
            }
        }
      }
    });
</script>

chrome_NTAAc37JXB

저는 신뢰 수준(trust level)을 사용했지만, currentUser 객체 안에 모두 들어 있으므로 사용자 그룹을 확인하도록 수정할 수 있을 것 같습니다.

제목을 수정할 때 카테고리 선택기를 동적으로 제거하는 방법은 모르겠습니다.
아래와 같이 관련이 있어 보이는 파일들에서 방법을 찾아보실 수 있을 것 같습니다:

discourse/app/assets/javascripts/discourse/app/templates/topic.hbs at 53695e7d29e718041fa53bf4fef21e02354a4088 · discourse/discourse · GitHub

discourse/app/assets/javascripts/discourse/app/controllers/topic.js at 8fc11215e195a5bd8db130f52717c126c119432b · discourse/discourse · GitHub

@Canapin 정말 감사합니다!

제목 편집에 대해서도 무언가를 추가해야겠지만, 이미 이것만으로도 충분히 도움이 됩니다 :slight_smile:

완성되면 다른 분들도 사용할 수 있도록 여기서 테마 컴포넌트 섹션에 공유하겠습니다 :wink:

이것은 discourse/app/assets/javascripts/discourse/app/templates/topic.hbs at 53695e7d29e718041fa53bf4fef21e02354a4088 · discourse/discourse · GitHub

접근하기에 올바른 핸들러인 것 같습니다. 이제 누군가가 테마 컴포넌트를 통해 어떻게 상호작용하는지 알면 좋겠습니다… :stuck_out_tongue:

신들의 사랑으로, 제목 편집이 트리거되는 시점을 감지할 수 있는 훅(hook)을 도저히 찾을 수가 없어요. 제가 무엇에 리스닝(listen)을 해야 하는지 아시는 분 계신가요?

토픽의 첫 번째 메시지를 편집할 때 카테고리 변경이 숨겨지는 기능은 정상적으로 작동하거든요. 편집 모드일 때만 감지하는 방식이니까요.

잠 못 드는 좋은 친구 덕분에 올바른 훅을 어디에서 찾아야 하는지 알아냈습니다 :stuck_out_tongue:

바로 이거예요. 폼의 시각적 요소도 조정하고, 카테고리 편집 접근이 허용되는 최소 신뢰 수준을 선택할 수 있게 해줍니다 (디스커스 기본 설정과 일치하도록 기본 신뢰 수준 0으로 설정됨)

이제 Customization > Plugin 섹션에서 새 주제를 만들러 가볼게요.

처음에 올바른 방향으로 이끌어주셔서 정말 감사합니다 @Canapin :heart_eyes:

코드를 확인해 보았는데, 정말 잘하셨네요 :+1:

제가 여러분에게서 더 많이 배운 것 같습니다!

참고로, 여러분이 만든 것은 #customization:theme-component이지 #customization:plugin이 아닙니다 :slight_smile:

참고로, trusted users can edit others가 활성화된 상태라면 TL3과 TL4 사용자는 어떤 주제도 재분류할 수 있습니다. TL0/1/2 사용자는 자신의 주제에서만, 그리고 자신의 편집 기간 내에만 이 작업을 수행할 수 있습니다. ^(TL0과 TL1은 post edit time limit으로, TL2와 TL3은 tl2 post edit time limit으로 설정됩니다) 첫 번째 게시물을 게시물 렌치(post wrench)로 잠가두면 카테고리(그리고 제목 및 태그) 편집도 방지되어야 합니다.

사용 사례를 100% 정확히 파악하고 있는지는 모르겠지만, 해결책을 찾았으니 다행입니다. :slightly_smiling_face::+1:

아, 네, 이 옵션에 대해 몰랐습니다:

이 옵션은 카테고리 모더레이터도 포함하여 어떤 수정도 방지합니다(삭제만 가능).

하지만 첫 게시물 잠금은 토픽 타이머나 자동화 작업을 통해 자동화할 수 없습니다.

네, 그 점은 알고 있었습니다.

다만, 제 의도는 카테고리를 오가는 일이 여러 번 발생하면, 어떤 주제가 처음에는 한 카테고리에 있다가 나중에 다른 카테고리로 이동하는 등의 상황이 반복되어 관리가 복잡해질 수 있기 때문에, 이를 방지하는 것이었습니다.

테마 컴포넌트이므로 추가하는 것이 중요할 것 같습니다. 사용자가 JavaScript를 주입하여(아마도) 이 제한을 우회하거나, 사용 가능한 경우 안전 모드를 활성화할 수 있기 때문입니다(enable safe mode 설정 참조).

더 안전한 방식으로 구현하려면 플러그인이 필요합니다.

네, 그래서 플러그인도 살펴보고 있었지만, 첫 버전이라면 컴포넌트로 충분합니다.