.. _ref-settings:

Settings
========

.. _ref-settings-OCCURRENCE_CANCEL_REDIRECT:

OCCURRENCE_CANCEL_REDIRECT
--------------------------

This setting controls the behavior of :func:`Views.get_next_url`. If set, all calendar modifications will redirect here (unless there is a `next` set in the request.)

.. _ref-settings-show-cancelled-occurrences:

SHOW_CANCELLED_OCCURRENCES
--------------------------

This setting controls the behavior of :func:`Period.classify_occurence`. If True, then occurrences that have been cancelled will be displayed with a css class of canceled, otherwise they won't appear at all.

Defaults to False

.. _ref-settings-check-event-perm-func:

CHECK_EVENT_PERM_FUNC
---------------------

This setting controls the callable used to determine if a user has permission to edit an event or occurrence. The callable must take the object (event) and the user and return a boolean.

example::

    check_edit_permission(ob, user):
        return user.is_authenticated()

If ob is None, then the function is checking for permission to add new events.

.. _ref-settings-check-calendar-perm-func:

CHECK_CALENDAR_PERM_FUNC
---------------------

This setting controls the callable used to determine if a user has permission to add, update or delete events in a specific calendar. The callable must take the object (calendar) and the user and return a boolean.

example::

    check_edit_permission(ob, user):
        return user.is_authenticated()


.. _ref-settings-get-events-func:

GET_EVENTS_FUNC
---------------

This setting controls the callable that gets all events for calendar display. The callable must take the request and the calendar and return a `QuerySet` of events. Modifying this setting allows you to pull events from multiple calendars or to filter events based on permissions.

example::

    get_events(request, calendar):
        return calendar.event_set.all()


SCHEDULER_BASE_CLASSES
---------------

This setting allows for custom base classes to be used on specific models. Useful for adding fields, managers, or other elements.

Defaults to django.db.models.Model

Extend all the models using a list::

SCHEDULER_BASE_CLASSES = ['my_app.models.BaseAbstract1', 'my_app.models.BaseAbstract1']


Extend specific models using a dict, where the key is the model class name::

SCHEDULER_BASE_CLASSES = {
    'Event': ['my_app.models.EventAbstract1', 'my_app..models.EventAbstract2']
    'Calendar': [my_app.models.CalendarAbstract']
}

.. _ref-settings-scheduler-base-classes:


SCHEDULER_ADMIN_FIELDS
---------------

This complements the SCHEDULER_BASE_CLASSES feature, by allowing fields
added via a base class to be shown in the admin form for that model.

Example - EventBase adds a 'cost' field, and now the field can be shown
in the admin form too.

```
SCHEDULER_BASE_CLASSES = {
    'Event': ['main.models.EventBase']
}

SCHEDULER_ADMIN_FIELDS = {
    'Event': [('cost',)]
}

.. _ref-settings-scheduler-admin-fields
