Discourse Calendar (and Event)

:partying_face: Этот плагин теперь включён в ядро Discourse в рамках Bundling more popular plugins with Discourse core. Если вы используете самостоятельное размещение и применяете этот плагин, вам необходимо удалить его из файла app.yml перед следующим обновлением.

2 лайка

Нам действительно необходима возможность ограничивать количество участников мероприятий, так как многие из наших событий имеют ограниченную вместимость.

В настоящее время система мероприятий не позволяет нам:

  • установить максимальное количество участников,
  • видеть, кто зарегистрировался первым (отсутствуют временные метки регистрации),
  • управлять очередью ожидания или уведомлять людей, когда освободится место.

Нам были бы крайне полезны следующие функции:

  1. Ограничение количества участников (лимит), предотвращающее регистрацию новых пользователей после заполнения.
  2. Очередь ожидания для тех, кто всё ещё хочет посетить мероприятие после того, как оно заполнится.
  3. Автоматические уведомления, когда освобождается место.
  4. Опциональные временные метки для отображения порядка регистрации (полезно для справедливой приоритизации).

Это было бы невероятно полезно для сообществ, проводящих очные мероприятия или события с ограниченной вместимостью.

Планируется ли что-то подобное уже сейчас или находится в разработке?
Или существуют ли известные обходные пути для данного сценария использования?

Заранее большое спасибо!

5 лайков

Спасибо, Аурора — мы очень рады услышать, что работа над нативным календарем снова активна!

Мы также хотели бы вынести на обсуждение ещё один важный запрос, который неоднократно возникал в дискуссиях сообщества: синхронизация через iCal-каналы.

Эта тема была выделена в отдельную ветку здесь:

Возможность подписки на внешние .ics-каналы (например, школьное расписание, городские календари или мероприятия организаций) и их отображение в календаре темы на Discourse сделает эту функцию гораздо более полезной для многих реальных сценариев использования. Без неё нам приходится вручную копировать события, что чревато ошибками и трудно поддерживается.

Мы были бы очень признательны за любой комментарий от команды Discourse о том, входят ли части этого предложения — например, односторонняя синхронизация iCal, настройки интервала обновления каналов или необязательная маркировка событий — в план предстоящей реализации.

В любом случае, ещё раз спасибо за то, что вдохнули новую жизнь в Discourse Calendar — мы с нетерпением ждём, что нас ждёт впереди!

4 лайка

Если вы хотите отображать кнопку «Создать событие» прямо в редакторе, как показано ниже, добавьте этот код в заголовок вашей темы: администрирование > внешний вид > тема > редактировать > редактировать код > head (убедитесь, что код размещён между тегами).

Протестировано на Discourse 3.5.0.beta9-dev на рабочем столе в браузере Firefox.



```javascript

Я попробовал скрипт: кнопка «Создание события» создается корректно, но при нажатии на неё появляется то же контекстное меню, что и у кнопки «Ещё». Возможно, я что-то сделал неправильно.

1 лайк

После обновления ситуация улучшилась, теперь отображается, по крайней мере, только «Создать событие».

Скриншот на немецком, извините.

Привет,

У меня это работает в последней версии 3.5.0.beta9-dev. А какая у вас версия?

Кроме того, это JavaScript, поэтому, пожалуйста, предоставьте ошибку JS из консоли, которую можно открыть нажатием F12 в вашем браузере. (Вы можете нажать на кнопку, когда консоль открыта, и это должно предоставить информацию о том, что происходит в этот момент).

У меня та же версия 3.5.0.beta9-dev
Вот сообщение из консоли


Я обязательно что-то делаю неправильно :sweat_smile:

Я не использую Edge. Попробуйте ещё раз со скриптом, который я только что обновил в первом сообщении, так как я нашёл и исправил в нём ошибки. Если это не сработает, я обновлю его позже, после установки Edge.

Я только что обновил скрипт для лучшей совместимости с мобильными устройствами, теперь он должен работать. Пожалуйста, скопируйте и вставьте скрипт из оригинального поста.

Я подтверждаю, что обновленный код работает корректно в Edge. Если у вас установлен uBlock, вы всегда можете отключить его для страницы Discourse, но я не думаю, что это связано с проблемой.

Извините, у меня всё ещё та же проблема, я, наверное, что-то делаю не так

При этом я вставляю твой скрипт именно сюда

1 лайк

Всё в порядке, благодаря ситуации с Жилем я смог настроить селектор на основе уникального класса .svg иконки вместо атрибута title, который меняется в зависимости от языка. Скрипт теперь также минифицирован и обернут в IIFE.

Обновлённый скрипт можно найти здесь: Discourse Calendar (and Event) - #535 by opcourdis

1 лайк

Спасибо за твою помощь :+1:

1 лайк

Было бы очень полезно, если бы вы оформили свой скрипт как #theme-component и сделали возможность выбора категорий, к которым он применяется.

Мой сценарий использования — категория «События», где я хочу сделать публикацию событий максимально заметной.

Возможно, это также можно объединить с вашим другим отличным улучшением.

1 лайк

Вы можете использовать приведенное ниже и изменить первые условия, чтобы указать свои категории, а также сделать кнопку более заметной с помощью CSS: .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>



Спасибо за предложение. Я ещё немного новичок в Discourse и изучу компонент темы. Размещение кнопки действительно стало лучше, но мой другой скрипт для ограничения количества участников события может скоро стать ненужным благодаря этому: FEATURE: introduce max attendees for events by SamSaffron · Pull Request #34313 · discourse/discourse · GitHub

4 лайка

После обновления до последней версии Discourse и плагина discourse-calendar я вижу следующее предупреждение в качестве администратора:

⚠️ Посты могут отображаться некорректно, так как один из декораторов содержимого постов на вашем сайте вызвал ошибку.
Причина: плагин 'discourse-calendar'
(это сообщение отображается только администраторам сайта)
  • Плагин календаря больше не работает: содержимое календаря и события не отображаются в темах.
  • Плагин работал корректно до недавнего обновления.
  • Мой сайт Discourse и все официальные плагины теперь обновлены до актуальных версий.

Мы используем плагин Discourse Post Event на нашем форуме.
В настоящее время, когда пользователь присоединяется (RSVP) к мероприятию, тема автоматически переводится в статус «Слежение», что означает: каждое новое сообщение в теме мероприятия отправляет уведомление всем участникам.

Мы хотим, чтобы уровень уведомлений по умолчанию оставался «Обычным», даже после того, как кто-то присоединится к мероприятию.

Я проверил настройки сайта, но не смог найти подходящую опцию.
Есть ли способ отключить или изменить это автоматическое поведение «Слежение», когда пользователи RSVP на мероприятие?

1 лайк

По-моему, нет. Но это была бы полезная идея для улучшения.

В качестве полезного обходного пути можно закрыть тему, чтобы остановить ответы, но связать с ней чат-канал (по умолчанию уведомления с них не приходят).

Метка на кнопке «Сегодня» может вводить в заблуждение.

Кнопка на самом деле не перемещает к текущему дню, а переключает на текущий вид активной вкладки временного диапазона (День/Неделя/Месяц/Год). Для вкладок День, Неделя и Месяц это действительно показывает текущий день. Но для вкладки Год она перемещает только к текущему году (который всегда начинается с января).

Вероятно, стоит:

  • переименовать её, чтобы точнее описать её функционал, например, в «Текущий»
  • или, что ещё лучше, не только перемещать к текущему году, но и прокручивать к текущему дню в списке Год
1 лайк