Discourse Events

:partying_face: This plugin is now bundled with Discourse core as part of Bundling more popular plugins with Discourse core. If you are self-hosting and use the plugin, you need to remove it from your app.yml before your next upgrade.

2개의 좋아요

We really need the ability to limit the number of participants for events, as many of our events have limited capacity.

Currently, the event system does not allow us to:

  • set a maximum number of participants,
  • see who signed up first (no registration timestamps),
  • manage a waitlist or notify people when a spot opens up.

We would find the following features very helpful:

  1. A participant limit (cap) that prevents more users from signing up once full.
  2. A waitlist for those who still want to attend after the event is full.
  3. Automatic notifications when a spot becomes available.
  4. Optional timestamps to see the order of sign-ups (useful for fair prioritization).

This would be incredibly useful for communities running in-person or capacity-limited events.

Is anything like this already planned or in development?
Or are there any known workarounds for this use case?

Thanks so much in advance!

6개의 좋아요

Thanks Aurora — really excited to hear that native calendar work is active again!

We’d also like to surface one additional high-impact request that’s come up in a number of community discussions: iCal feed sync.

This was broken out into its own dedicated topic here:

The ability to subscribe to external .ics feeds (such as school timetables, civic calendars, or organizational events) and have them reflected in a Discourse topic calendar would make this feature vastly more useful for many real-world deployments. Without it, we’re forced to manually copy events over, which is error-prone and hard to maintain.

We’d really appreciate any comment from the Discourse team about whether parts of that proposal — like one-way iCal sync, feed refresh interval settings, or optional event tagging — are in scope for the upcoming implementation.

Either way, thanks again for breathing new life into Discourse Calendar — we’re looking forward to what’s ahead!

5개의 좋아요

if you want to show the create event button from the composer directly like below , use the code below in your theme’s header. admin>appearance>theme>edit>edit code>head(make sure it is placed between tags)

Tested on discourse 3.5.0.beta9-dev on desktop in firefox

 <!-- Custom Create Event Button (Icon-based, Language-proof) -->
<script>
(()=>{const e=".d-editor-button-bar",t=".btn.no-text.fk-d-menu__trigger.toolbar-menu__options-trigger.toolbar__button.options.toolbar-popup-menu-options",n=".fk-d-menu__inner-content",o=".d-modal.fk-d-menu-modal",c=e=>{const t=e.querySelector('svg use[href="#calendar-day"]');return t?t.closest("button"):null},r=(e,t,n=4e3)=>new Promise((o,c)=>{const r=t(e);if(r)return o(r);const l=new MutationObserver(()=>{const n=t(e);n&&(l.disconnect(),o(n))});l.observe(e,{childList:!0,subtree:!0}),setTimeout(()=>{l.disconnect(),c()},n)}),l=(e=4e3)=>{const t=new MutationObserver(()=>{document.querySelector(o)&&t.disconnect()});t.observe(document.body,{childList:!0,subtree:!0}),setTimeout(()=>t.disconnect(),e)},s=e=>{if(e.querySelector(".custom-create-event-btn"))return;const o=document.createElement("button");o.className="btn no-text btn-icon toolbar__button link custom-create-event-btn",o.title="Create event",o.innerHTML='<svg class="fa d-icon d-icon-calendar-day svg-icon"><use href="#calendar-day"></use></svg>',e.appendChild(o),o.addEventListener("click",async()=>{const e=document.querySelector(t);if(!e)return;e.click();let o=document.querySelector(n);o||(await new Promise((e,t)=>{const c=new MutationObserver(()=>{(o=document.querySelector(n))&&(c.disconnect(),e())});c.observe(document.body,{childList:!0,subtree:!0}),setTimeout(()=>{c.disconnect(),t()},2e3)}));try{(await r(o,c)).click(),l()}catch{}})},u=new MutationObserver(()=>{const t=document.querySelector(e);t&&s(t)});u.observe(document.body,{childList:!0,subtree:!0});const d=document.querySelector(e);d&&s(d)})();
</script>

I tried the script, the event creation button is created correctly, but when I click on it, I get the same contextual menu as the plus button. I may have made a mistake.

1개의 좋아요

After the update it has improved, it appears at least only “Create event”

Screenshot is german, sorry.

Hi,

This works on the latest with 3.5.0.beta9-dev, I don’t know your version?

And this is javascript so you should provide the JS error from the console when you press F12 in your broswer.(you may click on the button once the console is open and this should provide info over what happens at this moment)

I have the same version 3.5.0.beta9-dev
Here is the console message


I must be doing something wrong :sweat_smile:

I don’t use Edge, can you try again with the script that I’ve just updated in the original post as I found mistakes that I corrected. If it does not work I will update later after I install Edge.

I’ve just updated the script to be more mobile compatible, it should work now, please copy paste the script from the original post

I confirm the updated code works fine in edge. If you have something like ublock you may always disable it for your discourse page but I don’t think its related.

Sorry, still the same problem for me, I must be doing something wrong

Yet I paste your script here correctly

1개의 좋아요

Allright, thanks to Gilles situation, I could setup a selector based on the .svg class of the icon that is unique instead of a title attribute that would vary according to language, the script is also now minified and IIFE wrapped.

You may find the updated script here Discourse Calendar and Events - #535 by opcourdis

1개의 좋아요

Thank you for your help :+1:

1개의 좋아요

