1 /* UIxPreferences.m - this file is part of SOGo
3 * Copyright (C) 2007 Inverse groupe conseil
5 * Author: Wolfgang Sourdeau <wsourdeau@inverse.ca>
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)
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.
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.
23 #import <Foundation/NSCalendarDate.h>
24 #import <Foundation/NSString.h>
25 #import <Foundation/NSTimeZone.h>
26 #import <Foundation/NSUserDefaults.h>
28 #import <NGObjWeb/WOContext.h>
29 #import <NGObjWeb/WORequest.h>
31 #import <SoObjects/SOGo/SOGoUser.h>
33 #import "UIxPreferences.h"
35 #warning this class is not finished
39 refresh calendar every X minutes
43 static BOOL defaultsRead = NO;
44 static BOOL shouldDisplayPasswordChange = NO;
46 @implementation UIxPreferences
54 ud = [NSUserDefaults standardUserDefaults];
55 shouldDisplayPasswordChange
56 = [ud boolForKey: @"SOGoUIxUserCanChangePassword"];
65 if ((self = [super init]))
69 ASSIGN (user, [context activeUser]);
70 ASSIGN (userDefaults, [user userDefaults]);
71 ASSIGN (today, [NSCalendarDate date]);
72 locale = [context valueForKey: @"locale"];
74 [locale objectForKey: NSWeekDayNameArray]);
85 [userDefaults release];
91 - (void) setItem: (NSString *) newItem
93 ASSIGN (item, newItem);
101 - (NSString *) inTheOffice
103 NSString *inTheOffice;
105 inTheOffice = [userDefaults objectForKey: @"InTheOffice"];
107 return ((!inTheOffice || [inTheOffice boolValue])
111 - (void) setInTheOffice: (NSString *) newValue
113 [userDefaults setObject: newValue forKey: @"InTheOffice"];
116 - (void) setAutoReplyText: (NSString *) newAutoReplyText
118 [userDefaults setObject: newAutoReplyText forKey: @"AutoReplyText"];
121 - (NSString *) autoReplyText
123 return [userDefaults objectForKey: @"AutoReplyText"];
126 - (NSArray *) timeZonesList
128 return [[NSTimeZone knownTimeZoneNames]
129 sortedArrayUsingSelector: @selector (localizedCaseInsensitiveCompare:)];
132 - (NSString *) userTimeZone
134 return [[user timeZone] timeZoneName];
137 - (void) setUserTimeZone: (NSString *) newUserTimeZone
139 [userDefaults setObject: newUserTimeZone forKey: @"TimeZone"];
142 - (NSArray *) shortDateFormatsList
144 NSMutableArray *shortDateFormatsList = nil;
145 NSString *key, *currentFormat;
149 shortDateFormatsList = [NSMutableArray array];
155 key = [NSString stringWithFormat: @"shortDateFmt_%d", nbr];
156 currentFormat = [self labelForKey: key];
157 if ([currentFormat length] > 0)
159 [shortDateFormatsList addObject: currentFormat];
166 return shortDateFormatsList;
169 - (NSString *) itemShortDateFormatText
171 return [today descriptionWithCalendarFormat: item
172 locale: [context valueForKey: @"locale"]];
175 - (NSString *) userShortDateFormat
177 return [userDefaults objectForKey: @"ShortDateFormat"];
180 - (void) setUserShortDateFormat: (NSString *) newFormat
182 [userDefaults setObject: newFormat forKey: @"ShortDateFormat"];
185 - (NSArray *) longDateFormatsList
187 NSMutableArray *longDateFormatsList = nil;
188 NSString *key, *currentFormat;
192 longDateFormatsList = [NSMutableArray array];
198 key = [NSString stringWithFormat: @"longDateFmt_%d", nbr];
199 currentFormat = [self labelForKey: key];
200 if ([currentFormat length] > 0)
202 [longDateFormatsList addObject: currentFormat];
209 return longDateFormatsList;
212 - (NSString *) itemLongDateFormatText
214 return [today descriptionWithCalendarFormat: item
215 locale: [context valueForKey: @"locale"]];
218 - (NSString *) userLongDateFormat
220 return [userDefaults objectForKey: @"LongDateFormat"];
223 - (void) setUserLongDateFormat: (NSString *) newFormat
225 [userDefaults setObject: newFormat forKey: @"LongDateFormat"];
228 - (NSArray *) timeFormatsList
230 NSMutableArray *timeFormatsList = nil;
231 NSString *key, *currentFormat;
235 timeFormatsList = [NSMutableArray array];
241 key = [NSString stringWithFormat: @"timeFmt_%d", nbr];
242 currentFormat = [self labelForKey: key];
243 if ([currentFormat length] > 0)
245 [timeFormatsList addObject: currentFormat];
252 return timeFormatsList;
255 - (NSString *) itemTimeFormatText
257 return [today descriptionWithCalendarFormat: item
258 locale: [context valueForKey: @"locale"]];
261 - (NSString *) userTimeFormat
263 return [userDefaults objectForKey: @"TimeFormat"];
266 - (void) setUserTimeFormat: (NSString *) newFormat
268 [userDefaults setObject: newFormat forKey: @"TimeFormat"];
271 - (NSArray *) daysList
273 NSMutableArray *daysList;
274 unsigned int currentDay;
276 daysList = [NSMutableArray new];
277 [daysList autorelease];
278 for (currentDay = 0; currentDay < 7; currentDay++)
279 [daysList addObject: [NSString stringWithFormat: @"%d", currentDay]];
284 - (NSString *) itemWeekStartDay
286 return [daysOfWeek objectAtIndex: [item intValue]];
289 - (NSString *) userWeekStartDay
291 return [userDefaults objectForKey: @"WeekStartDay"];
294 - (void) setUserWeekStartDay: (NSString *) newDay
296 [userDefaults setObject: newDay forKey: @"WeekStartDay"];
299 - (NSArray *) hoursList
301 unsigned int currentHour;
305 hours = [[NSMutableArray alloc] initWithCapacity: 24];
306 for (currentHour = 0; currentHour < 24; currentHour++)
307 [hours addObject: [NSString stringWithFormat: @"%.2d:00",
314 - (NSString *) userDayStartTime
318 time = [userDefaults objectForKey: @"DayStartTime"];
325 - (void) setUserDayStartTime: (NSString *) newTime
327 [userDefaults setObject: newTime forKey: @"DayStartTime"];
330 - (NSString *) userDayEndTime
334 time = [userDefaults objectForKey: @"DayEndTime"];
341 - (void) setUserDayEndTime: (NSString *) newTime
343 [userDefaults setObject: newTime forKey: @"DayEndTime"];
346 - (NSArray *) firstWeekList
348 return [NSArray arrayWithObjects: SOGoWeekStartHideWeekNumbers,
349 SOGoWeekStartJanuary1,
350 SOGoWeekStartFirst4DayWeek,
351 SOGoWeekStartFirstFullWeek, nil];
354 - (NSString *) itemFirstWeekText
356 return [self labelForKey: [NSString stringWithFormat: @"firstWeekOfYear_%@",
360 - (NSString *) userFirstWeek
362 return [userDefaults objectForKey: @"FirstWeek"];
365 - (void) setUserFirstWeek: (NSString *) newFirstWeek
367 [userDefaults setObject: newFirstWeek forKey: @"FirstWeek"];
370 - (NSString *) reminderEnabled
372 NSString *reminderEnabled;
374 reminderEnabled = [userDefaults objectForKey: @"ReminderEnabled"];
376 return ((!reminderEnabled || [reminderEnabled boolValue])
380 - (void) setReminderEnabled: (NSString *) newValue
382 [userDefaults setObject: newValue forKey: @"ReminderEnabled"];
385 - (NSString *) remindWithASound
387 NSString *remindWithASound;
389 remindWithASound = [userDefaults objectForKey: @"RemindWithASound"];
391 return ((!remindWithASound || [remindWithASound boolValue])
395 - (void) setRemindWithASound: (NSString *) newValue
397 [userDefaults setObject: newValue forKey: @"RemindWithASound"];
400 - (NSArray *) reminderTimesList
402 return [NSArray arrayWithObjects: @"0000", @"0005", @"0010", @"0015",
403 @"0030", @"0100", @"0200", @"0400", @"0800", @"1200",
404 @"2400", @"4800", nil];
407 - (NSString *) itemReminderTimeText
409 return [self labelForKey:
410 [NSString stringWithFormat: @"reminderTime_%@", item]];
413 - (NSString *) userReminderTime
415 return [userDefaults objectForKey: @"ReminderTime"];
418 - (void) setReminderTime: (NSString *) newTime
420 [userDefaults setObject: newTime forKey: @"ReminderTime"];
424 - (NSArray *) messageCheckList
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",
432 - (NSString *) itemMessageCheckText
434 return [self labelForKey:
435 [NSString stringWithFormat: @"messagecheck_%@", item]];
438 - (NSString *) userMessageCheck
440 return [user messageCheck];
443 - (void) setUserMessageCheck: (NSString *) newMessageCheck
445 [userDefaults setObject: newMessageCheck forKey: @"MessageCheck"];
448 - (NSArray *) messageForwardingList
450 return [NSArray arrayWithObjects: @"inline", @"attached", nil];
453 - (NSString *) itemMessageForwardingText
455 return [self labelForKey:
456 [NSString stringWithFormat: @"messageforward_%@", item]];
459 - (NSString *) userMessageForwarding
461 return [user messageForwarding];
464 - (void) setUserMessageForwarding: (NSString *) newMessageForwarding
466 [userDefaults setObject: newMessageForwarding forKey: @"MessageForwarding"];
469 - (id <WOActionResults>) defaultAction
471 id <WOActionResults> results;
474 request = [context request];
475 if ([[request method] isEqualToString: @"POST"])
477 [userDefaults synchronize];
478 results = [self jsCloseWithRefreshMethod: nil];
486 - (BOOL) shouldTakeValuesFromRequest: (WORequest *) request
487 inContext: (WOContext*) context
489 return [[request method] isEqualToString: @"POST"];
492 - (BOOL) shouldDisplayPasswordChange
494 return shouldDisplayPasswordChange;