Discourse Calendar (and Event)

: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 likes

We hebben echt de mogelijkheid nodig om het aantal deelnemers te beperken voor evenementen, aangezien veel van onze evenementen een beperkte capaciteit hebben.

Momenteel staat het evenementsysteem ons niet toe om:

  • een maximaal aantal deelnemers in te stellen,
  • te zien wie zich als eerste heeft aangemeld (geen registratietijdstempels),
  • een wachtlijst te beheren of mensen te waarschuwen wanneer er een plek vrijkomt.

De volgende functies zouden erg nuttig zijn:

  1. Een deelnemerslimiet (maximum) dat voorkomt dat meer gebruikers zich aanmelden zodra het vol is.
  2. Een wachtlijst voor degenen die nog steeds willen deelnemen nadat het evenement vol is.
  3. Automatische meldingen wanneer er een plek beschikbaar komt.
  4. Optionele tijdstempels om de volgorde van aanmeldingen te zien (nuttig voor eerlijke prioritering).

Dit zou ongelooflijk nuttig zijn voor communities die evenementen organiseren met fysieke aanwezigheid of een beperkte capaciteit.

Staat zoiets al gepland of in ontwikkeling?
Of zijn er bekende oplossingen voor dit gebruiksscenario?

Alvast hartelijk dank!

4 likes

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!

4 likes

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 like

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

Screenshot is german, sorry.

Hoi,

Dit werkt op de nieuwste met 3.5.0.beta9-dev, ik weet jouw versie niet?

En dit is javascript dus je moet de JS-fout uit de console geven wanneer je op F12 drukt in je browser. (je kunt mogelijk op de knop klikken zodra de console open is en dit zou informatie moeten geven over wat er op dat moment gebeurt)

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


I must be doing something wrong :sweat_smile:

Ik gebruik Edge niet, kun je het opnieuw proberen met het script dat ik zojuist in het originele bericht heb bijgewerkt, omdat ik fouten heb gevonden die ik heb gecorrigeerd. Als het niet werkt, zal ik het later bijwerken nadat ik Edge heb geĂŻnstalleerd.

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

Ik bevestig dat de bijgewerkte code goed werkt in Edge. Als je zoiets als uBlock hebt, kun je het altijd uitschakelen voor je Discourse-pagina, maar ik denk niet dat het hiermee te maken heeft.

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

Yet I paste your script here correctly

1 like

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 Event) - #535 by opcourdis

1 like

Thank you for your help :+1:

1 like

Het zou erg nuttig zijn om uw script te verpakken als een Theme component, en de categorieën waar het van toepassing is selecteerbaar te maken.

De use case die ik in gedachten heb, is een ‘Evenementen’-categorie, waar ik het plaatsen van evenementen superduidelijk wil maken.

1 like

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 likes

Na het upgraden naar de nieuwste versie van Discourse en de discourse-calendar plugin, zie ik de volgende waarschuwing als beheerder:

⚠ Posts worden mogelijk niet correct weergegeven omdat een van de post content decorators op uw site een fout heeft veroorzaakt.
Veroorzaakt door plugin 'discourse-calendar'
(dit bericht wordt alleen getoond aan sitebeheerders)
  • De kalenderplugin werkt niet meer: kalenderinhoud en evenementen worden niet weergegeven in onderwerpen.
  • De plugin werkte correct vóór de recente upgrade.
  • Mijn Discourse-site en alle officiĂ«le plugins zijn nu up-to-date.

We’re using the Discourse Post Event plugin on our forum.
Currently, when a user joins (RSVPs) an event, the topic is automatically set to “Watching”, which means every new reply to the event topic triggers a notification to all participants.

We’d like to keep the notification level as “Normal” by default, even after someone joins an event.

I’ve checked the site settings but couldn’t find an option that works.
Is there a way to disable or change this auto “Watching” behavior when users RSVP to an event?

I don’t think so. But this would be a useful feature request.

A useful workaround might be to close the topic to stop replies, but have a chat channel associated with it (these don’t notify by default).

The label on the “Today” button can be misleading.

The button doesn’t actually navigate to the current day, it navigates to the current view of the active timeframe tab (Day/Week/Month/Year). On Day, Week and Month this does bring the current day into view. But on Year, it only navigates to the current year (which always starts in January).

It should probably be

  • renamed to more accurately describe it’s functionality, like “Current”
  • or, maybe better, not only navigate to the current year, but scroll to the current day on the Year list
1 like