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];
131 - (NSString *) userTimeZone
133 return [[user timeZone] timeZoneName];
136 - (void) setUserTimeZone: (NSString *) newUserTimeZone
138 [userDefaults setObject: newUserTimeZone forKey: @"TimeZone"];
141 - (NSArray *) shortDateFormatsList
143 NSMutableArray *shortDateFormatsList = nil;
144 NSString *key, *currentFormat;
148 shortDateFormatsList = [NSMutableArray array];
154 key = [NSString stringWithFormat: @"shortDateFmt_%d", nbr];
155 currentFormat = [self labelForKey: key];
156 if ([currentFormat length] > 0)
158 [shortDateFormatsList addObject: currentFormat];
165 return shortDateFormatsList;
168 - (NSString *) itemShortDateFormatText
170 return [today descriptionWithCalendarFormat: item
171 locale: [context valueForKey: @"locale"]];
174 - (NSString *) userShortDateFormat
176 return [userDefaults objectForKey: @"ShortDateFormat"];
179 - (void) setUserShortDateFormat: (NSString *) newFormat
181 [userDefaults setObject: newFormat forKey: @"ShortDateFormat"];
184 - (NSArray *) longDateFormatsList
186 NSMutableArray *longDateFormatsList = nil;
187 NSString *key, *currentFormat;
191 longDateFormatsList = [NSMutableArray array];
197 key = [NSString stringWithFormat: @"longDateFmt_%d", nbr];
198 currentFormat = [self labelForKey: key];
199 if ([currentFormat length] > 0)
201 [longDateFormatsList addObject: currentFormat];
208 return longDateFormatsList;
211 - (NSString *) itemLongDateFormatText
213 return [today descriptionWithCalendarFormat: item
214 locale: [context valueForKey: @"locale"]];
217 - (NSString *) userLongDateFormat
219 return [userDefaults objectForKey: @"LongDateFormat"];
222 - (void) setUserLongDateFormat: (NSString *) newFormat
224 [userDefaults setObject: newFormat forKey: @"LongDateFormat"];
227 - (NSArray *) timeFormatsList
229 NSMutableArray *timeFormatsList = nil;
230 NSString *key, *currentFormat;
234 timeFormatsList = [NSMutableArray array];
240 key = [NSString stringWithFormat: @"timeFmt_%d", nbr];
241 currentFormat = [self labelForKey: key];
242 if ([currentFormat length] > 0)
244 [timeFormatsList addObject: currentFormat];
251 return timeFormatsList;
254 - (NSString *) itemTimeFormatText
256 return [today descriptionWithCalendarFormat: item
257 locale: [context valueForKey: @"locale"]];
260 - (NSString *) userTimeFormat
262 return [userDefaults objectForKey: @"TimeFormat"];
265 - (void) setUserTimeFormat: (NSString *) newFormat
267 [userDefaults setObject: newFormat forKey: @"TimeFormat"];
270 - (NSArray *) daysList
272 NSMutableArray *daysList;
273 unsigned int currentDay;
275 daysList = [NSMutableArray new];
276 [daysList autorelease];
277 for (currentDay = 0; currentDay < 7; currentDay++)
278 [daysList addObject: [NSString stringWithFormat: @"%d", currentDay]];
283 - (NSString *) itemWeekStartDay
285 return [daysOfWeek objectAtIndex: [item intValue]];
288 - (NSString *) userWeekStartDay
290 return [userDefaults objectForKey: @"WeekStartDay"];
293 - (void) setUserWeekStartDay: (NSString *) newDay
295 [userDefaults setObject: newDay forKey: @"WeekStartDay"];
298 - (NSArray *) hoursList
300 unsigned int currentHour;
304 hours = [[NSMutableArray alloc] initWithCapacity: 24];
305 for (currentHour = 0; currentHour < 24; currentHour++)
306 [hours addObject: [NSString stringWithFormat: @"%.2d:00",
313 - (NSString *) userDayStartTime
317 time = [userDefaults objectForKey: @"DayStartTime"];
324 - (void) setUserDayStartTime: (NSString *) newTime
326 [userDefaults setObject: newTime forKey: @"DayStartTime"];
329 - (NSString *) userDayEndTime
333 time = [userDefaults objectForKey: @"DayEndTime"];
340 - (void) setUserDayEndTime: (NSString *) newTime
342 [userDefaults setObject: newTime forKey: @"DayEndTime"];
345 - (NSArray *) firstWeekList
347 return [NSArray arrayWithObjects: SOGoWeekStartHideWeekNumbers,
348 SOGoWeekStartJanuary1,
349 SOGoWeekStartFirst4DayWeek,
350 SOGoWeekStartFirstFullWeek, nil];
353 - (NSString *) itemFirstWeekText
355 return [self labelForKey: [NSString stringWithFormat: @"firstWeekOfYear_%@",
359 - (NSString *) userFirstWeek
361 return [userDefaults objectForKey: @"FirstWeek"];
364 - (void) setUserFirstWeek: (NSString *) newFirstWeek
366 [userDefaults setObject: newFirstWeek forKey: @"FirstWeek"];
369 - (NSString *) reminderEnabled
371 NSString *reminderEnabled;
373 reminderEnabled = [userDefaults objectForKey: @"ReminderEnabled"];
375 return ((!reminderEnabled || [reminderEnabled boolValue])
379 - (void) setReminderEnabled: (NSString *) newValue
381 [userDefaults setObject: newValue forKey: @"ReminderEnabled"];
384 - (NSString *) remindWithASound
386 NSString *remindWithASound;
388 remindWithASound = [userDefaults objectForKey: @"RemindWithASound"];
390 return ((!remindWithASound || [remindWithASound boolValue])
394 - (void) setRemindWithASound: (NSString *) newValue
396 [userDefaults setObject: newValue forKey: @"RemindWithASound"];
399 - (NSArray *) reminderTimesList
401 return [NSArray arrayWithObjects: @"0000", @"0005", @"0010", @"0015",
402 @"0030", @"0100", @"0200", @"0400", @"0800", @"1200",
403 @"2400", @"4800", nil];
406 - (NSString *) itemReminderTimeText
408 return [self labelForKey:
409 [NSString stringWithFormat: @"reminderTime_%@", item]];
412 - (NSString *) userReminderTime
414 return [userDefaults objectForKey: @"ReminderTime"];
417 - (void) setReminderTime: (NSString *) newTime
419 [userDefaults setObject: newTime forKey: @"ReminderTime"];
422 - (id <WOActionResults>) defaultAction
424 id <WOActionResults> results;
427 request = [context request];
428 if ([[request method] isEqualToString: @"POST"])
430 [userDefaults synchronize];
431 results = [self jsCloseWithRefreshMethod: nil];
439 - (BOOL) shouldTakeValuesFromRequest: (WORequest *) request
440 inContext: (WOContext*) context
442 return [[request method] isEqualToString: @"POST"];
445 - (BOOL) shouldDisplayPasswordChange
447 return shouldDisplayPasswordChange;