======== Schedule ======== Permissions =========== Setting up the schedule blocks and using the schedule editor requires access to the admin site. Specifying Block and Venues =========================== The first things that need to be specified are the blocks for the schedule and the venues available. Blocks are the parts that the schedule is divided into. Typically they correspond to days of the conference, but they can be longer or shorter depending on the needs. Each block can be rendered independently of the others, provided there are no errors in the schedule. Each block has a start and end date and time. These can be on different days, to allow for events that go past midnight. Each venue is associated with a number of blocks, and is assumed not to be available if it hasn't been assigned to the corresponding block in the schedule. At times when a venue is not available, it will not appear in the schedule. Slots ===== The fundamental unit of the schedule is a schedule slot. Each slot is assigned to a given block, and has a start and end date and time. The start time may be specified as the end time of a different slot using the ``previous_slot``. The times of a slot must be within the times given for it's associated block. Each slot can have a name to make it easier to distinguish. Slots cannot overlap, but items can use multiple slots, so this can be emulated by breaking the slots down into small enough time intervals. Assigning items to slots ======================== Each item in the schedule has a number of slots, a venue and either a talk or a page. Each talk can only be assigned to a single schedule item, but pages can be assigned to multiple schedule items to make it easy to add items such as tea breaks to the schedule. If the schedule item has been assigned to a page, the details field can be used to override the information from the page. For talks, details will be added to the information from the talk. Schedule views ============== The schedule can be restricted to a single block by specifying the ``day`` parameter in the URL - e.g. ``https://localhost/schedule/?day=2014-10-23``. If the specified day cannnot be matched to one of the blocks in the schedule, the full schedule is shown. By passing using the ``highlight-venue`` parameter in the url, all items in a specific venue will have the ``schedule-highlight-venue`` class, which can be used to style these differently - e.g. ``https://localhost/schedule/?highlight-venue=3`` will annotate all items occuring in the venue with the id 3. Invalid ids will be ignored. The ``schedule/current`` view can be used to show events around the current time. The ``refresh`` parameter can be used to add a refresh header to the view - e.g ``https://localhost/schedule/current/?refresh=60`` will refresh every 60 seconds. Note that the current time is the time of the webserver. If this is in a different timezone from the conference, the correct ``TIME_ZONE`` value should be set in the ``settings.py`` file. A specific time can be passed via the ``time`` parameter to the current view, specified as ``HH:mm`` e.g. ``https://localhost/schedule/current/?time=08:30`` will generate the current view for 8:30 am. Styling notes ============= The entry for each talk gets a custom CSS class derived from the talk type. This constructed CSS class is shown in the Talk Type admin view. Schedule items which are not talks have ``talk-type-none`` as the CSS class. A per item CSS class can also be set using the ``css_class`` attribute on the schedule item. Adding additional schedule validation ===================================== Wafer runs validation on the slots and the schedule items. This behaviour can be extended by providing custom validators. Each slot validator is called with a list of all the slots, and each schedule item validator is called with a list of all schedule items. Validators are expected to return a list of invalid items or an empty list if the validator finds no error. Use ``register_schedule_item_validator`` and ``register_slot_validator`` to add the validators to the list. To display the errors in the admin form, you will also need to extend the ``displayerrors`` block in ``scheduleitem_list.html`` and ``slot_list.html`` templates. Schedule fails to render ======================== To avoid displaying misleading or incorrect information to attendees, the schedule will not be rendered if the schedule fails to validate, and it will display a "The final schedule has not been published" message instead. Users with permissions to use the schedule editor will see a list of validation errors as well, to help diagnose the problem preventing the schedule from rendering correctly. These errors will also be displayed in the schedule editor and in the admin site. Hiding the schedule while editing ================================= The setting ``WAFER_HIDE_SCHEDULE`` will prevent the schedule from rendering for users without admin access. Users with admin access will see a note that the schedule is a draft and not public.