Merge branch '2014.11-develop' into 2015.07
[tine20] / tine20 / Calendar / Config.php
1 <?php
2 /**
3  * @package     Calendar
4  * @subpackage  Config
5  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
6  * @author      Cornelius Weiss <c.weiss@metaways.de>
7  * @copyright   Copyright (c) 2011-2014 Metaways Infosystems GmbH (http://www.metaways.de)
8  */
9
10 /**
11  * calendar config class
12  * 
13  * @package     Calendar
14  * @subpackage  Config
15  */
16 class Calendar_Config extends Tinebase_Config_Abstract
17 {
18     /**
19      * Fixed Calendars
20      * 
21      * @var string
22      */
23     const FIXED_CALENDARS = 'fixedCalendars';
24     
25     /**
26      * Attendee Status Available
27      * 
28      * @var string
29      */
30     const ATTENDEE_STATUS = 'attendeeStatus';
31     
32     /**
33      * Attendee Roles Available
34      * 
35      * @var string
36      */
37     const ATTENDEE_ROLES = 'attendeeRoles';
38
39     /**
40      * Crop days view
41      *
42      * @var string
43      */
44     const CROP_DAYS_VIEW = 'daysviewcroptime';
45
46     /**
47      * Days view mouse wheel increment
48      *
49      * @var integer
50      */
51     const DAYS_VIEW_MOUSE_WHEEL_INCREMENT = 'daysviewwheelincrement';
52     
53     /**
54      * Allow events outside the definition created by the edit dialog
55      * 
56      * @var string
57      */
58     const CROP_DAYS_VIEW_ALLOW_ALL_EVENTS = 'daysviewallowallevents';
59
60     /**
61      * MAX_FILTER_PERIOD_CALDAV
62      * 
63      * @var string
64      */
65     const MAX_FILTER_PERIOD_CALDAV = 'maxfilterperiodcaldav';
66     
67     /**
68      * MAX_NOTIFICATION_PERIOD_FROM
69      * 
70      * @var string
71      */
72     const MAX_NOTIFICATION_PERIOD_FROM = 'maxnotificationperiodfrom';
73     
74     /**
75      * MAX_JSON_DEFAULT_FILTER_PERIOD_FROM
76      * 
77      * @var string
78      */
79     const MAX_JSON_DEFAULT_FILTER_PERIOD_FROM = 'maxjsondefaultfilterperiodfrom';
80     
81     /**
82      * MAX_JSON_DEFAULT_FILTER_PERIOD_UNTIL
83      * 
84      * @var string
85      */
86     const MAX_JSON_DEFAULT_FILTER_PERIOD_UNTIL = 'maxjsondefaultfilterperioduntil';
87     
88     /**
89      * DISABLE_EXTERNAL_IMIP
90      *
91      * @var string
92      */
93     const DISABLE_EXTERNAL_IMIP = 'disableExternalImip';
94     
95     /**
96      * SKIP_DOUBLE_EVENTS
97      *
98      * @var string
99      */
100     const SKIP_DOUBLE_EVENTS = 'skipdoubleevents';
101
102     /**
103      * Send attendee mails to users with edit permissions to the added resource
104      */
105     const RESOURCE_MAIL_FOR_EDITORS = 'resourcemailforeditors';
106
107     /**
108      * FEATURE_SPLIT_VIEW
109      *
110      * @var string
111      */
112     const FEATURE_SPLIT_VIEW = 'featureSplitView';
113
114     /**
115      * FEATURE_YEAR_VIEW
116      *
117      * @var string
118      */
119     const FEATURE_YEAR_VIEW = 'featureYearView';
120
121     /**
122      * FEATURE_EXTENDED_EVENT_CONTEXT_ACTIONS
123      *
124      * @var string
125      */
126     const FEATURE_EXTENDED_EVENT_CONTEXT_ACTIONS = 'featureExtendedEventContextActions';
127
128     /**
129      * EVENT_VIEW
130      *
131      * @var string
132      */
133     const EVENT_VIEW = 'eventView';
134
135     /**
136      * (non-PHPdoc)
137      * @see tine20/Tinebase/Config/Definition::$_properties
138      */
139     protected static $_properties = array(
140         self::FIXED_CALENDARS => array(
141             //_('Fixed Calendars')
142             'label'                 => 'Fixed Calendars',
143             //_('Calendars always selected regardless of all filter parameters. A valid use case might be to force the display of an certain holiday calendar.')
144             'description'           => 'Calendars always selected regardless of all filter parameters. A valid use case might be to force the display of an certain holiday calendar.',
145             'type'                  => 'array',
146             '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
147             'clientRegistryInclude' => TRUE
148         ),
149         self::CROP_DAYS_VIEW => array(
150                                    //_('Crop Days')
151             'label'                 => 'Crop Days',
152                                    //_('Crop calendar view configured start and endtime.')
153             'description'           => 'Crop calendar view configured start and endtime.',
154             'type'                  => Tinebase_Config_Abstract::TYPE_BOOL,
155             'clientRegistryInclude' => true,
156             'setByAdminModule'      => false,
157             'setBySetupModule'      => false,
158             'default'               => false
159         
160         ),
161         self::CROP_DAYS_VIEW_ALLOW_ALL_EVENTS => array(
162                                    //_('Crop Days Limit Override')
163             'label'                 => 'Crop Days Limit Override',
164                                    //_('Allow events outside start and endtime.')
165             'description'           => 'Allow events outside start and endtime.',
166             'type'                  => Tinebase_Config_Abstract::TYPE_BOOL,
167             'clientRegistryInclude' => true,
168             'setByAdminModule'      => false,
169             'setBySetupModule'      => false,
170             'default'               => false
171         
172         ),
173         self::DAYS_VIEW_MOUSE_WHEEL_INCREMENT => array(
174                                     //_('Week View Mouse Wheel Increment')
175             'label'                 => 'Week View Mouse Wheel Increment',
176             //_('Crop calendar view configured start and endtime.')
177             'description'           => 'Number of pixels to scroll per mouse wheel',
178             'type'                  => Tinebase_Config_Abstract::TYPE_INT,
179             'clientRegistryInclude' => true,
180             'setByAdminModule'      => false,
181             'setBySetupModule'      => false,
182             'default'               => 50
183
184         ),
185         self::EVENT_VIEW => array(
186                 //_('Default View for Events')
187                 'label'                 => 'Default View for Events',
188                 //_('Default View for Events')
189                 'description'           => 'Default View for Events ("organizer" or "attendee")',
190                 'type'                  => Tinebase_Config_Abstract::TYPE_STRING,
191                 'clientRegistryInclude' => true,
192                 'setByAdminModule'      => FALSE,
193                 'setBySetupModule'      => FALSE,
194                 'default'               => 'attendee',
195         ),
196         self::ATTENDEE_STATUS => array(
197                                    //_('Attendee Status Available')
198             'label'                 => 'Attendee Status Available',
199                                    //_('Possible event attendee status. Please note that additional attendee status might impact other calendar systems on export or syncronisation.')
200             'description'           => 'Possible event attendee status. Please note that additional attendee status might impact other calendar systems on export or syncronisation.',
201             'type'                  => 'keyFieldConfig',
202             'options'               => array('recordModel' => 'Calendar_Model_AttendeeStatus'),
203             'clientRegistryInclude' => TRUE,
204             'default'               => 'NEEDS-ACTION'
205         ),
206         self::ATTENDEE_ROLES => array(
207                                    //_('Attendee Roles Available')
208             'label'                 => 'Attendee Roles Available',
209                                    //_('Possible event attendee roles. Please note that additional attendee roles might impact other calendar systems on export or syncronisation.')
210             'description'           => 'Possible event attendee roles. Please note that additional attendee roles might impact other calendar systems on export or syncronisation.',
211             'type'                  => 'keyFieldConfig',
212             'options'               => array('recordModel' => 'Calendar_Model_AttendeeRole'),
213             'clientRegistryInclude' => TRUE,
214             'default'               => 'REQ'
215         ),
216         self::MAX_FILTER_PERIOD_CALDAV => array(
217         //_('Filter timeslot for CalDAV events')
218             'label'                 => 'Filter timeslot for events',
219         //_('For how long in the past (in months) the events should be synchronized.')
220             'description'           => 'For how long in the past (in months) the events should be synchronized.',
221             'type'                  => Tinebase_Config_Abstract::TYPE_INT,
222             'clientRegistryInclude' => FALSE,
223             'setByAdminModule'      => FALSE,
224             'setBySetupModule'      => TRUE,
225             'default'               => 2,
226         ),
227         self::MAX_NOTIFICATION_PERIOD_FROM => array(
228         //_('Timeslot for event notifications')
229             'label'                 => 'Timeslot for event notifications',
230         //_('For how long in the past (in weeks) event notifications should be sent.')
231             'description'           => 'For how long in the past (in weeks) event notifications should be sent.',
232             'type'                  => Tinebase_Config_Abstract::TYPE_INT,
233             'clientRegistryInclude' => FALSE,
234             'setByAdminModule'      => FALSE,
235             'setBySetupModule'      => TRUE,
236             'default'               => 1, // 1 week is default
237         ),
238         self::MAX_JSON_DEFAULT_FILTER_PERIOD_FROM => array(
239         //_('Default filter period (from) for events fetched via JSON API')
240             'label'                 => 'Default filter period (from) for events fetched via JSON API',
241         //_('For how long in the past (in months) the events should be fetched.')
242             'description'           => 'For how long in the past (in months) the events should be fetched.',
243             'type'                  => Tinebase_Config_Abstract::TYPE_INT,
244             'clientRegistryInclude' => FALSE,
245             'setByAdminModule'      => FALSE,
246             'setBySetupModule'      => TRUE,
247             'default'               => 0,
248         ),
249         self::MAX_JSON_DEFAULT_FILTER_PERIOD_UNTIL => array(
250         //_('Default filter period (until) for events fetched via JSON API')
251             'label'                 => 'Default filter period (until) for events fetched via JSON API',
252         //_('For how long in the future (in months) the events should be fetched.')
253             'description'           => 'For how long in the future (in months) the events should be fetched.',
254             'type'                  => Tinebase_Config_Abstract::TYPE_INT,
255             'clientRegistryInclude' => FALSE,
256             'setByAdminModule'      => FALSE,
257             'setBySetupModule'      => TRUE,
258             'default'               => 1,
259         ),
260         self::DISABLE_EXTERNAL_IMIP => array(
261         //_('Disable iMIP for external organizers')
262             'label'                 => 'Disable iMIP for external organizers',
263         //_('Disable iMIP for external organizers')
264             'description'           => 'Disable iMIP for external organizers',
265             'type'                  => Tinebase_Config_Abstract::TYPE_BOOL,
266             'clientRegistryInclude' => false,
267             'setByAdminModule'      => false,
268             'setBySetupModule'      => true,
269             'default'               => false,
270         ),
271         self::SKIP_DOUBLE_EVENTS => array(
272                 //_('(CalDAV) Skip double events from personal or shared calendar')
273                 'label'                 => '(CalDAV) Skip double events from personal or shared calendar',
274                 //_('(CalDAV) Skip double events from personal or shared calendar ("personal" > Skip events from personal calendar or "shared" > Skip events from shared calendar)')
275                 'description'           => '(CalDAV) Skip double events from personal or shared calendar ("personal" > Skip events from personal calendar or "shared" > Skip events from shared calendar)',
276                 'type'                  => Tinebase_Config_Abstract::TYPE_STRING,
277                 'clientRegistryInclude' => FALSE,
278                 'setByAdminModule'      => FALSE,
279                 'setBySetupModule'      => FALSE,
280                 'default'               => '',
281         ),
282         self::RESOURCE_MAIL_FOR_EDITORS => array(
283             //_('Send notifications to every user with edit permissions of the added resources')
284             'label'                 => 'Send notifications to every user with edit permissions of the added resources',
285             'description'           => 'Send notifications to every user with edit permissions of the added resources',
286             'type'                  => Tinebase_Config_Abstract::TYPE_BOOL,
287             'clientRegistryInclude' => false,
288             'setBySetupModule'      => false,
289             'setByAdminModule'      => false,
290             'default'               => false
291         ),
292         self::ENABLED_FEATURES => array(
293             //_('Enabled Features')
294             'label'                 => 'Enabled Features',
295             //_('Enabled Features in Calendar Application.')
296             'description'           => 'Enabled Features in Calendar Application.',
297             'type'                  => 'object',
298             'class'                 => 'Tinebase_Config_Struct',
299             'clientRegistryInclude' => TRUE,
300             'content'               => array(
301                 self::FEATURE_SPLIT_VIEW => array(
302                     'label'         => 'Calendar Split View', //_('Calendar Split View')
303                     'description'   => 'Split day and week views by attendee', //_('Split day and week views by attendee')
304                 ),
305                 self::FEATURE_YEAR_VIEW => array(
306                     'label'         => 'Calendar Year View', //_('Calendar Year View')
307                     'description'   => 'Adds year view to Calendar', //_('Adds year view to Calendar')
308                 ),
309                 self::FEATURE_EXTENDED_EVENT_CONTEXT_ACTIONS => array(
310                     'label'         => 'Calendar Extended Context Menu Actions', //_('Calendar Extended Context Menu Actions')
311                     'description'   => 'Adds extended actions to event context menus', //_('Adds extended actions to event context menus')
312                 ),
313             ),
314             'default'               => array(
315                 self::FEATURE_SPLIT_VIEW           => true,
316                 self::FEATURE_YEAR_VIEW            => true,
317                 self::FEATURE_EXTENDED_EVENT_CONTEXT_ACTIONS    => false,
318             ),
319         ),
320     );
321     
322     /**
323      * (non-PHPdoc)
324      * @see tine20/Tinebase/Config/Abstract::$_appName
325      */
326     protected $_appName = 'Calendar';
327     
328     /**
329      * holds the instance of the singleton
330      *
331      * @var Tinebase_Config
332      */
333     private static $_instance = NULL;
334     
335     /**
336      * the constructor
337      *
338      * don't use the constructor. use the singleton 
339      */    
340     private function __construct() {}
341     
342     /**
343      * the constructor
344      *
345      * don't use the constructor. use the singleton 
346      */    
347     private function __clone() {}
348     
349     /**
350      * Returns instance of Tinebase_Config
351      *
352      * @return Tinebase_Config
353      */
354     public static function getInstance() 
355     {
356         if (self::$_instance === NULL) {
357             self::$_instance = new self();
358         }
359         
360         return self::$_instance;
361     }
362     
363     /**
364      * (non-PHPdoc)
365      * @see tine20/Tinebase/Config/Abstract::getProperties()
366      */
367     public static function getProperties()
368     {
369         return self::$_properties;
370     }
371 }