tine20/Calendar/Config.php
Rama main · réplica de lectura del repositorio original.
<?php
/**
* @package Calendar
* @subpackage Config
* @license http://www.gnu.org/licenses/agpl.html AGPL Version 3
* @author Cornelius Weiss <c.weiss@metaways.de>
* @copyright Copyright (c) 2011-2022 Metaways Infosystems GmbH (http://www.metaways.de)
*/
/**
* calendar config class
*
* @package Calendar
* @subpackage Config
*/
class Calendar_Config extends Tinebase_Config_Abstract
{
const APP_NAME = 'Calendar';
/**
* Fixed Calendars
*
* @var string
*/
const FIXED_CALENDARS = 'fixedCalendars';
/**
* ALLOW_GENERIC_CALDAV_CLIENT
*
* Enables all CalDAV clients.
* Note: Use at your own risk. Non-official clients are not supported.
*/
const ALLOW_GENERIC_CALDAV_CLIENT = 'allowGenericCalDAVClient';
/**
* Event Status Available
*
* @var string
*/
const EVENT_STATUS = 'eventStatus';
/**
* Event Transparencies Available
*
* @var string
*/
const EVENT_TRANSPARENCIES = 'eventTransparencies';
/**
* Event Classes Available
*
* @var string
*/
const EVENT_CLASSES = 'eventClasses';
/**
* Attendee Status Available
*
* @var string
*/
const ATTENDEE_STATUS = 'attendeeStatus';
/**
* Attendee Roles Available
*
* @var string
*/
const ATTENDEE_ROLES = 'attendeeRoles';
/**
* Resource Types Available
*
* @var string
*/
const RESOURCE_TYPES = 'resourceTypes';
/**
* FreeBusy Types Available
*
* @var string
*/
const FREEBUSY_TYPES = 'freebusyTypes';
/**
* which information does the grant freebusy reveal
*
* @var string
*/
const FREEBUSY_INFO_ALLOWED = 'freebusyInfoAllowed';
/**
* Crop days view
*
* @var string
*/
const CROP_DAYS_VIEW = 'daysviewcroptime';
/**
* Days view mouse wheel increment
*
* @var integer
*/
const DAYS_VIEW_MOUSE_WHEEL_INCREMENT = 'daysviewwheelincrement';
/**
* Allow events outside the definition created by the edit dialog
*
* @var string
*/
const CROP_DAYS_VIEW_ALLOW_ALL_EVENTS = 'daysviewallowallevents';
/**
* MAX_FILTER_PERIOD_CALDAV
*
* @var string
*/
const MAX_FILTER_PERIOD_CALDAV = 'maxfilterperiodcaldav';
/**
* MAX_FILTER_PERIOD_CALDAV_SYNCTOKEN
*
* @var string
*/
const MAX_FILTER_PERIOD_CALDAV_SYNCTOKEN = 'maxfilterperiodcaldavsynctoken';
/**
* MAX_NOTIFICATION_PERIOD_FROM
*
* @var string
*/
const MAX_NOTIFICATION_PERIOD_FROM = 'maxnotificationperiodfrom';
/**
* MAX_JSON_DEFAULT_FILTER_PERIOD_FROM
*
* @var string
*/
const MAX_JSON_DEFAULT_FILTER_PERIOD_FROM = 'maxjsondefaultfilterperiodfrom';
/**
* MAX_JSON_DEFAULT_FILTER_PERIOD_UNTIL
*
* @var string
*/
const MAX_JSON_DEFAULT_FILTER_PERIOD_UNTIL = 'maxjsondefaultfilterperioduntil';
/**
* DISABLE_EXTERNAL_IMIP
*
* @var string
*/
const DISABLE_EXTERNAL_IMIP = 'disableExternalImip';
/**
* DISABLE_EXTERNAL_IMIP_NOTIFICATION
*
* @var string
*/
const DISABLE_EXTERNAL_NOTIFICATIONS = 'disableExternalNotifications';
/**
* SKIP_DOUBLE_EVENTS
*
* @var string
*/
const SKIP_DOUBLE_EVENTS = 'skipdoubleevents';
/**
* FEATURE_SPLIT_VIEW
*
* @var string
*/
const FEATURE_SPLIT_VIEW = 'featureSplitView';
/**
* FEATURE_YEAR_VIEW
*
* @var string
*/
const FEATURE_YEAR_VIEW = 'featureYearView';
/**
* FEATURE_EXTENDED_EVENT_CONTEXT_ACTIONS
*
* @var string
*/
const FEATURE_EXTENDED_EVENT_CONTEXT_ACTIONS = 'featureExtendedEventContextActions';
/**
* FEATURE_COLOR_BY
*
* @var string
*/
const FEATURE_COLOR_BY = 'featureColorBy';
/**
* FEATURE_POLLS
*
* @var string
*/
const FEATURE_POLLS = 'featurePolls';
/**
* FEATURE_EVENT_TYPE
*
* @var string
*/
const FEATURE_EVENT_TYPE = 'featureEventType';
/**
* EVENT_VIEW
*
* @var string
*/
const EVENT_VIEW = 'eventView';
/**
* FEATURE_RECUR_EXCEPT
*
* @var string
*/
const FEATURE_RECUR_EXCEPT = 'featureRecurExcept';
/**
* @var string
*/
const FEATURE_EVENT_NOTIFICATION_CONFIRMATION = 'featureEventNotificationConfirmation';
const FEATURE_CLOUD_CALENDAR_SYNC = 'featureCloudCalendarSync';
/**
* @var string
*/
const ORGANIZER_IMPLICIT_EDIT_GRANT = 'organizerImplicitEditGrant';
/**
* @var string
*/
const TENTATIVE_NOTIFICATIONS = 'tentativeNotifications';
/**
* @var string
*/
const TENTATIVE_NOTIFICATIONS_ENABLED = 'enabled';
/**
* @var string
*/
const TENTATIVE_NOTIFICATIONS_DAYS = 'days';
/**
* @var string
*/
const TENTATIVE_NOTIFICATIONS_FILTER = 'filter';
const ASSIGN_ORGANIZER_MEETING_STATUS_ON_EDIT_GRANT = 'assignOrgMeetingStatusOnEditGrant';
/**
* @var string
*/
const POLL_MUTE_ALTERNATIVES_NOTIFICATIONS = 'pollMuteAlternativesNotifications';
/**
* @var string
*/
const POLL_GTC = 'pollGTC';
const SEARCH_ATTENDERS_FILTER = 'searchAttendersFilter';
const SEARCH_ATTENDERS_FILTER_USER = 'user';
const SEARCH_ATTENDERS_FILTER_GROUP = 'group';
const SEARCH_ATTENDERS_FILTER_RESOURCE = 'resource';
const FREEBUSY_INFO_ALLOW_DATETIME = 10;
const FREEBUSY_INFO_ALLOW_ORGANIZER = 20;
const FREEBUSY_INFO_ALLOW_RESOURCE_ATTENDEE = 30;
const FREEBUSY_INFO_ALLOW_CALENDAR = 40;
const FREEBUSY_INFO_ALLOW_CLASS = 45;
const FREEBUSY_INFO_ALLOW_ALL_ATTENDEE = 50;
const FLOORPLANS = 'floorplans';
/**
* (non-PHPdoc)
* @see tine20/Tinebase/Config/Definition::$_properties
*/
protected static $_properties = array(
self::FIXED_CALENDARS => array(
//_('Fixed Calendars')
'label' => 'Fixed Calendars',
//_('Calendars always selected regardless of all filter parameters. A valid use case could be to force the display of an certain holiday calendar.')
'description' => 'Calendars always selected regardless of all filter parameters. A valid use case could be to force the display of an certain holiday calendar.',
'type' => 'array',
'contents' => 'string', // in fact this are ids of Tinebase_Model_Container of app Calendar and we might what to have te ui to autocreate pickers panel here? x-type? -> later
'clientRegistryInclude' => TRUE
),
self::ALLOW_GENERIC_CALDAV_CLIENT => array(
//_('Allow generic CalDAV clients')
'label' => 'Allow generic CalDAV clients',
//_('Enables all CalDAV clients. Note: Use at your own risk. Non-official clients are not supported.')
'description' => 'Enables all CalDAV clients. Note: Use at your own risk. Non-official clients are not supported.',
'type' => Tinebase_Config_Abstract::TYPE_BOOL,
'clientRegistryInclude' => false,
'setByAdminModule' => true,
'setBySetupModule' => false,
'default' => false
),
self::CROP_DAYS_VIEW => array(
//_('Crop Days')
'label' => 'Crop Days',
//_('Crop the calendar view to the configured start and end time.')
'description' => 'Crop the calendar view to the configured start and end time.',
'type' => Tinebase_Config_Abstract::TYPE_BOOL,
'clientRegistryInclude' => true,
'setByAdminModule' => false,
'setBySetupModule' => false,
'default' => false
),
self::CROP_DAYS_VIEW_ALLOW_ALL_EVENTS => array(
//_('Crop Days Limit Override')
'label' => 'Crop Days Limit Override',
//_('Allow events outside the defined start and end times.')
'description' => 'Allow events outside the defined start and end times.',
'type' => Tinebase_Config_Abstract::TYPE_BOOL,
'clientRegistryInclude' => true,
'setByAdminModule' => false,
'setBySetupModule' => false,
'default' => false
),
self::DAYS_VIEW_MOUSE_WHEEL_INCREMENT => array(
//_('Week View Mouse Wheel Increment')
'label' => 'Week View Mouse Wheel Increment',
//_('Crop the calendar view to the configured start and end time.')
'description' => 'Number of pixels to scroll per mouse wheel',
'type' => Tinebase_Config_Abstract::TYPE_INT,
'clientRegistryInclude' => true,
'setByAdminModule' => false,
'setBySetupModule' => false,
'default' => 50
),
self::EVENT_VIEW => array(
//_('Default View for the Events')
'label' => 'Default View for the Events',
//_('Default View for the Events')
'description' => 'Default View for the Events ("organizer" or "attendee")',
'type' => Tinebase_Config_Abstract::TYPE_KEYFIELD,
'options' => array(
'records' => array(
array('id' => 'attendee', 'value' => 'Attendee'), //_('Attendee')
array('id' => 'organizer', 'value' => 'Organizer'), //_('Organizer')
),
),
'clientRegistryInclude' => true,
'setByAdminModule' => TRUE,
'setBySetupModule' => FALSE,
'default' => 'attendee',
),
self::EVENT_STATUS => [
//_('Available Event Statuses')
'label' => 'Available Event Statuses',
//_('Available Event Statuses. Please note that additional event statuses may impact other calendar systems during export or synchronization.')
'description' => 'Available Event Statuses. Please note that additional event statuses may impact other calendar systems during export or synchronization.',
'type' => Tinebase_Config_Abstract::TYPE_KEYFIELD_CONFIG,
'clientRegistryInclude' => true,
'setByAdminModule' => false,
'default' => [
'records' => [
['id' => 'CONFIRMED', 'value' => 'Confirmed', 'icon' => 'images/icon-set/icon_ok.svg', 'system' => true], //_('Confirmed')
['id' => 'TENTATIVE', 'value' => 'Tentative', 'icon' => 'images/icon-set/icon_calendar_attendee_tentative.svg', 'system' => true], //_('Tentative')
['id' => 'CANCELLED', 'value' => 'Canceled', 'icon' => 'images/icon-set/icon_calendar_attendee_cancle.svg', 'system' => true], //_('Canceled')
],
'default' => 'CONFIRMED'
]
],
self::EVENT_CLASSES => [
//_('Available Event Classes')
'label' => 'Available Event Classes',
//_('Available Event Classes. Please note that additional event classes may impact other calendar systems during export or synchronization.')
'description' => 'Available Event Classes. Please note that additional event classes may impact other calendar systems during export or synchronization.',
'type' => Tinebase_Config_Abstract::TYPE_KEYFIELD_CONFIG,
'clientRegistryInclude' => true,
'setByAdminModule' => false,
'default' => [
'records' => [
['id' => 'PUBLIC', 'value' => 'Public', 'system' => true], //_('Public')
['id' => 'PRIVATE', 'value' => 'Private', 'system' => true], //_('Private')
// ['id' => 'CONFIDENTIAL', 'value' => 'Confidential', 'system' => true], //_('Confidential')
],
'default' => 'PUBLIC'
]
],
self::EVENT_TRANSPARENCIES => [
//_('Available Event Transparencies')
'label' => 'Available Event Transparencies',
//_('Available Event Transparencies. Please note that additional event transparencies may impact other calendar systems during export or synchronization.')
'description' => 'Available Event Transparencies. Please note that additional event transparencies may impact other calendar systems during export or synchronization.',
'type' => Tinebase_Config_Abstract::TYPE_KEYFIELD_CONFIG,
'clientRegistryInclude' => true,
'setByAdminModule' => false,
'default' => [
'records' => [
['id' => 'TRANSPARENT', 'value' => 'Transparent', 'system' => true], //_('Transparent')
['id' => 'OPAQUE', 'value' => 'Opaque', 'system' => true], //_('Opaque')
],
'default' => 'OPAQUE'
]
],
self::ATTENDEE_STATUS => array(
//_('Available Attendee Statuses')
'label' => 'Available Attendee Statuses',
//_('Available Event Attendee Statuses. Please note that additional attendee statuses may impact other calendar systems during export or synchronization.')
'description' => 'Available Event Attendee Statuses. Please note that additional attendee statuses may impact other calendar systems during export or synchronization.',
'type' => Tinebase_Config_Abstract::TYPE_KEYFIELD_CONFIG,
'options' => array('recordModel' => 'Calendar_Model_AttendeeStatus'),
'clientRegistryInclude' => TRUE,
'setByAdminModule' => TRUE,
'default' => array(
'records' => array(
array('id' => 'NEEDS-ACTION', 'value' => 'No response', 'icon' => 'images/icon-set/icon_invite.svg', 'system' => true), //_('No response')
array('id' => 'ACCEPTED', 'value' => 'Accepted', 'icon' => 'images/icon-set/icon_calendar_attendee_accepted.svg', 'system' => true), //_('Accepted')
array('id' => 'DECLINED', 'value' => 'Declined', 'icon' => 'images/icon-set/icon_calendar_attendee_cancle.svg', 'system' => true), //_('Declined')
array('id' => 'TENTATIVE', 'value' => 'Tentative', 'icon' => 'images/icon-set/icon_calendar_attendee_tentative.svg', 'system' => true), //_('Tentative')
),
'default' => 'NEEDS-ACTION'
)
),
self::ATTENDEE_ROLES => array(
//_('Available Attendee Roles')
'label' => 'Available Attendee Roles',
//_('Available Event Attendee Roles. Please note that additional attendee roles may impact other calendar systems during export or synchronization.')
'description' => 'Available Event Attendee Roles. Please note that additional attendee roles may impact other calendar systems during export or synchronization.',
'type' => Tinebase_Config_Abstract::TYPE_KEYFIELD_CONFIG,
'options' => array('recordModel' => Calendar_Model_AttendeeRole::class),
'clientRegistryInclude' => TRUE,
'setByAdminModule' => TRUE,
'default' => array(
'records' => array(
array('id' => 'REQ', 'value' => 'Required', 'system' => true, 'order' => 0, 'color' => '#FF0000'), //_('Required')
array('id' => 'OPT', 'value' => 'Optional', 'system' => true, 'order' => 1, 'color' => '#0000FF'), //_('Optional')
),
'default' => 'REQ'
)
),
self::ORGANIZER_IMPLICIT_EDIT_GRANT => [
//_('Organizer has implicit edit grant')
'label' => 'Organizer has implicit edit grant',
'description' => 'Organizer has implicit edit grant',
'type' => Tinebase_Config_Abstract::TYPE_BOOL,
'clientRegistryInclude' => false,
'setByAdminModule' => false,
'setBySetupModule' => true,
'default' => true,
],
self::RESOURCE_TYPES => array(
//_('Available Resource Types')
'label' => 'Available Resource Types',
//_('Available Resource Types. Please note that adding custom resource types may affect compatibility with other calendar systems during export or synchronization.')
'description' => 'Available Resource Types. Please note that adding custom resource types may affect compatibility with other calendar systems during export or synchronization.',
'type' => Tinebase_Config_Abstract::TYPE_KEYFIELD_CONFIG,
'options' => array('recordModel' => Calendar_Model_ResourceType::class),
'clientRegistryInclude' => TRUE,
'setByAdminModule' => TRUE,
'default' => array(
'records' => array(
array('id' => 'RESOURCE', 'is_location' => 0, 'value' => 'Resource', 'icon' => 'images/icon-set/icon_resource.svg', 'system' => true), //_('Resource') @todo default resource icon!
array('id' => 'ROOM', 'is_location' => 1, 'value' => 'Room', 'icon' => 'images/icon-set/icon_resource_room1.svg', 'system' => true), //_('Room')
array('id' => 'BOARD', 'is_location' => 0, 'value' => 'Board', 'icon' => 'images/icon-set/icon_resource_board.svg', 'system' => true), //_('Board')
array('id' => 'CABLE', 'is_location' => 0, 'value' => 'Cable', 'icon' => 'images/icon-set/icon_resource_cable.svg', 'system' => true), //_('Cable')
array('id' => 'CAR', 'is_location' => 1, 'value' => 'Car', 'icon' => 'images/icon-set/icon_resource_car.svg', 'system' => true), //_('Car')
array('id' => 'COFFEE', 'is_location' => 0, 'value' => 'Coffee', 'icon' => 'images/icon-set/icon_resource_coffee.svg', 'system' => true), //_('Coffee')
array('id' => 'HOMEOFFICE', 'is_location' => 1, 'value' => 'Homeoffice', 'icon' => 'images/icon-set/icon_resource_homeoffice.svg', 'system' => true), //_('Homeoffice')
array('id' => 'LAMP', 'is_location' => 0, 'value' => 'Lamp', 'icon' => 'images/icon-set/icon_resource_lamp.svg', 'system' => true), //_('Lamp')
array('id' => 'LAPTOP', 'is_location' => 0, 'value' => 'Laptop', 'icon' => 'images/icon-set/icon_resource_laptop.svg', 'system' => true), //_('Laptop')
array('id' => 'MATERIAL', 'is_location' => 0, 'value' => 'Material', 'icon' => 'images/icon-set/icon_resource_material.svg', 'system' => true), //_('Material')
array('id' => 'PROJECTOR', 'is_location' => 0, 'value' => 'Projector', 'icon' => 'images/icon-set/icon_resource_projector.svg', 'system' => true), //_('Projector')
array('id' => 'TRAVEL', 'is_location' => 1, 'value' => 'Travel', 'icon' => 'images/icon-set/icon_resource_trolly.svg', 'system' => true), //_('Travel')
array('id' => 'TRAILER' , 'is_location' => 1, 'value' => 'Trailer', 'icon' => 'images/icon-set/icon_car-trailer.svg', 'system' => true), //_('Trailer')
),
'default' => 'RESOURCE'
)
),
self::FREEBUSY_TYPES => array(
//_('Available Free/Busy Types')
'label' => 'Available Free/Busy Types',
//_('Available Free/Busy Types. Please note that adding custom types may affect compatibility with other calendar systems during export or synchronization.')
'description' => 'Available Free/Busy Types. Please note that adding custom types may affect compatibility with other calendar systems during export or synchronization.',
'type' => Tinebase_Config_Abstract::TYPE_KEYFIELD_CONFIG,
'clientRegistryInclude' => TRUE,
'setByAdminModule' => TRUE,
'default' => array(
'records' => array(
array('id' => Calendar_Model_FreeBusy::FREEBUSY_FREE, 'value' => 'Free', 'system' => true), //_('Free')
array('id' => Calendar_Model_FreeBusy::FREEBUSY_BUSY, 'value' => 'Busy', 'system' => true), //_('Busy')
array('id' => Calendar_Model_FreeBusy::FREEBUSY_BUSY_TENTATIVE, 'value' => 'Tentative', 'system' => true), //_('Tentative')
array('id' => Calendar_Model_FreeBusy::FREEBUSY_BUSY_UNAVAILABLE, 'value' => 'Unavailable', 'system' => true), //_('Unavailable')
),
'default' => Calendar_Model_FreeBusy::FREEBUSY_BUSY
)
),
self::MAX_FILTER_PERIOD_CALDAV => array(
//_('Filter timeslot for CalDAV events')
'label' => 'Filter timeslot for events',
//_('How many months in the past the events should be synchronized.')
'description' => 'How many months in the past the events should be synchronized.',
'type' => Tinebase_Config_Abstract::TYPE_INT,
'clientRegistryInclude' => FALSE,
'setByAdminModule' => FALSE,
'setBySetupModule' => TRUE,
'default' => 2,
),
self::MAX_FILTER_PERIOD_CALDAV_SYNCTOKEN => array(
//_('Filter timeslot for CalDAV events with SyncToken')
'label' => 'Filter timeslot for CalDAV events with SyncToken',
//_('How many months in the past the events should be synchronized.')
'description' => 'How many months in the past the events should be synchronized.',
'type' => Tinebase_Config_Abstract::TYPE_INT,
'clientRegistryInclude' => FALSE,
'setByAdminModule' => FALSE,
'setBySetupModule' => TRUE,
'default' => 100,
),
self::MAX_NOTIFICATION_PERIOD_FROM => array(
//_('Timeslot for the Event Notifications')
'label' => 'Timeslot for the Event Notifications',
//_('How many weeks in the past event notifications should be sent.')
'description' => 'How many weeks in the past event notifications should be sent.',
'type' => Tinebase_Config_Abstract::TYPE_INT,
'clientRegistryInclude' => FALSE,
'setByAdminModule' => FALSE,
'setBySetupModule' => TRUE,
'default' => 1, // 1 week is default
),
self::MAX_JSON_DEFAULT_FILTER_PERIOD_FROM => array(
//_('Default filter start date for the events fetched via JSON API')
'label' => 'Default filter start date for the events fetched via JSON API',
//_('How many months in the past the events should be fetched.')
'description' => 'How many months in the past the events should be fetched.',
'type' => Tinebase_Config_Abstract::TYPE_INT,
'clientRegistryInclude' => FALSE,
'setByAdminModule' => FALSE,
'setBySetupModule' => TRUE,
'default' => 0,
),
self::MAX_JSON_DEFAULT_FILTER_PERIOD_UNTIL => array(
//_('Default filter end date for the events fetched via JSON API')
'label' => 'Default filter end date for the events fetched via JSON API',
//_('For how many months in the future the events should be fetched.')
'description' => 'For how many months in the future the events should be fetched.',
'type' => Tinebase_Config_Abstract::TYPE_INT,
'clientRegistryInclude' => FALSE,
'setByAdminModule' => FALSE,
'setBySetupModule' => TRUE,
'default' => 1,
),
self::DISABLE_EXTERNAL_IMIP => array(
//_('Disable iMIP for external organizers')
'label' => 'Disable iMIP for external organizers',
//_('Disable iMIP for external organizers')
'description' => 'Disable iMIP for external organizers',
'type' => Tinebase_Config_Abstract::TYPE_BOOL,
'clientRegistryInclude' => false,
'setByAdminModule' => true,
'setBySetupModule' => true,
'default' => false,
),
self::DISABLE_EXTERNAL_NOTIFICATIONS => array(
//_('Disable notification for external attendee')
'label' => 'Disable notification for external attendee',
//_('Disable notification for external attendee')
'description' => 'Disable notification for external attendee',
'type' => Tinebase_Config_Abstract::TYPE_BOOL,
'clientRegistryInclude' => false,
'setByAdminModule' => true,
'setBySetupModule' => true,
'default' => false,
),
self::SKIP_DOUBLE_EVENTS => array(
//_('(CalDAV) Skip double events from personal or shared calendar')
'label' => '(CalDAV) Skip double events from personal or shared calendar',
//_('(CalDAV) Skip double events from personal or shared calendar ("personal" > Skip events from personal calendar or "shared" > Skip events from shared calendar)')
'description' => '(CalDAV) Skip double events from personal or shared calendar ("personal" > Skip events from personal calendar or "shared" > Skip events from shared calendar)',
'type' => Tinebase_Config_Abstract::TYPE_STRING,
'clientRegistryInclude' => FALSE,
'setByAdminModule' => FALSE,
'setBySetupModule' => FALSE,
'default' => '',
),
self::FLOORPLANS => [
//_('Floorplans')
self::LABEL => 'Floorplans',
//_('List of floorplans with their resource configurations.')
self::DESCRIPTION => 'List of floorplans with their resource configurations.',
self::TYPE => self::TYPE_ARRAY,
self::CLIENTREGISTRYINCLUDE => false,
self::SETBYADMINMODULE => false,
self::SETBYSETUPMODULE => false,
self::DEFAULT_STR => []
],
self::ENABLED_FEATURES => [
//_('Enabled Features')
self::LABEL => 'Enabled Features',
//_('Enabled Features in Calendar Application.')
self::DESCRIPTION => 'Enabled Features in Calendar Application.',
self::TYPE => self::TYPE_OBJECT,
self::CLASSNAME => Tinebase_Config_Struct::class,
self::CLIENTREGISTRYINCLUDE => true,
self::CONTENT => [
self::FEATURE_SPLIT_VIEW => [
self::LABEL => 'Calendar Split View',
//_('Calendar Split View')
self::DESCRIPTION => 'Split day and week views by attendee',
//_('Split day and week views by attendee')
self::TYPE => self::TYPE_BOOL,
self::DEFAULT_STR => true,
],
self::FEATURE_YEAR_VIEW => [
self::LABEL => 'Calendar Year View',
//_('Calendar Year View')
self::DESCRIPTION => 'Adds year view to Calendar',
//_('Adds year view to Calendar')
self::TYPE => self::TYPE_BOOL,
self::DEFAULT_STR => false,
],
self::FEATURE_EXTENDED_EVENT_CONTEXT_ACTIONS => [
self::LABEL => 'Calendar Extended Context Menu Actions',
//_('Calendar Extended Context Menu Actions')
self::DESCRIPTION => 'Adds extended actions to event context menus',
//_('Adds extended actions to the event context menus')
self::TYPE => self::TYPE_BOOL,
self::DEFAULT_STR => true,
],
self::FEATURE_COLOR_BY => [
self::LABEL => 'Color Events by',
//_('Color Events by')
self::DESCRIPTION => 'Choose event color by different criteria',
//_('Choose event color by different criteria')
self::TYPE => self::TYPE_BOOL,
self::DEFAULT_STR => true,
],
self::FEATURE_RECUR_EXCEPT => [
self::LABEL => 'Recurring Events Except',
//_('Recurring Events Except')
self::DESCRIPTION => 'Recurring events, except on certain dates.',
//_('Recurring events, except on certain dates.')
self::TYPE => self::TYPE_BOOL,
self::DEFAULT_STR => false,
],
self::FEATURE_POLLS => array(
self::LABEL => 'Activate Poll for the Events',
//_('Activate Poll for the Events')
self::DESCRIPTION =>
'Create alternative events and allow users as well as externals to vote for the best option.',
//_('Create alternative events and allow users as well as externals to vote for the best option.')
self::TYPE => self::TYPE_BOOL,
self::DEFAULT_STR => true,
),
self::FEATURE_EVENT_TYPE => array(
self::LABEL => 'Activate Event Types for the Events',
//_('Activate Event Types for the Events')
self::DESCRIPTION =>
'Activate Event Types for the Events.',
//_('Activate Event Types for the Events.')
self::TYPE => self::TYPE_BOOL,
self::DEFAULT_STR => false,
),
self::FEATURE_EVENT_NOTIFICATION_CONFIRMATION => [
self::LABEL => 'Event Notification Confirmation', //_('Event Notification Confirmation')
self::DESCRIPTION => 'Event Notification Confirmation',
self::TYPE => self::TYPE_BOOL,
self::DEFAULT_STR => false,
],
self::FEATURE_CLOUD_CALENDAR_SYNC => [
self::LABEL => 'Enable Cloud Calendar Sync',
self::TYPE => self::TYPE_BOOL,
self::DEFAULT_STR => false,
],
],
self::DEFAULT_STR => [],
],
self::TENTATIVE_NOTIFICATIONS => array(
'label' => 'Send Tentative Notifications', //_('Send Tentative Notifications')
'description' => 'Send notifications to event organizers of tentative events a certain number of days before the event is due.', //_('Send notifications to event organizers of tentative events a certain number of days before the event is due.')
'type' => 'object',
'class' => 'Tinebase_Config_Struct',
'clientRegistryInclude' => TRUE,
'setBySetupModule' => false,
'setByAdminModule' => true,
'content' => array(
self::TENTATIVE_NOTIFICATIONS_ENABLED => array(
'label' => 'Enabled', //_('Enabled')
'description' => 'Enabled', //_('Enabled')
'type' => Tinebase_Config_Abstract::TYPE_BOOL,
'default' => false,
),
self::TENTATIVE_NOTIFICATIONS_DAYS => array(
'label' => 'Days Before Due Date', //_('Days Before Due Date')
'description' => 'How many days before the event\'s due date should notifications be sent.', //_('How many days before the event\'s due date should notifications be sent.')
'type' => Tinebase_Config_Abstract::TYPE_INT,
'default' => 5,
),
self::TENTATIVE_NOTIFICATIONS_FILTER => array(
'label' => 'Additional Filter', //_('Additional Filter')
'description' => 'Additional filter to limit which events notifications should be sent for.', //_('Additional filter to limit which events notifications should be sent for.')
'type' => Tinebase_Config_Abstract::TYPE_ARRAY,
'default' => [],
),
),
'default' => array(),
),
self::POLL_MUTE_ALTERNATIVES_NOTIFICATIONS => array(
//_('Mute Event Notifications for Polls')
'label' => 'Mute Event Notifications for Polls',
//_('Do not send invitation notifications for alternative events in an active poll.')
'description' => 'Do not send invitation notifications for alternative events in an active poll.',
'type' => Tinebase_Config_Abstract::TYPE_BOOL,
'clientRegistryInclude' => false,
'setBySetupModule' => false,
'setByAdminModule' => true,
'default' => true
),
self::POLL_GTC => array(
//_('GTCs for polls')
'label' => 'GTCs for polls',
//_('GTCs for polls')
'description' => 'GTCs for polls',
'type' => Tinebase_Config_Abstract::TYPE_STRING,
'clientRegistryInclude' => false,
'setBySetupModule' => false,
'setByAdminModule' => true,
'default' => '',
),
self::FREEBUSY_INFO_ALLOWED => [
//_('Free/Busy Info')
self::LABEL => 'Free/Busy Info',
//_('What data the free/busy grant reveals')
self::DESCRIPTION => 'What data the free/busy grant reveals',
self::TYPE => self::TYPE_KEYFIELD,
self::OPTIONS => [
'records' => [
['id' => Calendar_Config::FREEBUSY_INFO_ALLOW_DATETIME, 'value' => 'only date & time'], //_('only date & time')
['id' => Calendar_Config::FREEBUSY_INFO_ALLOW_ORGANIZER, 'value' => 'and organizer'], //_('and organizer')
['id' => Calendar_Config::FREEBUSY_INFO_ALLOW_RESOURCE_ATTENDEE, 'value' => 'and resources'], //_('and resources')
['id' => Calendar_Config::FREEBUSY_INFO_ALLOW_CALENDAR, 'value' => 'and calendar'], //_('and calendar')
['id' => Calendar_Config::FREEBUSY_INFO_ALLOW_CLASS, 'value' => 'and the classification'], //_('and classification')
['id' => Calendar_Config::FREEBUSY_INFO_ALLOW_ALL_ATTENDEE, 'value' => 'and other attendees'], //_('and other attendees')
],
],
self::CLIENTREGISTRYINCLUDE => true,
self::SETBYADMINMODULE => true,
self::SETBYSETUPMODULE => false,
self::DEFAULT_STR => 10,
],
self::SEARCH_ATTENDERS_FILTER => [
//_('Search Attenders Additional Filters')
self::LABEL => 'Search Attenders Additional Filters',
//_('Search Attenders Additional Filters')
self::DESCRIPTION => 'Search Attenders Additional Filters',
self::TYPE => self::TYPE_OBJECT,
self::CLASSNAME => Tinebase_Config_Struct::class,
self::CONTENT => [
self::SEARCH_ATTENDERS_FILTER_USER => [
//_('User Additional Filters')
self::LABEL => 'User Additional Filters',
//_('User Additional Filters')
self::DESCRIPTION => 'User Additional Filters',
self::TYPE => self::TYPE_ARRAY,
self::CLIENTREGISTRYINCLUDE => false,
self::SETBYADMINMODULE => true,
self::SETBYSETUPMODULE => false,
self::DEFAULT_STR => [],
],
self::SEARCH_ATTENDERS_FILTER_GROUP => [
//_('Group Additional Filters')
self::LABEL => 'Group Additional Filters',
//_('Group Additional Filters')
self::DESCRIPTION => 'Group Additional Filters',
self::TYPE => self::TYPE_ARRAY,
self::CLIENTREGISTRYINCLUDE => false,
self::SETBYADMINMODULE => true,
self::SETBYSETUPMODULE => false,
self::DEFAULT_STR => [],
],
self::SEARCH_ATTENDERS_FILTER_RESOURCE => [
//_('Resource Additional Filters')
self::LABEL => 'Resource Additional Filters',
//_('Resource Additional Filters')
self::DESCRIPTION => 'Resource Additional Filters',
self::TYPE => self::TYPE_ARRAY,
self::CLIENTREGISTRYINCLUDE => false,
self::SETBYADMINMODULE => true,
self::SETBYSETUPMODULE => false,
self::DEFAULT_STR => [],
],
],
self::CLIENTREGISTRYINCLUDE => false,
self::SETBYADMINMODULE => true,
self::SETBYSETUPMODULE => false,
self::DEFAULT_STR => [],
],
self::ASSIGN_ORGANIZER_MEETING_STATUS_ON_EDIT_GRANT => [
self::LABEL => 'Assign organizer meeting status on editGrant',
//_('Assign organizer meeting status on editGrant')
self::DESCRIPTION => 'Assign organizer meeting status on editGrant',
//_('Assign organizer meeting status on editGrant')
self::TYPE => self::TYPE_BOOL,
self::DEFAULT_STR => false,
self::CLIENTREGISTRYINCLUDE => false,
self::SETBYSETUPMODULE => false,
self::SETBYADMINMODULE => false,
],
);
/**
* (non-PHPdoc)
* @see tine20/Tinebase/Config/Abstract::$_appName
*/
protected $_appName = 'Calendar';
/**
* holds the instance of the singleton
*
* @var Tinebase_Config
*/
private static $_instance = NULL;
/**
* the constructor
*
* don't use the constructor. use the singleton
*/
private function __construct() {}
/**
* the constructor
*
* don't use the constructor. use the singleton
*/
private function __clone() {}
/**
* Returns instance of Tinebase_Config
*
* @return Tinebase_Config
*/
public static function getInstance()
{
if (self::$_instance === NULL) {
self::$_instance = new self();
}
return self::$_instance;
}
/**
* (non-PHPdoc)
* @see tine20/Tinebase/Config/Abstract::getProperties()
*/
public static function getProperties()
{
return self::$_properties;
}
}