Monotone-Parent: ed1968caab1223af1ac0a41cf3fd4504a3dfa473

Monotone-Revision: 4d2697a35bcf482dfa9095d58087ffb8469eada5

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2008-07-18T19:25:26
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Wolfgang Sourdeau 2008-07-18 19:25:26 +00:00
parent dcc47678c3
commit b75d761539
29 changed files with 512 additions and 272 deletions

View File

@ -1,3 +1,46 @@
2008-07-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -startDate]):
same as below.
* UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
-weeksToDisplay]): use the user's first day of week to chose the
day to start the series.
([UIxCalMonthView -dayCellClasses]): take the user's first day of
week into account.
([UIxCalMonthView -endDate]): same as above.
* UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
-firstDayOfWeek]): new template accessor.
* UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
-currentHourLineClass]): new template accessor.
([UIxCalDayTable -clickableHourCellClass]): add the class
'outOfDay' when the current hour is out of the user's day start
and end hour ranges.
* UI/Scheduler/UIxCalDateSelector.m ([UIxCalDateSelector
-firstDayOfWeek]): new template accessor.
* UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor -dayStartHour])
([UIxAttendeesEditor -dayEndHour]): new template accessors.
* UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -newStartDate]),
UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
-newStartDate]): take the user-configured day start hour into account.
* UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
-firstWeekList]): no longer list the option that enables the
hiding of week numbers.
* SoObjects/SOGo/SOGoUser.m ([SOGoUser -firstDayOfWeek])
([SOGoUser -firstDayOfWeekForDate:date])
([SOGoUser -dayOfWeekForDate:date], [SOGoUser -dayStartHour])
([SOGoUser -dayEndHour])
([SOGoUser -firstWeekOfYearForDate:date])
([SOGoUser -weekNumberForDate:date]): new methods that help take
the calendar-related user preferences into account.
2008-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca> 2008-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView

View File

@ -50,7 +50,6 @@
@class SOGoDateFormatter; @class SOGoDateFormatter;
@class SOGoUserFolder; @class SOGoUserFolder;
extern NSString *SOGoWeekStartHideWeekNumbers;
extern NSString *SOGoWeekStartJanuary1; extern NSString *SOGoWeekStartJanuary1;
extern NSString *SOGoWeekStartFirst4DayWeek; extern NSString *SOGoWeekStartFirst4DayWeek;
extern NSString *SOGoWeekStartFirstFullWeek; extern NSString *SOGoWeekStartFirstFullWeek;
@ -119,6 +118,16 @@ extern NSString *SOGoWeekStartFirstFullWeek;
- (NSTimeZone *) timeZone; - (NSTimeZone *) timeZone;
- (NSTimeZone *) serverTimeZone; - (NSTimeZone *) serverTimeZone;
- (unsigned int) firstDayOfWeek;
- (NSCalendarDate *) firstDayOfWeekForDate: (NSCalendarDate *) date;
- (unsigned int) dayOfWeekForDate: (NSCalendarDate *) date;
- (unsigned int) dayStartHour;
- (unsigned int) dayEndHour;
- (NSCalendarDate *) firstWeekOfYearForDate: (NSCalendarDate *) date;
- (unsigned int) weekNumberForDate: (NSCalendarDate *) date;
- (NSArray *) mailAccounts; - (NSArray *) mailAccounts;
- (NSDictionary *) accountWithName: (NSString *) accountName; - (NSDictionary *) accountWithName: (NSString *) accountName;
- (NSArray *) allIdentities; - (NSArray *) allIdentities;

View File

