---
# System prepended metadata

title: Video Sessions

---

# Video Sessions

## THOMAS STUFF

- [x] Entrances tracken!
- [x] Mail senden wenn sich person anmeldet
- [x] Nebem Mehr infos noch Anmelden button
- [x] Moderator link
    - [x] Default ist der älterest account int account organization Moderators
    - [x] Gibt zur auswalh noch alle in der moderator liste.
- [x] Mail (mit link und event)
- [x] Tag owner list die links anpassen auf die übersicht
- [x] Ausblenden von dingern

---

- Banner color?
- Presentation file?
- Videconference title nees to be unique
    - For now we add the date & time to the title
    - Alternative would be to enforce uniqueness of the tilte

---

- [x] Anmeldung drauf clicken
    - [x] Liste mit tag owner -> dann gibts links für den tag owner
    - [x] Edit (tag owner) button wenn backend access hat kommt is backend zum editieren
- [x] webcams_only_for_moderator as field (default true)
- [x] Wenn Eintritt erlaubt false ist:
    - Admin eine warnung 
    - Frontend nicht anzeigen
    - Auch validieren sonst...
    - Und html content rein "abgesagt"

- Alle 24h mail worker:
    - 10 uhr vormittag
    - 1. Teil: Achtung, folgende Sessions der nächsten 96 Stunden haben noch KEINE Anmeldungen
    
| Titel | Termin | Anmeldungen |
| -------- | -------- | -------- |
| Yoga mit Martin  | XX.02.2021 10:00 - 12:00     | 0/30    |

- 2. Teil: Folgende Sessions der nächsten 96 Stunden sind ausgebucht

| Titel | Termin | Anmeldungen |
| -------- | -------- | -------- |
| Strip Dance mit Martin  | XX.02.2021 10:00 - 12:00     | 30/30    |




### TODO
<!-- 
- Fix start/end time so if there was an error, it still has the time entered before.
 -->
### Next step
- Artworks: https://preview.4gamechangers.io/de/t/goenn-dir/
- Events will get a image and in the sessions overview pages this image should be displayed
- Update user fields only if .present?


- Title for videoconfernete should be us.date and date should be a prefix not suffix (for sorting)
---

- Create new route/view/controller "events(s)" (like admin)
    - Add in ..._routes.rb
    - Add in .../controllers/.../events_controller.rb 
    - Add in .../view/.../events/

- index.html.haml / index action
    - Should have a overview of sessions
        - Only events in future
- edit.html.haml - Use for creating the guest list entry
    - Also validate if max. participants (of the session_event) is exceeded
- Thanyou age will be show.html.haml
        
        

        
``` ruby
# /video_sessions/events/{id}/edit 
@tag_owner = (create or find by email)
# also update the other fields if exists
session_event = Event.find_by_id(params[:id])
@tag_owner.guest_list_entries.where(event_id: session_event.id).first_or_create!

```        
        
```ruby
video_session_event = Event.where(external_id: "video_session").first_or_create!
video_session_event.children.where(.....check datge is greater than now)
#Can reference Custom::Flave4gcvideo21::VideoSessions::AdminsController
```


<!-- - Add BBB room on creation with settings (see below)
    - BBB rooms are created trough the VideoConference model.
- Also we have to create a migration and add a event(_id) to the VideoConference model. (maybe talk with peter about it) -->
<!-- 
---

Summary:
- Add event id to video_conference via migration.
- Also create a video_conference and link it to the session event.

---

- VideoConference essentially are BBB rooms.
- Just when creating the event / session als create a VideoConference (BBB-room) according to the settings below.
- Add event_id to video conference
    - You can create a new migration like this `bundle exec rails generate migration add_event_id_to_video_conferences`
        - And add the event id `add_column :video_conferences, :event_id, :string, index: true`
    - Add relation to the model
        - `belongs_to :event`

``` ruby
# BBB room

session_event = Event.create!(parent_id: video_session_event.id, title: self.title, begins_at: @start_time_with_date, ends_at: @end_time_with_date, limit: self.max_participants, web_url: self.url)

video_conference = VideoConference.create!(...pass options here, event_id: session_event.id)

```

--- -->




## BBB

**Settings:**


