]> err.no Git - scalable-opengroupware.org/blob - UI/PreferencesUI/UIxPreferences.m
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1236 d1b88da0-ebda-0310...
[scalable-opengroupware.org] / UI / PreferencesUI / UIxPreferences.m
1 /* UIxPreferences.m - this file is part of SOGo
2  *
3  * Copyright (C) 2007 Inverse groupe conseil
4  *
5  * Author: Wolfgang Sourdeau <wsourdeau@inverse.ca>
6  *
7  * This file is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2, or (at your option)
10  * any later version.
11  *
12  * This file is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; see the file COPYING.  If not, write to
19  * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20  * Boston, MA 02111-1307, USA.
21  */
22
23 #import <Foundation/NSCalendarDate.h>
24 #import <Foundation/NSString.h>
25 #import <Foundation/NSTimeZone.h>
26 #import <Foundation/NSUserDefaults.h>
27
28 #import <NGObjWeb/WOContext.h>
29 #import <NGObjWeb/WORequest.h>
30
31 #import <SoObjects/SOGo/SOGoUser.h>
32
33 #import "UIxPreferences.h"
34
35 #warning this class is not finished
36 /* remaining:
37    default event length
38    default snooze length
39    refresh calendar every X minutes
40    workweek = from -> to
41    identities */
42
43 static BOOL defaultsRead = NO;
44 static BOOL shouldDisplayPasswordChange = NO;
45
46 @implementation UIxPreferences
47
48 + (void) initialize
49 {
50   NSUserDefaults *ud;
51
52   if (!defaultsRead)
53     {
54       ud = [NSUserDefaults standardUserDefaults];
55       shouldDisplayPasswordChange
56         = [ud boolForKey: @"SOGoUIxUserCanChangePassword"];
57       defaultsRead = YES;
58     }
59 }
60
61 - (id) init
62 {
63   NSDictionary *locale;
64   
65   if ((self = [super init]))
66     {
67       item = nil;
68       hours = nil;
69       ASSIGN (user, [context activeUser]);
70       ASSIGN (userDefaults, [user userDefaults]);
71       ASSIGN (today, [NSCalendarDate date]);
72       locale = [context valueForKey: @"locale"];
73       ASSIGN (daysOfWeek,
74               [locale objectForKey: NSWeekDayNameArray]);
75     }
76
77   return self;
78 }
79
80 - (void) dealloc
81 {
82   [today release];
83   [item release];
84   [user release];
85   [userDefaults release];
86   [hours release];
87   [daysOfWeek release];
88   [super dealloc];
89 }
90
91 - (void) setItem: (NSString *) newItem
92 {
93   ASSIGN (item, newItem);
94 }
95
96 - (NSString *) item
97 {
98   return item;
99 }
100
101 - (NSString *) inTheOffice
102 {
103   NSString *inTheOffice;
104
105   inTheOffice = [userDefaults objectForKey: @"InTheOffice"];
106
107   return ((!inTheOffice || [inTheOffice boolValue])
108           ? @"YES" : @"NO");
109 }
110
111 - (void) setInTheOffice: (NSString *) newValue
112 {
113   [userDefaults setObject: newValue forKey: @"InTheOffice"];
114 }
115
116 - (void) setAutoReplyText: (NSString *) newAutoReplyText
117 {
118   [userDefaults setObject: newAutoReplyText forKey: @"AutoReplyText"];
119 }
120
121 - (NSString *) autoReplyText
122 {
123   return [userDefaults objectForKey: @"AutoReplyText"];
124 }
125
126 - (NSArray *) timeZonesList
127 {
128   return [[NSTimeZone knownTimeZoneNames]
129            sortedArrayUsingSelector: @selector (localizedCaseInsensitiveCompare:)];
130 }
131
132 - (NSString *) userTimeZone
133 {
134   return [[user timeZone] timeZoneName];
135 }
136
137 - (void) setUserTimeZone: (NSString *) newUserTimeZone
138 {
139   [userDefaults setObject: newUserTimeZone forKey: @"TimeZone"];
140 }
141
142 - (NSArray *) shortDateFormatsList
143 {
144   NSMutableArray *shortDateFormatsList = nil;
145   NSString *key, *currentFormat;
146   unsigned int nbr;
147   BOOL done;
148
149   shortDateFormatsList = [NSMutableArray array];
150
151   nbr = 0;
152   done = NO;
153   while (!done)
154     {
155       key = [NSString stringWithFormat: @"shortDateFmt_%d", nbr];
156       currentFormat = [self labelForKey: key];
157       if ([currentFormat length] > 0)
158         {
159           [shortDateFormatsList addObject: currentFormat];
160           nbr++;
161         }
162       else
163         done = YES;
164     }
165
166   return shortDateFormatsList;
167 }
168
169 - (NSString *) itemShortDateFormatText
170 {
171   return [today descriptionWithCalendarFormat: item
172                 locale: [context valueForKey: @"locale"]];
173 }
174
175 - (NSString *) userShortDateFormat
176 {
177   return [userDefaults objectForKey: @"ShortDateFormat"];
178 }
179
180 - (void) setUserShortDateFormat: (NSString *) newFormat
181 {
182   [userDefaults setObject: newFormat forKey: @"ShortDateFormat"];
183 }
184
185 - (NSArray *) longDateFormatsList
186 {
187   NSMutableArray *longDateFormatsList = nil;
188   NSString *key, *currentFormat;
189   unsigned int nbr;
190   BOOL done;
191
192   longDateFormatsList = [NSMutableArray array];
193
194   nbr = 0;
195   done = NO;
196   while (!done)
197     {
198       key = [NSString stringWithFormat: @"longDateFmt_%d", nbr];
199       currentFormat = [self labelForKey: key];
200       if ([currentFormat length] > 0)
201         {
202           [longDateFormatsList addObject: currentFormat];
203           nbr++;
204         }
205       else
206         done = YES;
207     }
208
209   return longDateFormatsList;
210 }
211
212 - (NSString *) itemLongDateFormatText
213 {
214   return [today descriptionWithCalendarFormat: item
215                 locale: [context valueForKey: @"locale"]];
216 }
217
218 - (NSString *) userLongDateFormat
219 {
220   return [userDefaults objectForKey: @"LongDateFormat"];
221 }
222
223 - (void) setUserLongDateFormat: (NSString *) newFormat
224 {
225   [userDefaults setObject: newFormat forKey: @"LongDateFormat"];
226 }
227
228 - (NSArray *) timeFormatsList
229 {
230   NSMutableArray *timeFormatsList = nil;
231   NSString *key, *currentFormat;
232   unsigned int nbr;
233   BOOL done;
234
235   timeFormatsList = [NSMutableArray array];
236
237   nbr = 0;
238   done = NO;
239   while (!done)
240     {
241       key = [NSString stringWithFormat: @"timeFmt_%d", nbr];
242       currentFormat = [self labelForKey: key];
243       if ([currentFormat length] > 0)
244         {
245           [timeFormatsList addObject: currentFormat];
246           nbr++;
247         }
248       else
249         done = YES;
250     }
251
252   return timeFormatsList;
253 }
254
255 - (NSString *) itemTimeFormatText
256 {
257   return [today descriptionWithCalendarFormat: item
258                 locale: [context valueForKey: @"locale"]];
259 }
260
261 - (NSString *) userTimeFormat
262 {
263   return [userDefaults objectForKey: @"TimeFormat"];
264 }
265
266 - (void) setUserTimeFormat: (NSString *) newFormat
267 {
268   [userDefaults setObject: newFormat forKey: @"TimeFormat"];
269 }
270
271 - (NSArray *) daysList
272 {
273   NSMutableArray *daysList;
274   unsigned int currentDay;
275
276   daysList = [NSMutableArray new];
277   [daysList autorelease];
278   for (currentDay = 0; currentDay < 7; currentDay++)
279     [daysList addObject: [NSString stringWithFormat: @"%d", currentDay]];
280
281   return daysList;
282 }
283
284 - (NSString *) itemWeekStartDay
285 {
286   return [daysOfWeek objectAtIndex: [item intValue]];
287 }
288
289 - (NSString *) userWeekStartDay
290 {
291   return [userDefaults objectForKey: @"WeekStartDay"];
292 }
293
294 - (void) setUserWeekStartDay: (NSString *) newDay
295 {
296   [userDefaults setObject: newDay forKey: @"WeekStartDay"];
297 }
298
299 - (NSArray *) hoursList
300 {
301   unsigned int currentHour;
302
303   if (!hours)
304     {
305       hours = [[NSMutableArray alloc] initWithCapacity: 24];
306       for (currentHour = 0; currentHour < 24; currentHour++)
307         [hours addObject: [NSString stringWithFormat: @"%.2d:00",
308                                     currentHour]];
309     }
310
311   return hours;
312 }
313
314 - (NSString *) userDayStartTime
315 {
316   NSString *time;
317
318   time = [userDefaults objectForKey: @"DayStartTime"];
319   if (!time)
320     time = @"08:00";
321
322   return time;
323 }
324
325 - (void) setUserDayStartTime: (NSString *) newTime
326 {
327   [userDefaults setObject: newTime forKey: @"DayStartTime"];
328 }
329
330 - (NSString *) userDayEndTime
331 {
332   NSString *time;
333
334   time = [userDefaults objectForKey: @"DayEndTime"];
335   if (!time)
336     time = @"18:00";
337
338   return time;
339 }
340
341 - (void) setUserDayEndTime: (NSString *) newTime
342 {
343   [userDefaults setObject: newTime forKey: @"DayEndTime"];
344 }
345
346 - (NSArray *) firstWeekList
347 {
348   return [NSArray arrayWithObjects: SOGoWeekStartHideWeekNumbers,
349                   SOGoWeekStartJanuary1,
350                   SOGoWeekStartFirst4DayWeek,
351                   SOGoWeekStartFirstFullWeek, nil];
352 }
353
354 - (NSString *) itemFirstWeekText
355 {
356   return [self labelForKey: [NSString stringWithFormat: @"firstWeekOfYear_%@",
357                                       item]];
358 }
359
360 - (NSString *) userFirstWeek
361 {
362   return [userDefaults objectForKey: @"FirstWeek"];
363 }
364
365 - (void) setUserFirstWeek: (NSString *) newFirstWeek
366 {
367   [userDefaults setObject: newFirstWeek forKey: @"FirstWeek"];
368 }
369
370 - (NSString *) reminderEnabled
371 {
372   NSString *reminderEnabled;
373
374   reminderEnabled = [userDefaults objectForKey: @"ReminderEnabled"];
375
376   return ((!reminderEnabled || [reminderEnabled boolValue])
377           ? @"YES" : @"NO");
378 }
379
380 - (void) setReminderEnabled: (NSString *) newValue
381 {
382   [userDefaults setObject: newValue forKey: @"ReminderEnabled"];
383 }
384
385 - (NSString *) remindWithASound
386 {
387   NSString *remindWithASound;
388
389   remindWithASound = [userDefaults objectForKey: @"RemindWithASound"];
390
391   return ((!remindWithASound || [remindWithASound boolValue])
392           ? @"YES" : @"NO");
393 }
394
395 - (void) setRemindWithASound: (NSString *) newValue
396 {
397   [userDefaults setObject: newValue forKey: @"RemindWithASound"];
398 }
399
400 - (NSArray *) reminderTimesList
401 {
402   return [NSArray arrayWithObjects: @"0000", @"0005", @"0010", @"0015",
403                   @"0030", @"0100", @"0200", @"0400", @"0800", @"1200",
404                   @"2400", @"4800", nil];
405 }
406
407 - (NSString *) itemReminderTimeText
408 {
409   return [self labelForKey:
410                  [NSString stringWithFormat: @"reminderTime_%@", item]];
411 }
412
413 - (NSString *) userReminderTime
414 {
415   return [userDefaults objectForKey: @"ReminderTime"];
416 }
417
418 - (void) setReminderTime: (NSString *) newTime
419 {
420   [userDefaults setObject: newTime forKey: @"ReminderTime"];
421 }
422
423 /* Mailer */
424 - (NSArray *) messageCheckList
425 {
426   return [NSArray arrayWithObjects: @"manually", @"every_minute",
427                   @"every_2_minutes", @"every_5_minutes", @"every_10_minutes",
428                   @"every_20_minutes", @"every_30_minutes", @"once_per_hour",
429                   nil];
430 }
431
432 - (NSString *) itemMessageCheckText
433 {
434   return [self labelForKey:
435                  [NSString stringWithFormat: @"messagecheck_%@", item]];
436 }
437
438 - (NSString *) userMessageCheck
439 {
440   return [user messageCheck];
441 }
442
443 - (void) setUserMessageCheck: (NSString *) newMessageCheck
444 {
445   [userDefaults setObject: newMessageCheck forKey: @"MessageCheck"];
446 }
447
448 - (NSArray *) messageForwardingList
449 {
450   return [NSArray arrayWithObjects: @"inline", @"attached", nil];
451 }
452
453 - (NSString *) itemMessageForwardingText
454 {
455   return [self labelForKey:
456                  [NSString stringWithFormat: @"messageforward_%@", item]];
457 }
458
459 - (NSString *) userMessageForwarding
460 {
461   return [user messageForwarding];
462 }
463
464 - (void) setUserMessageForwarding: (NSString *) newMessageForwarding
465 {
466   [userDefaults setObject: newMessageForwarding forKey: @"MessageForwarding"];
467 }
468
469 - (id <WOActionResults>) defaultAction
470 {
471   id <WOActionResults> results;
472   WORequest *request;
473
474   request = [context request];
475   if ([[request method] isEqualToString: @"POST"])
476     {
477       [userDefaults synchronize];
478       results = [self jsCloseWithRefreshMethod: nil];
479     }
480   else
481     results = self;
482
483   return results;
484 }
485
486 - (BOOL) shouldTakeValuesFromRequest: (WORequest *) request
487                            inContext: (WOContext*) context
488 {
489   return [[request method] isEqualToString: @"POST"];
490 }
491
492 - (BOOL) shouldDisplayPasswordChange
493 {
494   return shouldDisplayPasswordChange;
495 }
496
497 @end