@ -20,6 +20,7 @@
*/ */
#import <Foundation/NSArray.h> #import <Foundation/NSArray.h>
#import <Foundation/NSCalendarDate.h>
#import <Foundation/NSDictionary.h> #import <Foundation/NSDictionary.h>
#import <Foundation/NSEnumerator.h> #import <Foundation/NSEnumerator.h>
#import <Foundation/NSNull.h> #import <Foundation/NSNull.h>
@ -30,6 +31,7 @@
#import <NGObjWeb/WOContext.h> #import <NGObjWeb/WOContext.h>
#import <NGObjWeb/WORequest.h> #import <NGObjWeb/WORequest.h>
#import <NGObjWeb/SoObject.h> #import <NGObjWeb/SoObject.h>
#import <NGExtensions/NSCalendarDate+misc.h>
#import <NGExtensions/NSNull+misc.h> #import <NGExtensions/NSNull+misc.h>
#import <NGExtensions/NSObject+Logs.h> #import <NGExtensions/NSObject+Logs.h>
@ -50,8 +52,10 @@ static NSString *defaultLanguage = nil;
static NSArray *superUsernames = nil; static NSArray *superUsernames = nil;
static NSURL *AgenorProfileURL = nil; static NSURL *AgenorProfileURL = nil;
static BOOL acceptAnyUser = NO; static BOOL acceptAnyUser = NO;
static int sogoFirstDayOfWeek = -1;
static int defaultDayStartTime = -1;
static int defaultDayEndTime = -1;
NSString *SOGoWeekStartHideWeekNumbers = @"HideWeekNumbers";
NSString *SOGoWeekStartJanuary1 = @"January1"; NSString *SOGoWeekStartJanuary1 = @"January1";
NSString *SOGoWeekStartFirst4DayWeek = @"First4DayWeek"; NSString *SOGoWeekStartFirst4DayWeek = @"First4DayWeek";
NSString *SOGoWeekStartFirstFullWeek = @"FirstFullWeek"; NSString *SOGoWeekStartFirstFullWeek = @"FirstFullWeek";
@ -73,6 +77,19 @@ NSString *SOGoWeekStartFirstFullWeek = @"FirstFullWeek";
@implementation SOGoUser @implementation SOGoUser
static int
_timeValue (NSString *key)
{
int time;
if (key && [key length] > 1)
time = [[key substringToIndex: 2] intValue];
else
time = -1;
return time;
}
+ (void) initialize + (void) initialize
{ {
NSString *tzName; NSString *tzName;
@ -88,6 +105,23 @@ NSString *SOGoWeekStartFirstFullWeek = @"FirstFullWeek";
serverTimeZone = [NSTimeZone timeZoneWithName: tzName]; serverTimeZone = [NSTimeZone timeZoneWithName: tzName];
[serverTimeZone retain]; [serverTimeZone retain];
} }
if (sogoFirstDayOfWeek == -1)
sogoFirstDayOfWeek = [ud integerForKey: @"SOGoFirstDayOfWeek"];
if (defaultDayStartTime == -1)
{
defaultDayStartTime
= _timeValue ([ud stringForKey: @"SOGoDayStartTime"]);
if (defaultDayStartTime == -1)
defaultDayStartTime = 8;
}
if (defaultDayEndTime == -1)
{
defaultDayEndTime
= _timeValue ([ud stringForKey: @"SOGoDayEndTime"]);
if (defaultDayEndTime == -1)
defaultDayEndTime = 18;
}
if (!AgenorProfileURL) if (!AgenorProfileURL)
{ {
profileURL = [ud stringForKey: @"AgenorProfileURL"]; profileURL = [ud stringForKey: @"AgenorProfileURL"];
@ -105,7 +139,6 @@ NSString *SOGoWeekStartFirstFullWeek = @"FirstFullWeek";
@" value set to 'localhost'"]; @" value set to 'localhost'"];
fallbackIMAP4Server = @"localhost"; fallbackIMAP4Server = @"localhost";
} }
if (!defaultLanguage) if (!defaultLanguage)
{ {
ASSIGN (defaultLanguage, [ud stringForKey: @"SOGoDefaultLanguage"]); ASSIGN (defaultLanguage, [ud stringForKey: @"SOGoDefaultLanguage"]);
@ -451,6 +484,124 @@ NSString *SOGoWeekStartFirstFullWeek = @"FirstFullWeek";
return serverTimeZone; return serverTimeZone;
} }
- (unsigned int) firstDayOfWeek
{
unsigned int firstDayOfWeek;
NSNumber *value;
value = [[self userDefaults] objectForKey: @"WeekStartDay"];
if (value)
firstDayOfWeek = [value unsignedIntValue];
else
firstDayOfWeek = sogoFirstDayOfWeek;
return firstDayOfWeek;
}
- (NSCalendarDate *) firstDayOfWeekForDate: (NSCalendarDate *) date
{
int offset;
NSCalendarDate *firstDay;
offset = ([self firstDayOfWeek] - [date dayOfWeek]);
if (offset > 0)
offset -= 7;
firstDay = [date addTimeInterval: offset * 86400];
return firstDay;
}
- (unsigned int) dayOfWeekForDate: (NSCalendarDate *) date
{
unsigned int offset, baseDayOfWeek, dayOfWeek;
offset = [self firstDayOfWeek];
baseDayOfWeek = [date dayOfWeek];
if (offset > baseDayOfWeek)
baseDayOfWeek += 7;
dayOfWeek = baseDayOfWeek - offset;
return dayOfWeek;
}
- (unsigned int) dayStartHour
{
int limit;
limit = _timeValue ([[self userDefaults] stringForKey: @"DayStartTime"]);
if (limit == -1)
limit = defaultDayStartTime;
return limit;
}
- (unsigned int) dayEndHour
{
int limit;
limit = _timeValue ([[self userDefaults] stringForKey: @"DayEndTime"]);
if (limit == -1)
limit = defaultDayEndTime;
return limit;
}
- (NSCalendarDate *) firstWeekOfYearForDate: (NSCalendarDate *) date
{
NSString *firstWeekRule;
NSCalendarDate *januaryFirst, *firstWeek;
unsigned int dayOfWeek;
firstWeekRule = [userDefaults objectForKey: @"FirstWeek"];
januaryFirst = [NSCalendarDate dateWithYear: [date yearOfCommonEra]
month: 1 day: 1 hour: 0 minute: 0 second: 0
timeZone: [date timeZone]];
if ([firstWeekRule isEqualToString: SOGoWeekStartFirst4DayWeek])
{
dayOfWeek = [self dayOfWeekForDate: januaryFirst];
if (dayOfWeek < 4)
firstWeek = [self firstDayOfWeekForDate: januaryFirst];
else
firstWeek = [self firstDayOfWeekForDate: [januaryFirst
dateByAddingYears: 0
months: 0
days: 7]];
}
else if ([firstWeekRule isEqualToString: SOGoWeekStartFirstFullWeek])
{
dayOfWeek = [self dayOfWeekForDate: januaryFirst];
if (dayOfWeek == 0)
firstWeek = [self firstDayOfWeekForDate: januaryFirst];
else
firstWeek = [self firstDayOfWeekForDate: [januaryFirst
dateByAddingYears: 0
months: 0
days: 7]];
}
else
firstWeek = [self firstDayOfWeekForDate: januaryFirst];
return firstWeek;
}
- (unsigned int) weekNumberForDate: (NSCalendarDate *) date
{
NSCalendarDate *firstWeek;
unsigned int weekNumber;
firstWeek = [self firstWeekOfYearForDate: date];
if ([firstWeek earlierDate: date] == firstWeek)
weekNumber = ([date timeIntervalSinceDate: firstWeek]
/ (86400 * 7) + 1);
else
weekNumber = 0;
return weekNumber;
}
/* mail */ /* mail */
- (void) _prepareDefaultMailAccounts - (void) _prepareDefaultMailAccounts
{ {

View File

@ -47,7 +47,6 @@
"Play a sound when a reminder comes due" = "Geluidafspelen bij herinnering"; "Play a sound when a reminder comes due" = "Geluidafspelen bij herinnering";
"Default reminder :" = "Standaard herinnering:"; "Default reminder :" = "Standaard herinnering:";
"firstWeekOfYear_HideWeekNumbers" = "Weeknummers verbergen";
"firstWeekOfYear_January1" = "Begint op 1 januari"; "firstWeekOfYear_January1" = "Begint op 1 januari";
"firstWeekOfYear_First4DayWeek" = "Eerste week met 4 dagen"; "firstWeekOfYear_First4DayWeek" = "Eerste week met 4 dagen";
"firstWeekOfYear_FirstFullWeek" = "Eerste volledige week"; "firstWeekOfYear_FirstFullWeek" = "Eerste volledige week";
@ -82,6 +81,7 @@
"Default identity:" = "Standaardidentiteit:"; "Default identity:" = "Standaardidentiteit:";
"Manage identities..." = "Identiteiten beheren..."; "Manage identities..." = "Identiteiten beheren...";
"Signature" = "Signature";
/* password */ /* password */
"New password:" = "Nieuw wachtwoord:"; "New password:" = "Nieuw wachtwoord:";

View File

@ -50,7 +50,6 @@
= "Play a sound when a reminder comes due"; = "Play a sound when a reminder comes due";
"Default reminder :" = "Default reminder :"; "Default reminder :" = "Default reminder :";
"firstWeekOfYear_HideWeekNumbers" = "Do not display week numbers";
"firstWeekOfYear_January1" = "Starts on january 1"; "firstWeekOfYear_January1" = "Starts on january 1";
"firstWeekOfYear_First4DayWeek" = "First 4-day week"; "firstWeekOfYear_First4DayWeek" = "First 4-day week";
"firstWeekOfYear_FirstFullWeek" = "First full week"; "firstWeekOfYear_FirstFullWeek" = "First full week";
@ -85,7 +84,7 @@
"Default identity:" = "Default identity:"; "Default identity:" = "Default identity:";
"Manage identities..." = "Manage identities..."; "Manage identities..." = "Manage identities...";
"Signature:" = "Signature:"; "Signature" = "Signature";
/* password */ /* password */
"New password:" = "New password:"; "New password:" = "New password:";

View File

@ -47,7 +47,6 @@
"Play a sound when a reminder comes due" = "Émettre un signal sonore à l'échéance du rappel"; "Play a sound when a reminder comes due" = "Émettre un signal sonore à l'échéance du rappel";
"Default reminder :" = "Rappel par défaut :"; "Default reminder :" = "Rappel par défaut :";
"firstWeekOfYear_HideWeekNumbers" = "Ne pas afficher le numéro des semaines";
"firstWeekOfYear_January1" = "Commence le 1er janvier"; "firstWeekOfYear_January1" = "Commence le 1er janvier";
"firstWeekOfYear_First4DayWeek" = "Première semaine de 4 jours"; "firstWeekOfYear_First4DayWeek" = "Première semaine de 4 jours";
"firstWeekOfYear_FirstFullWeek" = "Première semaine entière"; "firstWeekOfYear_FirstFullWeek" = "Première semaine entière";
@ -83,7 +82,7 @@
/* Identities */ /* Identities */
"Default identity:" = "Identité par défaut :"; "Default identity:" = "Identité par défaut :";
"Manage identities..." = "Gérer les identitiés..."; "Manage identities..." = "Gérer les identitiés...";
"Signature:" = "Signature :"; "Signature" = "Signature";
/* password */ /* password */
"New password:" = "Nouveau mot de passe :"; "New password:" = "Nouveau mot de passe :";

View File

@ -47,7 +47,6 @@
"Play a sound when a reminder comes due" = "Akustisches Signal zur Terminerinnerung"; "Play a sound when a reminder comes due" = "Akustisches Signal zur Terminerinnerung";
"Default reminder :" = "Standard Terminerinnerung:"; "Default reminder :" = "Standard Terminerinnerung:";
"firstWeekOfYear_HideWeekNumbers" = "Keine Wochennummern anzeigen";
"firstWeekOfYear_January1" = "Beginnt am 1.Januar"; "firstWeekOfYear_January1" = "Beginnt am 1.Januar";
"firstWeekOfYear_First4DayWeek" = "Erste 4 Tage Woche"; "firstWeekOfYear_First4DayWeek" = "Erste 4 Tage Woche";
"firstWeekOfYear_FirstFullWeek" = "Erste ganze Woche"; "firstWeekOfYear_FirstFullWeek" = "Erste ganze Woche";
@ -82,7 +81,7 @@
"Default identity:" = "Standard Identität:"; "Default identity:" = "Standard Identität:";
"Manage identities..." = "Identitäten verwalten..."; "Manage identities..." = "Identitäten verwalten...";
"Signature:" = "Unterschrift:"; "Signature" = "Unterschrift";
/* password */ /* password */
"New password:" = "Neues Passwort:"; "New password:" = "Neues Passwort:";

View File

@ -48,7 +48,6 @@
"Play a sound when a reminder comes due" = "Riproduci un suono quando un promemoria è attivo"; "Play a sound when a reminder comes due" = "Riproduci un suono quando un promemoria è attivo";
"Default reminder :" = "Promemoria predefinito:"; "Default reminder :" = "Promemoria predefinito:";
"firstWeekOfYear_HideWeekNumbers" = "Non visualizzare i numeri della settimana";
"firstWeekOfYear_January1" = "Inizia l'1 gennaio"; "firstWeekOfYear_January1" = "Inizia l'1 gennaio";
"firstWeekOfYear_First4DayWeek" = "Prima settimana di 4 giorni"; "firstWeekOfYear_First4DayWeek" = "Prima settimana di 4 giorni";
"firstWeekOfYear_FirstFullWeek" = "Prima settimana completa"; "firstWeekOfYear_FirstFullWeek" = "Prima settimana completa";
@ -83,7 +82,7 @@
"Default identity:" = "Identità principale:"; "Default identity:" = "Identità principale:";
"Manage identities..." = "Gestisci identità..."; "Manage identities..." = "Gestisci identità...";
"Signature:" = "Firma:"; "Signature" = "Firma";
/* password */ /* password */
"New password:" = "Nuova password:"; "New password:" = "Nuova password:";

View File

@ -59,7 +59,6 @@
= "Señal acústica para los recordatorios"; = "Señal acústica para los recordatorios";
"Default reminder :" = "Recordatorio por omisión: "; "Default reminder :" = "Recordatorio por omisión: ";
"firstWeekOfYear_HideWeekNumbers" = "No mostrar número de semana";
"firstWeekOfYear_January1" = "Empieza el 1 de enero"; "firstWeekOfYear_January1" = "Empieza el 1 de enero";
"firstWeekOfYear_First4DayWeek" = "Primera semana de 4 días"; "firstWeekOfYear_First4DayWeek" = "Primera semana de 4 días";
"firstWeekOfYear_FirstFullWeek" = "Primera semana completa"; "firstWeekOfYear_FirstFullWeek" = "Primera semana completa";
@ -94,11 +93,9 @@
"Default identity:" = "Identidad por defecto:"; "Default identity:" = "Identidad por defecto:";
"Manage identities..." = "Gestionar identidades..."; "Manage identities..." = "Gestionar identidades...";
"Signature:" = "Firma:"; "Signature" = "Firma";
/* password */ /* password */
"New password:" = "Contraseña nueva:"; "New password:" = "Contraseña nueva:";
"Confirmation:" = "Confirmar contraseña nueva:"; /* ??? */ "Confirmation:" = "Confirmar contraseña nueva:"; /* ??? */
"Change" = "Cambiar"; "Change" = "Cambiar";
"Signature" = "Firma";

View File

@ -347,10 +347,11 @@ static BOOL shouldDisplayPasswordChange = NO;
- (NSArray *) firstWeekList - (NSArray *) firstWeekList
{ {
return [NSArray arrayWithObjects: SOGoWeekStartHideWeekNumbers, return [NSArray arrayWithObjects:
SOGoWeekStartJanuary1, SOGoWeekStartJanuary1,
SOGoWeekStartFirst4DayWeek, SOGoWeekStartFirst4DayWeek,
SOGoWeekStartFirstFullWeek, nil]; SOGoWeekStartFirstFullWeek,
nil];
} }
- (NSString *) itemFirstWeekText - (NSString *) itemFirstWeekText

View File

@ -137,7 +137,9 @@
{ {
NSCalendarDate *newStartDate, *now; NSCalendarDate *newStartDate, *now;
NSTimeZone *timeZone; NSTimeZone *timeZone;
SOGoUser *user;
int hour; int hour;
unsigned int uStart, uEnd;
newStartDate = [self selectedDate]; newStartDate = [self selectedDate];
if (![[self queryParameterForKey: @"hm"] length]) if (![[self queryParameterForKey: @"hm"] length])
@ -145,18 +147,22 @@
now = [NSCalendarDate calendarDate]; now = [NSCalendarDate calendarDate];
timeZone = [[context activeUser] timeZone]; timeZone = [[context activeUser] timeZone];
[now setTimeZone: timeZone]; [now setTimeZone: timeZone];
user = [context activeUser];
uStart = [user dayStartHour];
if ([now isDateOnSameDay: newStartDate]) if ([now isDateOnSameDay: newStartDate])
{ {
uEnd = [user dayEndHour];
hour = [now hourOfDay]; hour = [now hourOfDay];
if (hour < 8) if (hour < uStart)
newStartDate = [now hour: 8 minute: 0]; newStartDate = [now hour: uStart minute: 0];
else if (hour > 18) else if (hour > uEnd)
newStartDate = [[now tomorrow] hour: 8 minute: 0]; newStartDate = [[now tomorrow] hour: uStart minute: 0];
else else
newStartDate = now; newStartDate = now;
} }
else else
newStartDate = [newStartDate hour: 8 minute: 0]; newStartDate = [newStartDate hour: uStart minute: 0];
} }
return newStartDate; return newStartDate;

View File

@ -23,6 +23,7 @@
#import <Foundation/NSArray.h> #import <Foundation/NSArray.h>
#import <Foundation/NSString.h> #import <Foundation/NSString.h>
#import <SoObjects/SOGo/SOGoUser.h>
#import <Common/UIxPageFrame.h> #import <Common/UIxPageFrame.h>
#import "UIxAttendeesEditor.h" #import "UIxAttendeesEditor.h"
@ -76,4 +77,14 @@
return [self labelForKey: [NSString stringWithFormat: @"zoom_%@", item]]; return [self labelForKey: [NSString stringWithFormat: @"zoom_%@", item]];
} }
- (unsigned int) dayStartHour
{
return [[context activeUser] dayStartHour];
}
- (unsigned int) dayEndHour
{
return [[context activeUser] dayEndHour];
}
@end @end

