Revert "Crop daytimes"
[tine20] / tine20 / Calendar / Preference.php
1 <?php
2 /**
3  * Tine 2.0
4  * 
5  * @package     Calendar
6  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
7  * @author      Cornelius Weiss <c.weiss@metaways.de>
8  * @copyright   Copyright (c) 2009-2010 Metaways Infosystems GmbH (http://www.metaways.de)
9  */
10
11
12 /**
13  * backend for Calendar preferences
14  *
15  * @package     Calendar
16  */
17 class Calendar_Preference extends Tinebase_Preference_Abstract
18 {
19     /**
20      * where daysview should be scrolled to
21      */
22     const DAYSVIEW_STARTTIME = 'daysviewstarttime';
23     
24     /**
25      * default calendar all newly created/invited events are placed in
26      */
27     const DEFAULTCALENDAR = 'defaultCalendar';
28     
29     /**
30      * have name of default favorite an a central palce
31      * _("All my events")
32      */
33     const DEFAULTPERSISTENTFILTER_NAME = "All my events";
34     
35     /**
36      * general notification level
37      */
38     const NOTIFICATION_LEVEL = 'notificationLevel';
39     
40     /**
41      * send notifications of own updates
42      */
43     const SEND_NOTIFICATION_OF_OWN_ACTIONS = 'sendnotificationsofownactions';
44     
45     /**
46      * enable default alarm 
47      */
48     const DEFAULTALARM_ENABLED = 'defaultalarmenabled';
49     
50     /**
51      * default alarm time in minutes before
52      */
53     const DEFAULTALARM_MINUTESBEFORE = 'defaultalarmminutesbefore';
54     
55     /**
56      * @var string application
57      */
58     protected $_application = 'Calendar';
59         
60     /**
61      * get all possible application prefs
62      *
63      * @return  array   all application prefs
64      */
65     public function getAllApplicationPreferences()
66     {
67         $allPrefs = array(
68             self::DAYSVIEW_STARTTIME,
69             self::DEFAULTCALENDAR,
70             self::DEFAULTPERSISTENTFILTER,
71             self::NOTIFICATION_LEVEL,
72             self::SEND_NOTIFICATION_OF_OWN_ACTIONS,
73             self::DEFAULTALARM_ENABLED,
74             self::DEFAULTALARM_MINUTESBEFORE,
75         );
76             
77         return $allPrefs;
78     }
79     
80     /**
81      * get translated right descriptions
82      * 
83      * @return  array with translated descriptions for this applications preferences
84      */
85     public function getTranslatedPreferences()
86     {
87         $translate = Tinebase_Translation::getTranslation($this->_application);
88
89         $prefDescriptions = array(
90             self::DAYSVIEW_STARTTIME => array(
91                 'label'         => $translate->_('Start Time'),
92                 'description'   => $translate->_('Position on the left time axis, day and week view should start with'),
93             ),
94             self::DEFAULTCALENDAR  => array(
95                 'label'         => $translate->_('Default Calendar'),
96                 'description'   => $translate->_('The default calendar for invitations and new events'),
97             ),
98             self::DEFAULTPERSISTENTFILTER  => array(
99                 'label'         => $translate->_('Default Favorite'),
100                 'description'   => $translate->_('The default favorite which is loaded on calendar startup'),
101             ),
102             self::NOTIFICATION_LEVEL => array(
103                 'label'         => $translate->_('Get Notification Emails'),
104                 'description'   => $translate->_('The level of actions you want to be notified about. Please note that organizers will get notifications for all updates including attendee answers unless this preference is set to "Never"'),
105             ),
106             self::SEND_NOTIFICATION_OF_OWN_ACTIONS => array(
107                 'label'         => $translate->_('Send Notifications Emails of own Actions'),
108                 'description'   => $translate->_('Get notifications emails for actions you did yourself'),
109             ),
110             self::DEFAULTALARM_ENABLED => array(
111                 'label'         => $translate->_('Enable Standard Alarm'),
112                 'description'   => $translate->_('New events get a standard alarm as defined below'),
113             ),
114             self::DEFAULTALARM_MINUTESBEFORE => array(
115                 'label'         => $translate->_('Standard Alarm Time'),
116                 'description'   => $translate->_('Minutes before the event starts'),
117             ),
118         );
119         
120         return $prefDescriptions;
121     }
122     
123     /**
124      * get preference defaults if no default is found in the database
125      *
126      * @param string $_preferenceName
127      * @param string|Tinebase_Model_User $_accountId
128      * @param string $_accountType
129      * @return Tinebase_Model_Preference
130      */
131     public function getApplicationPreferenceDefaults($_preferenceName, $_accountId = NULL, $_accountType = Tinebase_Acl_Rights::ACCOUNT_TYPE_USER)
132     {
133         if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ 
134             . ' Get default value for ' . $_preferenceName . ' of account id '. $_accountId);
135         
136         $preference = $this->_getDefaultBasePreference($_preferenceName);
137         
138         switch ($_preferenceName) {
139             case self::DAYSVIEW_STARTTIME:
140                 $doc = new DomDocument('1.0');
141                 $options = $doc->createElement('options');
142                 $doc->appendChild($options);
143                 
144                 $time = new Tinebase_DateTime('@0');
145                 for ($i=0; $i<48; $i++) {
146                     $time->addMinute($i ? 30 : 0);
147                     $timeString = $time->format('H:i');
148                     
149                     $value  = $doc->createElement('value');
150                     $value->appendChild($doc->createTextNode($timeString));
151                     $label  = $doc->createElement('label');
152                     $label->appendChild($doc->createTextNode($timeString)); // @todo l10n
153                     
154                     $option = $doc->createElement('option');
155                     $option->appendChild($value);
156                     $option->appendChild($label);
157                     $options->appendChild($option);
158                 }
159                 
160                 $preference->value      = '08:00';
161                 $preference->options = $doc->saveXML();
162                 break;
163             case self::DEFAULTCALENDAR:
164                 $this->_getDefaultContainerPreferenceDefaults($preference, $_accountId);
165                 break;
166             case self::DEFAULTPERSISTENTFILTER:
167                 $preference->value          = Tinebase_PersistentFilter::getPreferenceValues('Calendar', $_accountId, "All my events");
168                 break;
169             case self::NOTIFICATION_LEVEL:
170                 $translate = Tinebase_Translation::getTranslation($this->_application);
171                 // need to put the translations strings here because they were not found in the xml below :/
172                 // _('Never') _('On invitation and cancellation only') _('On time changes') _('On all updates but attendee responses') _('On attendee responses too')
173                 $preference->value      = Calendar_Controller_EventNotifications::NOTIFICATION_LEVEL_EVENT_RESCHEDULE;
174                 $preference->options    = '<?xml version="1.0" encoding="UTF-8"?>
175                     <options>
176                         <option>
177                             <value>'. Calendar_Controller_EventNotifications::NOTIFICATION_LEVEL_NONE . '</value>
178                             <label>'. $translate->_('Never') . '</label>
179                         </option>
180                         <option>
181                             <value>'. Calendar_Controller_EventNotifications::NOTIFICATION_LEVEL_INVITE_CANCEL . '</value>
182                             <label>'. $translate->_('On invitation and cancellation only') . '</label>
183                         </option>
184                         <option>
185                             <value>'. Calendar_Controller_EventNotifications::NOTIFICATION_LEVEL_EVENT_RESCHEDULE . '</value>
186                             <label>'. $translate->_('On time changes') . '</label>
187                         </option>
188                         <option>
189                             <value>'. Calendar_Controller_EventNotifications::NOTIFICATION_LEVEL_EVENT_UPDATE . '</value>
190                             <label>'. $translate->_('On all updates but attendee responses') . '</label>
191                         </option>
192                         <option>
193                             <value>'. Calendar_Controller_EventNotifications::NOTIFICATION_LEVEL_ATTENDEE_STATUS_UPDATE . '</value>
194                             <label>'. $translate->_('On attendee responses too') . '</label>
195                         </option>
196                     </options>';
197                 break;
198             case self::SEND_NOTIFICATION_OF_OWN_ACTIONS:
199                 $preference->value      = 0;
200                 $preference->options    = '<?xml version="1.0" encoding="UTF-8"?>
201                     <options>
202                         <special>' . Tinebase_Preference_Abstract::YES_NO_OPTIONS . '</special>
203                     </options>';
204                 break;
205             case self::DEFAULTALARM_ENABLED:
206                 $preference->value      = 0;
207                 $preference->options    = '<?xml version="1.0" encoding="UTF-8"?>
208                     <options>
209                         <special>' . Tinebase_Preference_Abstract::YES_NO_OPTIONS . '</special>
210                     </options>';
211                 break;
212             case self::DEFAULTALARM_MINUTESBEFORE:
213                 $preference->value      = 15;
214                 $preference->options    = '';
215                 break;
216             default:
217                 throw new Tinebase_Exception_NotFound('Default preference with name ' . $_preferenceName . ' not found.');
218         }
219         
220         return $preference;
221     }
222 }