스크립트를 #customization:theme-component로 패키징하고, 적용 대상 카테고리를 선택할 수 있도록 해 주시면 매우 유용할 것 같습니다.

제가 염두에 둔 사용 사례는 ‘이벤트’ 카테고리로, 이벤트 게시를 매우 명확하고 눈에 띄게 만들고 싶습니다.

아마도 이 기능은 다른 훌륭한 개선 사항과 함께 패키징할 수도 있을 것입니다.

1개의 좋아요

You may use what’s below and modify the first conditions to specify your categories, and to make the button more visible css will do it: .btn.no-text.btn-icon.toolbar__button.link.custom-create-event-btn {
order: -1;
}

<script>(()=>{if(!(document.body.classList.contains("category-events")||document.body.classList.contains("category-event2")||document.body.classList.contains("category-event3")))return;const e=".d-editor-button-bar",t=".btn.no-text.fk-d-menu__trigger.toolbar-menu__options-trigger.toolbar__button.options.toolbar-popup-menu-options",n=".fk-d-menu__inner-content",o=".d-modal.fk-d-menu-modal",c=e=>{const t=e.querySelector('svg use[href="#calendar-day"]');return t?t.closest("button"):null},r=(e,t,n=4e3)=>new Promise((o,c)=>{const r=t(e);if(r)return o(r);const l=new MutationObserver(()=>{const n=t(e);n&&(l.disconnect(),o(n))});l.observe(e,{childList:!0,subtree:!0}),setTimeout(()=>{l.disconnect(),c()},n)}),l=(e=4e3)=>{const t=new MutationObserver(()=>{document.querySelector(o)&&t.disconnect()});t.observe(document.body,{childList:!0,subtree:!0}),setTimeout(()=>t.disconnect(),e)},s=e=>{if(e.querySelector(".custom-create-event-btn"))return;const o=document.createElement("button");o.className="btn no-text btn-icon toolbar__button link custom-create-event-btn",o.title="Create event",o.innerHTML='<svg class="fa d-icon d-icon-calendar-day svg-icon"><use href="#calendar-day"></use></svg>',e.appendChild(o),o.addEventListener("click",async()=>{const e=document.querySelector(t);if(!e)return;e.click();let o=document.querySelector(n);o||(await new Promise((e,t)=>{const c=new MutationObserver(()=>{(o=document.querySelector(n))&&(c.disconnect(),e())});c.observe(document.body,{childList:!0,subtree:!0}),setTimeout(()=>{c.disconnect(),t()},2e3)}));try{(await r(o,c)).click(),l()}catch{}})},u=new MutationObserver(()=>{const t=document.querySelector(e);t&&s(t)});u.observe(document.body,{childList:!0,subtree:!0});const d=document.querySelector(e);d&&s(d)})();</script>



Thanks for the suggestion, I am still a bit new to discourse and will check the theme component, the button placement is better indeed but my other script for event participant limit might soon not be necessary because of this FEATURE: introduce max attendees for events by SamSaffron · Pull Request #34313 · discourse/discourse · GitHub

4개의 좋아요

After upgrading to the latest version of Discourse and the discourse-calendar plugin, I am seeing the following warning as an admin:

⚠️ Posts may not display correctly because one of the post content decorators on your site raised an error.
Caused by plugin 'discourse-calendar'
(this message is only shown to site administrators)
  • The calendar plugin is no longer working: calendar content and events are not displayed in topics.
  • The plugin was working correctly prior to the recent upgrade.
  • My Discourse site and all official plugins are now up-to-date.

저희 포럼에서는 Discourse Post Event 플러그인을 사용하고 있습니다.
현재 사용자가 이벤트에 **참가(RSVP)**하면, 해당 주제가 자동으로 “Watching(관심 등록)” 상태로 설정됩니다. 이로 인해 이벤트 주제에 새로운 답글이 달릴 때마다 모든 참가자에게 알림이 전송됩니다.

누군가 이벤트에 참가하더라도 기본 알림 수준을 “Normal(일반)”로 유지하길 원합니다.

사이트 설정을 확인해 보았지만, 이를 변경할 수 있는 옵션을 찾지 못했습니다.
사용자가 이벤트에 RSVP할 때 발생하는 이 자동 “Watching” 동작을 비활성화하거나 변경할 수 있는 방법이 있을까요?

1개의 좋아요

그렇지는 않은 것 같습니다. 하지만 유용한 기능 요청이 될 수 있겠네요.

유용한 우회 방법으로는 토론을 닫아 답변을 막고, 대신 채팅 채널을 연결하는 것입니다(채팅 채널은 기본적으로 알림을 보내지 않습니다).

“오늘” 버튼의 라벨이 오해를 불러일으킬 수 있습니다.

이 버튼은 실제로는 현재 날짜로 이동하는 것이 아니라, 활성 기간 탭(일/주/월/년)의 현재 뷰로 이동합니다. 일, 주, 월 탭에서는 현재 날짜가 화면에 표시되도록 하지만, 년 탭에서는 현재 연도로만 이동합니다(항상 1월부터 시작함).

아래와 같이 개선하는 것이 좋을 것입니다.

  • 기능을 더 정확하게 설명할 수 있도록 "현재"와 같이 이름을 변경하거나
  • 더 나은 방법으로는, 년 목록에서 현재 연도로만 이동하는 것이 아니라 현재 날짜까지 스크롤되도록 하는 것입니다.
1개의 좋아요