View File

@ -93,6 +93,11 @@
return [[self selectedDate] firstDayOfMonth]; return [[self selectedDate] firstDayOfMonth];
} }
- (unsigned int) firstDayOfWeek
{
return [[context activeUser] firstDayOfWeek];
}
/* labels */ /* labels */
- (NSString *) headerMonthValue - (NSString *) headerMonthValue

View File

@ -28,12 +28,14 @@
@class NSArray; @class NSArray;
@class NSCalendarDay; @class NSCalendarDay;
@class NSDictionary; @class NSDictionary;
@class NSNumber;
@class NSString; @class NSString;
@class SOGoDateFormatter; @class SOGoDateFormatter;
@interface UIxCalDayTable : UIxCalView @interface UIxCalDayTable : UIxCalView
{ {
int numberOfDays; unsigned int numberOfDays;
NSCalendarDate *startDate; NSCalendarDate *startDate;
NSCalendarDate *currentTableDay; NSCalendarDate *currentTableDay;
NSString *currentTableHour; NSString *currentTableHour;
@ -43,8 +45,8 @@
SOGoDateFormatter *dateFormatter; SOGoDateFormatter *dateFormatter;
} }
- (void) setNumberOfDays: (NSString *) aNumber; - (void) setNumberOfDays: (NSNumber *) aNumber;
- (NSString *) numberOfDays; - (NSNumber *) numberOfDays;
- (void) setStartDate: (NSCalendarDate *) aStartDate; - (void) setStartDate: (NSCalendarDate *) aStartDate;
- (NSCalendarDate *) startDate; - (NSCalendarDate *) startDate;