* Title/Name are the same as for the session.
    
    * Should look nice
    * Validates title
    * Date + title


* Server join11.flave.world
* Max participants session.max_participants + 5 (so we don't have limits there)
* DISABLE (should be default)
    * Anonymous guests
    * Record
    * Autostart Record
    * start/stop record 
    * mute on start
* ENABLE (should be default)
    * Skip echo test
* ENABLE (NOT default)
    * webcams only for moderator

* SET
    * Logout URL - to be defined (external project homepage)
    * Guest Policy: always_accept
    * Banner Text to Title
    * Banner Color - to be defined
    * Presentation File - default file (e.g. logo artwork of the project), to be defined

> Banner color ?


## Overview & general stuff

You can create the pages in English, but we will translate them to German once you are done. So make sure to structure your code so you can easily change the labels and error messages later. For longer text blocks (e.g. intro text) use html_contents so everybody can change them easily without having to compile & deploy.

---


## Video Session Creation

**Note**
* *authenticate with FLAVE-Account (no backend access required)*

**Client-Side**

1. Session Title* (String)
2. Date* (DatePicker, StartDate = today) [Validate: >= today]
3. StartTime* (TimePicker) [Validate: StartTime < EndTime, Duration >= 10min]
4. EndTime* (TimePicker)
5. MaxParticipants (int, prefilled 30) [Validate: 1..30]
6. URL (String, not mandatory) - Link to external description website, target=_blank
7. Category (dropdown, 8-10 categories tbd)

\* = mandatory

**Server-Side**

1. Create Event (MaxParticipant, Start/End, ...)
2. Create a BigBlueButton room (MaxParticipants+1, Title, ...)

---

## Participant Registration

**Note**
* *display cookie banner (client provided Google Analytics - true opt-out option, don't set cookie if declined!)*

### Step 1

1. Intro / Explanation Text - use html_content
2. Select Session (with optional URL link to target _blank - don't display if URL empty)

**Note**
* *only display sessions with StartTime > CurrentTime | use **time** not **date** - can still register in the morning for an evening session on the same day*
* *booked out sessions are displayed. URL link still working, but session itself greyed out / cannont be selected*

### Step 2

3. Salutation* (Dropdown Herr@m | Frau@f | Andere@o)
4. First name*
5. Last name*
6. E-Mail address*

\* = ALL fields are mandatory

**Comment**
* *If a tag_owner already exists with the provided e-mail-address the existing tag_owner will be updated and the additional session guestlist_entry added. Existing session bookings will of course not be deleted.*
* *Don't forget to validate session availability (MaxParticipants) again! --> else display error html_content*


### Step 3

7. Display Thank-You Text (html_content) & send confirmation mail (external_id: confirmation)

---

## Video Session Overview & Stats

Table list of ALL sessions (past & future) that shows:
* no. of registered participants
* no. of attending participants
* link to list of registered participants (name, mail, redirect link)
* link to list of attending participants (name, mail)
* moderator redirect link (with access time validation)
* direct moderator link without access time validation

**Comment**
*sort_by start date/time*
*maybe split into 2 lists - one past and one future*
*nice to have (once everything else works): pagination, export option(s)*

---

## Redirect Script

After registering participant gets an e-mail (external_id: confirmation) with link to his session(s)

Linked redirect script validates
* checks registrations - did he register for this session (guestlist_entry)
* has the event already started? (now > starttime-10min)
* has the event already ended? (now < endtime+2h)
* max. participants reached? (should not happen ...)

-> each case redirects to an error page with a specific html_content
-> if all criteria are met --> redirect to a actual BBB room

---

* 4GAMECHANGERS
	* Video-Consultation-Project MK
		* in new namespace "flave...21" (ask thomas)
		* Layout like http://4gc20.flave.world/
			* See app/view/layouts/flave4gc19_layout as example
		* Custom Registration Page
			* user can register for one event and enter his details (firstname, lastname,...)
			* Lists all events which are active (guest list entries allowed = true)
			* radio button selection (only one event)
			* duplicate tag owners OK
			* create an interaction for this
		* Custom Admin
			* Create Event-Form
				* only create, no change
				* after create, create a big blue button VideoConference (take settings from a template video conference object, -> ask martin)