Linked topics (splitting and managing megatopics)

I’ve just merged a feature which creates a new linked topic automatically when a topic is auto-closed based on auto close topics post count site setting.

This feature is especially useful for automatically splitting and managing megatopics.

Here’s how it works

Let’s say auto close topics post count setting is set to 10000 posts and a topic (with title “Introduce yourself!”) just reached that limit.

Now we’ll close that topic and create a new linked topic to continue the discussion. The first post of new topic will link to all prior discussions (topics).

The original topic title will be appended with “Part 1” and the new topic title with be appended with “Part 2”.

The subsequent topics will follow similar title naming convention.

There will also be a moderator post at the bottom of auto-closed topic indicating that there is a new topic available to continue discussion.

This feature is enabled by default. To disable the feature simply disable the site setting auto close topics create linked topic.

Note that this feature will be disabled if auto close topics post count is disabled (set to 0).

33개의 좋아요

That’s awesome!

Is that something that could be used as solution to the “babble 10,000 messages issue”?

4개의 좋아요

I have a small suggestion regarding these lines of code (and whatever else I missed):

previous_topics += "- [#{topic.title}](#{topic.url})\n"
parent_topic.add_moderator_post(system_user, I18n.t('create_linked_topic.moderator_post_raw', new_title: "[#{new_topic_title}](#{new_topic.url})"))

I’d recommend replacing [title](url) with just url, and relying on existing Discourse functionality that displays the title of the topic from the URL. If I’m not mistaken, this would have the bonus of auto-updating the topic title displayed if the topic is renamed, which I think would be a nice touch.

6개의 좋아요

Yes, that’s a good idea @techAPJ we should probably do that.

Also, can we make it so there’s a single message rather than two? Why not have the “continue discussion” part be edited into the close message? Like:

This topic was automatically closed after reaching the maximum limit of 10000 replies. Continue this discussion at {link}

9개의 좋아요

Done via:

https://github.com/discourse/discourse/commit/24d1b1f159cd2330efa8c996a65a14f42682dc44

Sure, done via:

https://github.com/discourse/discourse/commit/436bd4851297d9b7c0bc1f18601da60ad09508b9

11개의 좋아요

This won’t work as well when you’re continuing the discussion from an access-restricted topic into another category without the exact same access restrictions.

1개의 좋아요

Is that a likely use case? It seems like generally the continuing topic would stay in the same category as the original topic. If this situation does happen, you say it won’t work as well, but what specifically would the behavior be?

4개의 좋아요

Even without the linking issue, I’d expect the continuing topic to have inherited the exact same access restrictions. I’d see it as a bug if it didn’t.

4개의 좋아요

Good point - it’s probably fine, then!

3개의 좋아요

Hi, very nice feature, but two issues:

  1. How do we change the “Part” (1, 2 and so on) text? In English based forums is probably fine, but we would like to be able to change it.
  2. The category of the new topic. We’ve just got our first automatically linked topic and it was “uncategorized”. What we would like is the new topic to assume the category of the previously automatically closed topic.
4개의 좋아요

Yes those are good points but the last time I checked the category was inherited properly, is that so @techAPJ?

3개의 좋아요

You’ll need to update translation for these keys. See: Contributing translations to Discourse

That is a valid bug. I’ll fix this on priority today.

I believe that might have been a manual update. I don’t see code for assigning category to linked topic.

6개의 좋아요

Fixed via:

https://github.com/discourse/discourse/commit/fec9d6e57869dc455fb02b60dbe5f287a399ee0f

9개의 좋아요

I’m also highly interested in this question.

1개의 좋아요

@elijah did you wish to continue your conversation here? This is a more correct place to have it, IMO.

3개의 좋아요

@elijah apparently you want the topic notification status (watching, tracking, muted, etc) for every single user in the old topic, to be copied across to the new topic, yes?

I see the rationale, but my worry is that could be a bit invasive for some of the users .. long topics can involve hundreds or thousands of people. Anyone else have thoughts about this, pros and cons?

4개의 좋아요

Yeah, let me repeat my suggestions here, for context.

On megatopics I was proposing either of two ways to make splitting more seamless for the less-than-regular user.

Method Watchlist Copy: when splitting a topic, copy over muted / tracking / watching status for the new topic. (And if the last topic only had copied, not set originally there: unset the the tracking status for the now closed one.) Rational: If the user hasn’t been around to read the topic for a while, but is generally interested in it, help them catchup by not highlighting the unread posts in the old topic, only the new.

Method Top Split: when splitting a topic, facilitate having posts 2 to N moved post 1 copied to a new topic (closed on creation), and replace those moved posts with a linked topic message. Rational: mucking with watch settings is messy. This allows archiving old content without breaking external links (bookmark, RSS, baked into an app, etc) or internal watch settings.

I like the top split method better, but either seems a way to help users out who are interested in very long (or long term but split) topics.

3개의 좋아요

I’m using WP and Discourse to do audio education and group reflection, and was thinking how helpful it might be if when the WP plugin creates a new topic on Discourse, an event triggers to create a linked topic as the reflection topic for that main topic. That way, it’d allow me to maintain the original topic as read-only, so people don’t see the reflections before they listen to the audio, and have the linked topic be where they go to reflect.

Similar to this:

Am I correct in assuming it may just take slightly tweaking this code here to make it happen in a new plugin?

      if SiteSetting.auto_close_topics_create_linked_topic?
        # enqueue a job to create a linked topic
        Jobs.enqueue_in(5.seconds, :create_linked_topic, post_id: @post.id)
      end

Also, I’m curious if there are enough applications for automatically creating a linked topic where it’d make sense to have it as part of Discourse Automation?

1개의 좋아요