View File

@ -26,6 +26,7 @@
#import <Foundation/NSKeyValueCoding.h> #import <Foundation/NSKeyValueCoding.h>
#import <Foundation/NSString.h> #import <Foundation/NSString.h>
#import <Foundation/NSUserDefaults.h> #import <Foundation/NSUserDefaults.h>
#import <Foundation/NSValue.h>
#import <NGExtensions/NSCalendarDate+misc.h> #import <NGExtensions/NSCalendarDate+misc.h>
#import <EOControl/EOQualifier.h> #import <EOControl/EOQualifier.h>
@ -67,21 +68,21 @@
[super dealloc]; [super dealloc];
} }
- (void) setNumberOfDays: (NSString *) aNumber - (void) setNumberOfDays: (NSNumber *) aNumber
{ {
numberOfDays = [aNumber intValue]; numberOfDays = [aNumber intValue];
[daysToDisplay release]; [daysToDisplay release];
daysToDisplay = nil; daysToDisplay = nil;
} }
- (NSString *) numberOfDays - (NSNumber *) numberOfDays
{ {
return [NSString stringWithFormat: @"%d", numberOfDays]; return [NSNumber numberWithUnsignedInt: numberOfDays];
} }
- (void) setStartDate: (NSCalendarDate *) aStartDate - (void) setStartDate: (NSCalendarDate *) aStartDate
{ {
startDate = aStartDate; startDate = [aStartDate beginOfDay];
[daysToDisplay release]; [daysToDisplay release];
daysToDisplay = nil; daysToDisplay = nil;
} }
@ -89,9 +90,9 @@
- (NSCalendarDate *) startDate - (NSCalendarDate *) startDate
{ {
if (!startDate) if (!startDate)
startDate = [super startDate]; startDate = [[super startDate] beginOfDay];
return [startDate beginOfDay]; return startDate;
} }
- (NSCalendarDate *) endDate - (NSCalendarDate *) endDate
@ -111,23 +112,25 @@
if (!hoursToDisplay) if (!hoursToDisplay)
{ {
hoursToDisplay = [NSMutableArray new];
currentHour = [self dayStartHour]; currentHour = [self dayStartHour];
lastHour = [self dayEndHour]; lastHour = [self dayEndHour];
hoursToDisplay = [NSMutableArray new];
while (currentHour < lastHour) while (currentHour < lastHour)
{ {
[hoursToDisplay [hoursToDisplay addObject: [NSNumber numberWithInt: currentHour]];
addObject: [NSString stringWithFormat: @"%d", currentHour]];
currentHour++; currentHour++;
} }
[hoursToDisplay [hoursToDisplay addObject: [NSNumber numberWithInt: currentHour]];
addObject: [NSString stringWithFormat: @"%d", currentHour]];
} }
return hoursToDisplay; return hoursToDisplay;
} }
- (NSString *) currentHourLineClass
{
return [NSString stringWithFormat: @"hourLine hourLine%d", [currentTableHour intValue]];
}
- (NSArray *) daysToDisplay - (NSArray *) daysToDisplay
{ {
NSCalendarDate *currentDate; NSCalendarDate *currentDate;
@ -138,12 +141,11 @@
daysToDisplay = [NSMutableArray new]; daysToDisplay = [NSMutableArray new];
currentDate = [[self startDate] hour: [self dayStartHour] currentDate = [[self startDate] hour: [self dayStartHour]
minute: 0]; minute: 0];
[daysToDisplay addObject: currentDate]; for (count = 0; count < numberOfDays; count++)
for (count = 1; count < numberOfDays; count++) {
[daysToDisplay addObject: [currentDate dateByAddingYears: 0 [daysToDisplay addObject: currentDate];
months: 0 currentDate = [currentDate tomorrow];
days: count]]; }
} }
return daysToDisplay; return daysToDisplay;
@ -282,15 +284,17 @@
- (NSString *) dayClasses - (NSString *) dayClasses
{ {
NSMutableString *classes; NSMutableString *classes;
int dayOfWeek; unsigned int currentDayNbr, realDayOfWeek;
currentDayNbr = ([currentTableDay timeIntervalSinceDate: [self startDate]]
/ 86400);
realDayOfWeek = [currentTableDay dayOfWeek];
classes = [NSMutableString new]; classes = [NSMutableString string];
[classes autorelease]; [classes appendFormat: @"day day%d", currentDayNbr];
[classes appendFormat: @"day day%d", [currentTableDay dayOfWeek]];
if (numberOfDays > 1) if (numberOfDays > 1)
{ {
dayOfWeek = [currentTableDay dayOfWeek]; if (realDayOfWeek == 0 || realDayOfWeek == 6)
if (dayOfWeek == 0 || dayOfWeek == 6)
[classes appendString: @" weekEndDay"]; [classes appendString: @" weekEndDay"];
if ([currentTableDay isToday]) if ([currentTableDay isToday])
[classes appendString: @" dayOfToday"]; [classes appendString: @" dayOfToday"];
@ -303,7 +307,19 @@
- (NSString *) clickableHourCellClass - (NSString *) clickableHourCellClass
{ {
return [NSString stringWithFormat: @"clickableHourCell clickableHourCell%@", currentTableHour]; NSMutableString *cellClass;
int hour;
SOGoUser *user;
cellClass = [NSMutableString string];
hour = [currentTableHour intValue];
user = [context activeUser];
[cellClass appendFormat: @"clickableHourCell clickableHourCell%d", hour];
if (hour < [user dayStartHour]
|| hour > [user dayEndHour])
[cellClass appendString: @" outOfDay"];
return cellClass;
} }
@end @end

View File

@ -172,4 +172,9 @@ static NSMutableArray *yearMenuItems = nil;
return [self responseWithStatus: 204]; return [self responseWithStatus: 204];
} }
- (unsigned int) firstDayOfWeek
{
return [[context activeUser] firstDayOfWeek];
}
@end @end

View File

@ -29,6 +29,7 @@
#import <SOGoUI/SOGoAptFormatter.h> #import <SOGoUI/SOGoAptFormatter.h>
#import <SoObjects/SOGo/SOGoDateFormatter.h> #import <SoObjects/SOGo/SOGoDateFormatter.h>
#import <SoObjects/SOGo/SOGoUser.h>
#import "UIxCalMonthView.h" #import "UIxCalMonthView.h"
@ -75,7 +76,8 @@
NSCalendarDate *currentDate; NSCalendarDate *currentDate;
headerDaysToDisplay = [NSMutableArray arrayWithCapacity: 7]; headerDaysToDisplay = [NSMutableArray arrayWithCapacity: 7];
currentDate = [[self selectedDate] mondayOfWeek]; currentDate
= [[context activeUser] firstDayOfWeekForDate: [self selectedDate]];
for (counter = 0; counter < 7; counter++) for (counter = 0; counter < 7; counter++)
{ {
[headerDaysToDisplay addObject: currentDate]; [headerDaysToDisplay addObject: currentDate];
@ -95,7 +97,9 @@
if (!weeksToDisplay) if (!weeksToDisplay)
{ {
selectedDate = [self selectedDate]; selectedDate = [self selectedDate];
firstOfAllDays = [[selectedDate firstDayOfMonth] mondayOfWeek]; firstOfAllDays
= [[context activeUser] firstDayOfWeekForDate:
[selectedDate firstDayOfMonth]];
lastDayOfMonth = [selectedDate lastDayOfMonth]; lastDayOfMonth = [selectedDate lastDayOfMonth];
firstToLast = ([lastDayOfMonth timeIntervalSinceDate: firstOfAllDays] firstToLast = ([lastDayOfMonth timeIntervalSinceDate: firstOfAllDays]
/ 86400); / 86400);
@ -127,10 +131,11 @@
- (NSDictionary *) _dateQueryParametersWithOffset: (int) monthsOffset - (NSDictionary *) _dateQueryParametersWithOffset: (int) monthsOffset
{ {
NSCalendarDate *date; NSCalendarDate *date, *firstDay;
date = [[self selectedDate] dateByAddingYears: 0 months: monthsOffset firstDay = [[self selectedDate] firstDayOfMonth];
days: 0 hours: 0 minutes: 0 seconds: 0]; date = [firstDay dateByAddingYears: 0 months: monthsOffset
days: 0 hours: 0 minutes: 0 seconds: 0];
return [self queryParametersBySettingSelectedDate: date]; return [self queryParametersBySettingSelectedDate: date];
} }
@ -233,8 +238,11 @@
- (NSString *) headerDayCellClasses - (NSString *) headerDayCellClasses
{ {
return [NSString stringWithFormat: @"headerDay day%d", unsigned int dayOfWeek;
[currentTableDay dayOfWeek]];
dayOfWeek = [[context activeUser] dayOfWeekForDate: currentTableDay];
return [NSString stringWithFormat: @"headerDay day%d", dayOfWeek];
} }
- (NSString *) dayHeaderNumber - (NSString *) dayHeaderNumber
@ -261,18 +269,19 @@
{ {
NSMutableString *classes; NSMutableString *classes;
NSCalendarDate *selectedDate; NSCalendarDate *selectedDate;
int dayOfWeek, numberOfWeeks; unsigned int realDayOfWeek, dayOfWeek, numberOfWeeks;
classes = [NSMutableString string]; classes = [NSMutableString string];
dayOfWeek = [currentTableDay dayOfWeek]; dayOfWeek = [[context activeUser] dayOfWeekForDate: currentTableDay];
realDayOfWeek = [currentTableDay dayOfWeek];
numberOfWeeks = [weeksToDisplay count]; numberOfWeeks = [weeksToDisplay count];
[classes appendFormat: @"day weekOf%d week%dof%d day%d", [classes appendFormat: @"day weekOf%d week%dof%d day%d",
numberOfWeeks, numberOfWeeks,
[weeksToDisplay indexOfObject: currentWeek], [weeksToDisplay indexOfObject: currentWeek],
numberOfWeeks, dayOfWeek]; numberOfWeeks, dayOfWeek];
if (dayOfWeek == 0 || dayOfWeek == 6) if (realDayOfWeek == 0 || realDayOfWeek == 6)
[classes appendString: @" weekEndDay"]; [classes appendString: @" weekEndDay"];
selectedDate = [self selectedDate]; selectedDate = [self selectedDate];
if (![[currentTableDay firstDayOfMonth] if (![[currentTableDay firstDayOfMonth]
@ -292,16 +301,17 @@
firstDayOfMonth = [[self selectedDate] firstDayOfMonth]; firstDayOfMonth = [[self selectedDate] firstDayOfMonth];
return [firstDayOfMonth mondayOfWeek]; return [[context activeUser] firstDayOfWeekForDate: firstDayOfMonth];
} }
- (NSCalendarDate *) endDate - (NSCalendarDate *) endDate
{ {
NSCalendarDate *lastDayOfMonth; NSCalendarDate *lastDayOfMonth, *firstDay;
lastDayOfMonth = [[self selectedDate] lastDayOfMonth]; lastDayOfMonth = [[self selectedDate] lastDayOfMonth];
firstDay = [[context activeUser] firstDayOfWeekForDate: lastDayOfMonth];
return [[lastDayOfMonth mondayOfWeek] dateByAddingYears: 0 months: 0 days: 6]; return [firstDay dateByAddingYears: 0 months: 0 days: 6];
} }
@end @end

View File

@ -25,9 +25,11 @@
#import <Foundation/NSKeyValueCoding.h> #import <Foundation/NSKeyValueCoding.h>
#import <Foundation/NSString.h> #import <Foundation/NSString.h>
#import <NGExtensions/NSCalendarDate+misc.h>
#import <EOControl/EOQualifier.h> #import <EOControl/EOQualifier.h>
#import <NGExtensions/NSCalendarDate+misc.h> #import <SoObjects/SOGo/SOGoUser.h>
#include "UIxCalWeekView.h" #include "UIxCalWeekView.h"
@ -35,14 +37,18 @@
- (NSCalendarDate *) startDate - (NSCalendarDate *) startDate
{ {
return [[[super startDate] mondayOfWeek] beginOfDay]; NSCalendarDate *date;
date = [[context activeUser] firstDayOfWeekForDate: [super startDate]];
return [date beginOfDay];
} }
- (NSCalendarDate *) endDate - (NSCalendarDate *) endDate
{ {
unsigned offset; unsigned offset;
if([self shouldDisplayWeekend]) if ([self shouldDisplayWeekend])
offset = 7; offset = 7;
else else
offset = 5; offset = 5;
@ -83,12 +89,17 @@
{ {
NSCalendarDate *date; NSCalendarDate *date;
NSString *format; NSString *format;
unsigned int weekNbr;
SOGoUser *user;
date = [[self startDate] dateByAddingYears: 0 months: 0 days: (offset * 7) user = [context activeUser];
hours:0 minutes: 0 seconds: 0]; date = [[self startDate] dateByAddingYears: 0 months: 0
days: (offset * 7) + 6
hours: 0 minutes: 0 seconds: 0];
weekNbr = [user weekNumberForDate: date];
format = [self labelForKey: @"Week %d"]; format = [self labelForKey: @"Week %d"];
return [NSString stringWithFormat: format, [date weekOfYear]]; return [NSString stringWithFormat: format, weekNbr];
} }
- (NSString *) weekBeforeLastWeekName - (NSString *) weekBeforeLastWeekName

View File

@ -215,28 +215,33 @@
- (NSCalendarDate *) newStartDate - (NSCalendarDate *) newStartDate
{ {
NSCalendarDate *newStartDate, *now; NSCalendarDate *newStartDate, *now;
int hour;
NSTimeZone *timeZone; NSTimeZone *timeZone;
SOGoUser *user;
timeZone = [[context activeUser] timeZone]; int hour;
unsigned int uStart, uEnd;
newStartDate = [self selectedDate]; newStartDate = [self selectedDate];
if ([[self queryParameterForKey: @"hm"] length] == 0) if (![[self queryParameterForKey: @"hm"] length])
{ {
now = [NSCalendarDate calendarDate]; now = [NSCalendarDate calendarDate];
timeZone = [[context activeUser] timeZone];
[now setTimeZone: timeZone]; [now setTimeZone: timeZone];
user = [context activeUser];
uStart = [user dayStartHour];
if ([now isDateOnSameDay: newStartDate]) if ([now isDateOnSameDay: newStartDate])
{ {
uEnd = [user dayEndHour];
hour = [now hourOfDay]; hour = [now hourOfDay];
if (hour < 8) if (hour < uStart)
newStartDate = [now hour: 8 minute: 0]; newStartDate = [now hour: uStart minute: 0];
else if (hour > 18) else if (hour > uEnd)
newStartDate = [[now tomorrow] hour: 8 minute: 0]; newStartDate = [[now tomorrow] hour: uStart minute: 0];
else else
newStartDate = now; newStartDate = now;
} }
else else
newStartDate = [newStartDate hour: 8 minute: 0]; newStartDate = [newStartDate hour: uStart minute: 0];
} }
return newStartDate; return newStartDate;

View File

@ -23,7 +23,7 @@
<li target="mailOptionsView"><var:string <li target="mailOptionsView"><var:string
label:value="Mail Options"/></li> label:value="Mail Options"/></li>
<li target="identitiesView"><var:string <li target="identitiesView"><var:string
label:value="Identities"/></li> label:value="Signature"/></li>
</var:if> </var:if>
<var:if condition="shouldDisplayPasswordChange"> <var:if condition="shouldDisplayPasswordChange">
<li target="passwordView"><var:string label:value="Password"/></li> <li target="passwordView"><var:string label:value="Password"/></li>
@ -67,18 +67,18 @@
<var:popup list="firstWeekList" item="item" <var:popup list="firstWeekList" item="item"
string="itemFirstWeekText" selection="userFirstWeek" string="itemFirstWeekText" selection="userFirstWeek"
/></label><br/> /></label><br/>
<br/> <!-- <br/> -->
<label><input class="checkBox" <!-- <label><input class="checkBox" -->
type="checkbox" var:selection="reminderEnabled" <!-- type="checkbox" var:selection="reminderEnabled" -->
var:checked="reminderEnabled"/><var:string <!-- var:checked="reminderEnabled"/><var:string -->
label:value="Enable reminders for Calendar items"/></label><br/> <!-- label:value="Enable reminders for Calendar items"/></label><br/> -->
<label><input class="checkBox" <!-- <label><input class="checkBox" -->
type="checkbox" var:selection="remindWithASound" <!-- type="checkbox" var:selection="remindWithASound" -->
var:checked="remindWithASound"/><var:string <!-- var:checked="remindWithASound"/><var:string -->
label:value="Play a sound when a reminder comes due"/></label><br/> <!-- label:value="Play a sound when a reminder comes due"/></label><br/> -->
<label><var:string label:value="Default reminder :"/> <!-- <label><var:string label:value="Default reminder :"/> -->
<var:popup list="reminderTimesList" item="item" <!-- <var:popup list="reminderTimesList" item="item" -->
string="itemReminderTimeText" selection="userReminderTime"/></label> <!-- string="itemReminderTimeText" selection="userReminderTime"/></label> -->
</div> </div>
</var:if> </var:if>
<var:if condition="userHasMailAccess"> <var:if condition="userHasMailAccess">
@ -108,7 +108,6 @@
list="identitiesList" displayString="itemIdentityText"> list="identitiesList" displayString="itemIdentityText">
</var:multiselection> </var:multiselection>
<br/>--> <br/>-->
<var:string label:value="Signature:"/><br/>
<textarea const:id="signature" const:name="signature" <textarea const:id="signature" const:name="signature"
var:value="signature"/> var:value="signature"/>
</div> </div>

View File

@ -14,6 +14,10 @@
<div class="popupMenu" id="attendeesMenu"> <div class="popupMenu" id="attendeesMenu">
<ul></ul> <ul></ul>
</div> </div>
<script type="text/javascript">
var dayStartHour = <var:string value="dayStartHour"/>;
var dayEndHour = <var:string value="dayEndHour"/>;
</script>
<div id="attendeesView"> <div id="attendeesView">
<div id="freeBusyViewButtons"> <div id="freeBusyViewButtons">
<var:string label:value="Suggest time slot:"/> <var:string label:value="Suggest time slot:"/>

View File

@ -19,6 +19,7 @@
<var:month-overview <var:month-overview
const:id="dateSelectorTable" const:id="dateSelectorTable"
currentDay="currentDay" currentDay="currentDay"
firstDay="firstDayOfWeek"
index="dayIndex" index="dayIndex"
year="year" year="year"
month="month" month="month"

View File

@ -48,30 +48,9 @@
</div> </div>
<div class="hourLines"> <div class="hourLines">
<div class="hourLine hourLine0"><!-- space --></div <var:foreach list="hoursToDisplay" item="currentTableHour"
><div class="hourLine hourLine1"><!-- space --></div ><div var:class="currentHourLineClass"><!-- space --></div
><div class="hourLine hourLine2"><!-- space --></div ></var:foreach>
><div class="hourLine hourLine3"><!-- space --></div
><div class="hourLine hourLine4"><!-- space --></div
><div class="hourLine hourLine5"><!-- space --></div
><div class="hourLine hourLine6"><!-- space --></div
><div class="hourLine hourLine7"><!-- space --></div
><div class="hourLine hourLine8"><!-- space --></div
><div class="hourLine hourLine9"><!-- space --></div
><div class="hourLine hourLine10"><!-- space --></div
><div class="hourLine hourLine11"><!-- space --></div
><div class="hourLine hourLine12"><!-- space --></div
><div class="hourLine hourLine13"><!-- space --></div
><div class="hourLine hourLine14"><!-- space --></div
><div class="hourLine hourLine15"><!-- space --></div
><div class="hourLine hourLine16"><!-- space --></div
><div class="hourLine hourLine17"><!-- space --></div
><div class="hourLine hourLine18"><!-- space --></div
><div class="hourLine hourLine19"><!-- space --></div
><div class="hourLine hourLine20"><!-- space --></div
><div class="hourLine hourLine21"><!-- space --></div
><div class="hourLine hourLine22"><!-- space --></div
><div class="hourLine hourLine23"><!-- space --></div>
</div> </div>
</div> </div>
</container> </container>

View File

@ -8,6 +8,9 @@
xmlns:label="OGo:label" xmlns:label="OGo:label"
className="UIxPageFrame" className="UIxPageFrame"
title="title"> title="title">
<script type="text/javascript">
var firstDayOfWeek = <var:string value="firstDayOfWeek"/>;
</script>
<style type="text/css"> <style type="text/css">
<var:if condition="horizontalDragHandleStyle"> <var:if condition="horizontalDragHandleStyle">
DIV#verticalDragHandle, DIV#rightPanel DIV#verticalDragHandle, DIV#rightPanel

View File

@ -50,8 +50,8 @@
><var:foreach list="weeksToDisplay" item="currentWeek" ><var:foreach list="weeksToDisplay" item="currentWeek"
><var:foreach list="currentWeek" item="currentTableDay" ><var:foreach list="currentWeek" item="currentTableDay"
><div var:class="dayCellClasses" ><div var:class="dayCellClasses"
var:day="currentTableDay.shortDateString"> var:day="currentTableDay.shortDateString"
<div class="dayHeader"><var:string value="dayHeaderNumber"/></div ><div class="dayHeader"><var:string value="dayHeaderNumber"/></div
></div> ></div>
</var:foreach> </var:foreach>
</var:foreach> </var:foreach>

View File

@ -1,6 +1,6 @@
String.prototype.trim = function() { String.prototype.trim = function() {
return this.replace(/(^\s+|\s+$)/g, ''); return this.replace(/(^\s+|\s+$)/g, '');
} };
String.prototype.formatted = function() { String.prototype.formatted = function() {
var newString = this; var newString = this;
@ -9,31 +9,31 @@ String.prototype.formatted = function() {
newString = newString.replace("%{" + i + "}", arguments[i], "g"); newString = newString.replace("%{" + i + "}", arguments[i], "g");
return newString; return newString;
} };
String.prototype.repeat = function(count) { String.prototype.repeat = function(count) {
var newString = ""; var newString = "";
for (var i = 0; i < count; i++) { for (var i = 0; i < count; i++) {
newString += this; newString += this;
} }
return newString; return newString;
} };
String.prototype.capitalize = function() { String.prototype.capitalize = function() {
return this.replace(/\w+/g, return this.replace(/\w+/g,
function(a) { function(a) {
return ( a.charAt(0).toUpperCase() return ( a.charAt(0).toUpperCase()
+ a.substr(1).toLowerCase() ); + a.substr(1).toLowerCase() );
}); });
} };
String.prototype.decodeEntities = function() { String.prototype.decodeEntities = function() {
return this.replace(/&#(\d+);/g, return this.replace(/&#(\d+);/g,
function(wholematch, parenmatch1) { function(wholematch, parenmatch1) {
return String.fromCharCode(+parenmatch1); return String.fromCharCode(+parenmatch1);
}); });
} };
String.prototype.asDate = function () { String.prototype.asDate = function () {
var newDate; var newDate;
@ -43,18 +43,18 @@ String.prototype.asDate = function () {
else { else {
date = this.split("-"); date = this.split("-");
if (date.length == 3) if (date.length == 3)
newDate = new Date(date[0], date[1] - 1, date[2]); newDate = new Date(date[0], date[1] - 1, date[2]);
else { else {
if (this.length == 8) { if (this.length == 8) {
newDate = new Date(this.substring(0, 4), newDate = new Date(this.substring(0, 4),
this.substring(4, 6) - 1, this.substring(4, 6) - 1,
this.substring(6, 8)); this.substring(6, 8));
} }
} }
} }
return newDate; return newDate;
} };
Date.prototype.sogoDayName = function() { Date.prototype.sogoDayName = function() {
var dayName = ""; var dayName = "";
@ -77,7 +77,7 @@ Date.prototype.sogoDayName = function() {
} }
return dayName; return dayName;
} };
Date.prototype.daysUpTo = function(otherDate) { Date.prototype.daysUpTo = function(otherDate) {
var days = new Array(); var days = new Array();
@ -89,14 +89,14 @@ Date.prototype.daysUpTo = function(otherDate) {
day1 = day2; day1 = day2;
day2 = tmp; day2 = tmp;
} }
// var day1Date = new Date(); // var day1Date = new Date();
// day1Date.setTime(this.getTime()); // day1Date.setTime(this.getTime());
// day1Date.setHours(0, 0, 0, 0); // day1Date.setHours(0, 0, 0, 0);
// var day2Date = new Date(); // var day2Date = new Date();
// day2Date.setTime(otherDate.getTime()); // day2Date.setTime(otherDate.getTime());
// day2Date.setHours(23, 59, 59, 999); // day2Date.setHours(23, 59, 59, 999);
// var day1 = day1Date.getTime(); // var day1 = day1Date.getTime();
// var day2 = day2Date.getTime(); // var day2 = day2Date.getTime();
var nbrDays = Math.floor((day2 - day1) / 86400000) + 1; var nbrDays = Math.floor((day2 - day1) / 86400000) + 1;
for (var i = 0; i < nbrDays; i++) { for (var i = 0; i < nbrDays; i++) {
@ -106,42 +106,42 @@ Date.prototype.daysUpTo = function(otherDate) {
} }
return days; return days;
} };
Date.prototype.getDayString = function() { Date.prototype.getDayString = function() {
var newString = this.getYear(); var newString = this.getYear();
if (newString < 1000) newString += 1900; if (newString < 1000) newString += 1900;
var month = '' + (this.getMonth() + 1); var month = '' + (this.getMonth() + 1);
if (month.length == 1) if (month.length == 1)
month = '0' + month; month = '0' + month;
newString += month; newString += month;
var day = '' + this.getDate(); var day = '' + this.getDate();
if (day.length == 1) if (day.length == 1)
day = '0' + day; day = '0' + day;
newString += day; newString += day;
return newString; return newString;
} };
Date.prototype.getHourString = function() { Date.prototype.getHourString = function() {
var newString = this.getHours() + '00'; var newString = this.getHours() + '00';
if (newString.length == 3) if (newString.length == 3)
newString = '0' + newString; newString = '0' + newString;
return newString; return newString;
} };
Date.prototype.getDisplayHoursString = function() { Date.prototype.getDisplayHoursString = function() {
var hoursString = "" + this.getUTCHours(); var hoursString = "" + this.getUTCHours();
if (hoursString.length == 1) if (hoursString.length == 1)
hoursString = '0' + hoursString; hoursString = '0' + hoursString;
var minutesString = "" + this.getUTCMinutes(); var minutesString = "" + this.getUTCMinutes();
if (minutesString.length == 1) if (minutesString.length == 1)
minutesString = '0' + minutesString; minutesString = '0' + minutesString;
return hoursString + ":" + minutesString; return hoursString + ":" + minutesString;
} };
Date.prototype.stringWithSeparator = function(separator) { Date.prototype.stringWithSeparator = function(separator) {
var month = '' + (this.getMonth() + 1); var month = '' + (this.getMonth() + 1);
@ -160,81 +160,64 @@ Date.prototype.stringWithSeparator = function(separator) {
str = day + '/' + month + '/' + year; str = day + '/' + month + '/' + year;
return str; return str;
} };
Date.prototype.sogoFreeBusyStringWithSeparator = function(separator) { Date.prototype.sogoFreeBusyStringWithSeparator = function(separator) {
return this.sogoDayName() + ", " + this.stringWithSeparator(separator); return this.sogoDayName() + ", " + this.stringWithSeparator(separator);
} };
Date.prototype.addDays = function(nbrDays) { Date.prototype.addDays = function(nbrDays) {
var milliSeconds = this.getTime(); var milliSeconds = this.getTime();
milliSeconds += 86400000 * nbrDays; milliSeconds += 86400000 * nbrDays;
this.setTime(milliSeconds); this.setTime(milliSeconds);
} };
Date.prototype.earlierDate = function(otherDate) { Date.prototype.earlierDate = function(otherDate) {
var workDate = new Date(); var workDate = new Date();
workDate.setTime(otherDate.getTime()); workDate.setTime(otherDate.getTime());
workDate.setHours(0); workDate.setHours(0);
return ((this.getTime() < workDate.getTime()) return ((this.getTime() < workDate.getTime())
? this : otherDate); ? this : otherDate);
} };
Date.prototype.laterDate = function(otherDate) { Date.prototype.laterDate = function(otherDate) {
var workDate = new Date(); var workDate = new Date();
workDate.setTime(otherDate.getTime()); workDate.setTime(otherDate.getTime());
workDate.setHours(23); workDate.setHours(23);
workDate.setMinutes(59); workDate.setMinutes(59);
workDate.setSeconds(59); workDate.setSeconds(59);
workDate.setMilliseconds(999); workDate.setMilliseconds(999);
return ((this.getTime() < workDate.getTime()) return ((this.getTime() < workDate.getTime())
? otherDate : this); ? otherDate : this);
} };
Date.prototype.beginOfWeek = function() { Date.prototype.beginOfWeek = function() {
var beginNumber; var offset = firstDayOfWeek - this.getDay();
var dayNumber = this.getDay(); if (offset > 0)
if (weekStartIsMonday) { offset -= 7;
beginNumber = 1;
if (dayNumber == 0)
dayNumber = 7;
}
else
beginNumber = 0;
var beginOfWeek = new Date(); var beginOfWeek = new Date();
beginOfWeek.setTime(this.getTime()); beginOfWeek.setTime(this.getTime());
beginOfWeek.addDays(beginNumber - dayNumber); beginOfWeek.addDays(offset);
beginOfWeek.setHours(0); beginOfWeek.setHours(0);
beginOfWeek.setMinutes(0); beginOfWeek.setMinutes(0);
beginOfWeek.setSeconds(0); beginOfWeek.setSeconds(0);
beginOfWeek.setMilliseconds(0); beginOfWeek.setMilliseconds(0);
return beginOfWeek; return beginOfWeek;
} };
Date.prototype.endOfWeek = function() { Date.prototype.endOfWeek = function() {
var beginNumber; var endOfWeek = this.beginOfWeek();
var dayNumber = this.getDay(); endOfWeek.addDays(6);
if (weekStartIsMonday) {
beginNumber = 1;
if (dayNumber == 0)
dayNumber = 7;
}
else
beginNumber = 0;
var endOfWeek = new Date(); endOfWeek.setHours(23);
endOfWeek.setTime(this.getTime()); endOfWeek.setMinutes(59);
endOfWeek.addDays(6 + beginNumber - dayNumber); endOfWeek.setSeconds(59);
endOfWeek.setMilliseconds(999);
endOfWeek.setHours(23);
endOfWeek.setMinutes(59); return endOfWeek;
endOfWeek.setSeconds(59); };
endOfWeek.setMilliseconds(999);
return endOfWeek;
}
String.prototype._base64_keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; String.prototype._base64_keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
String.prototype.base64encode = function () { String.prototype.base64encode = function () {
@ -357,7 +340,7 @@ String.prototype.cssSafeString = function() {
newString = newString.replace("@", "_", "g"); newString = newString.replace("@", "_", "g");
return newString; return newString;
} };
window.width = function() { window.width = function() {
if (window.innerWidth) if (window.innerWidth)
@ -366,7 +349,7 @@ window.width = function() {
return document.body.offsetWidth; return document.body.offsetWidth;
else else
return 0; return 0;
} };
window.height = function() { window.height = function() {
if (window.innerHeight) if (window.innerHeight)
@ -375,4 +358,4 @@ window.height = function() {
return document.body.offsetHeight; return document.body.offsetHeight;
else else
return 0; return 0;
} };

View File

@ -521,8 +521,12 @@ DIV.monthView > DIV.headerDay
DIV.dayOfToday DIV.dayOfToday
{ background-color: #deebf7; } { background-color: #deebf7; }
DIV.weekEndDay DIV.dayOfToday DIV.outOfDay
{ background-color: #fffbe7; } { background-color: #d6dfe9; }
DIV.outOfDay, DIV.weekEndDay,
DIV.weekEndDay DIV.outOfDay
{ background-color: #f4f4f4; }
DIV.dayOfAnotherMonth DIV.dayOfAnotherMonth
{ background-color: #e7efef; } { background-color: #e7efef; }
@ -530,6 +534,10 @@ DIV.dayOfAnotherMonth
DIV.selectedDay DIV.selectedDay
{ background-color: #ffe79c; } { background-color: #ffe79c; }
DIV.selectedDay.weekEndDay,
DIV.selectedDay DIV.outOfDay
{ background-color: #f5dd92; }
DIV.monthView DIV.dayHeader DIV.monthView DIV.dayHeader
{ margin-left: 1em; { margin-left: 1em;
cursor: pointer; cursor: pointer;
@ -651,35 +659,35 @@ DIV.monthView DIV.day,
DIV.daysViewFor7Days DIV.day DIV.daysViewFor7Days DIV.day
{ width: 14.2857%; } { width: 14.2857%; }
DIV.monthView DIV.day0,
DIV.daysViewFor7Days DIV.day0
{ left: 0px; }
DIV.monthView DIV.day1, DIV.monthView DIV.day1,
DIV.daysViewFor7Days DIV.day1 DIV.daysViewFor7Days DIV.day1
{ left: 0px; } { left: 14.2857%; }
DIV.monthView DIV.day2, DIV.monthView DIV.day2,
DIV.daysViewFor7Days DIV.day2 DIV.daysViewFor7Days DIV.day2
{ left: 14.2857%; } { left: 28.5714%; }
DIV.monthView DIV.day3, DIV.monthView DIV.day3,
DIV.daysViewFor7Days DIV.day3 DIV.daysViewFor7Days DIV.day3
{ left: 28.5714%; } { left: 42.8571%; }
DIV.monthView DIV.day4, DIV.monthView DIV.day4,
DIV.daysViewFor7Days DIV.day4 DIV.daysViewFor7Days DIV.day4
{ left: 42.8571%; } { left: 57.1428%; }
DIV.monthView DIV.day5, DIV.monthView DIV.day5,
DIV.daysViewFor7Days DIV.day5 DIV.daysViewFor7Days DIV.day5
{ left: 57.1428%; }
DIV.monthView DIV.day6,
DIV.daysViewFor7Days DIV.day6
{ left: 71.4285%; } { left: 71.4285%; }
DIV.monthView DIV.day0 DIV.monthView DIV.day6
{ left: 85.7142%; { left: 85.7142%;
border-right: 2px solid #397d94; } border-right: 2px solid #397d94; }
DIV.daysViewFor7Days DIV.day0 DIV.daysViewFor7Days DIV.day6
{ left: 85.7142%; { left: 85.7142%;
border-right: 1px solid #397d94; } border-right: 1px solid #397d94; }

View File

@ -3,9 +3,6 @@ var address;
var awaitingFreeBusyRequests = new Array(); var awaitingFreeBusyRequests = new Array();
var additionalDays = 2; var additionalDays = 2;
var dayStartHour = 8;
var dayEndHour = 18;
var attendeesEditor = { var attendeesEditor = {
delay: 500, delay: 500,
delayedSearch: false, delayedSearch: false,
@ -221,20 +218,20 @@ function redisplayFreeBusyZone() {
var stMinute = parseInt($("startTime_time_minute").value) / 15; var stMinute = parseInt($("startTime_time_minute").value) / 15;
var etHour = parseInt($("endTime_time_hour").value); var etHour = parseInt($("endTime_time_hour").value);
var etMinute = parseInt($("endTime_time_minute").value) / 15; var etMinute = parseInt($("endTime_time_minute").value) / 15;
if (stHour < 8) { if (stHour < dayStartHour) {
stHour = 8; stHour = dayStartHour;
stMinute = 0; stMinute = 0;
} }
if (stHour > 19) { if (stHour > dayEndHour + 1) {
stHour = 19 stHour = dayEndHour + 1;
stMinute = 0; stMinute = 0;
} }
if (etHour < 8) { if (etHour < dayStartHour) {
etHour = 8; etHour = dayStartHour;
etMinute = 0; etMinute = 0;
} }
if (etHour > 19) { if (etHour > dayEndHour + 1) {
etHour = 19; etHour = dayEndHour;
etMinute = 0; etMinute = 0;
} }
if (stHour > etHour) { if (stHour > etHour) {
@ -252,9 +249,9 @@ function redisplayFreeBusyZone() {
} }
} }
var deltaCells = (etHour - stHour) + (11 * addDays); var deltaCells = (etHour - stHour) + ((dayEndHour - dayStartHour + 1) * addDays);
var deltaSpans = (deltaCells * 4 ) + (etMinute - stMinute); var deltaSpans = (deltaCells * 4 ) + (etMinute - stMinute);
var currentCellNbr = stHour - 7 - 1; var currentCellNbr = stHour - dayStartHour;
var currentCell = row.cells[currentCellNbr]; var currentCell = row.cells[currentCellNbr];
var currentSpanNbr = stMinute; var currentSpanNbr = stMinute;
var spans = $(currentCell).childNodesWithTag("span"); var spans = $(currentCell).childNodesWithTag("span");
@ -389,8 +386,8 @@ function setSlot(tds, nbr, status) {
days = Math.floor(tdnbr / 24); days = Math.floor(tdnbr / 24);
tdnbr -= (days * 24); tdnbr -= (days * 24);
} }
if (tdnbr > 7 && tdnbr < 19) { if (tdnbr > (dayStartHour - 1) && tdnbr < (dayEndHour + 1)) {
var i = (days * 11 + tdnbr - 7); var i = (days * (dayEndHour - dayStartHour + 1) + tdnbr - (dayStartHour - 1));
var td = tds[i - 1]; var td = tds[i - 1];
var spans = $(td).childNodesWithTag("span"); var spans = $(td).childNodesWithTag("span");
if (status == '2') if (status == '2')

View File

@ -33,8 +33,6 @@ var sorting = {};
var lastClickedRow = -1; var lastClickedRow = -1;
var weekStartIsMonday = true;
// logArea = null; // logArea = null;
var allDocumentElements = null; var allDocumentElements = null;