Monotone-Parent: 6723ab8142f4a076f7663746dfb3f59de2190e55

Monotone-Revision: b2f8cfd95a5bbbd3129eea0cb28710e341ce22db

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2007-03-26T13:41:04
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Wolfgang Sourdeau 2007-03-26 13:41:04 +00:00
parent e2824a3e06
commit 99e4b1fc22
2 changed files with 124 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
-readFreeBusyAction]): restored method.
2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage

View File

@ -20,7 +20,14 @@
* Boston, MA 02111-1307, USA.
*/
#import <Foundation/NSCalendarDate.h>
#import <Foundation/NSValue.h>
#import <NGObjWeb/WORequest.h>
#import <NGObjWeb/WOResponse.h>
#import <NGExtensions/NSCalendarDate+misc.h>
#import <Appointments/SOGoFreeBusyObject.h>
#import <SOGo/NSCalendarDate+SOGo.h>
#import <SOGoUI/UIxComponent.h>
@interface SOGoUserHomePage : UIxComponent
@ -39,4 +46,116 @@
return [self redirectToLocation: url];
}
- (void) _fillFreeBusyItems: (NSMutableArray *) items
withRecords: (NSEnumerator *) records
fromStartDate: (NSCalendarDate *) startDate
toEndDate: (NSCalendarDate *) endDate
{
NSDictionary *record;
int count, startInterval, endInterval, value;
NSNumber *status;
NSCalendarDate *currentDate;
record = [records nextObject];
while (record)
{
status = [record objectForKey: @"status"];
value = [[record objectForKey: @"startdate"] intValue];
currentDate = [NSCalendarDate dateWithTimeIntervalSince1970: value];
if ([currentDate earlierDate: startDate] == currentDate)
startInterval = 0;
else
startInterval
= ([currentDate timeIntervalSinceDate: startDate] / 900);
value = [[record objectForKey: @"enddate"] intValue];
currentDate = [NSCalendarDate dateWithTimeIntervalSince1970: value];
if ([currentDate earlierDate: endDate] == endDate)
endInterval = [items count] - 1;
else
endInterval = ([currentDate timeIntervalSinceDate: startDate] / 900);
for (count = startInterval; count < endInterval; count++)
[items replaceObjectAtIndex: count withObject: status];
record = [records nextObject];
}
}
- (NSString *) _freeBusyAsTextFromStartDate: (NSCalendarDate *) startDate
toEndDate: (NSCalendarDate *) endDate
forFreeBusy: (SOGoFreeBusyObject *) fb
{
NSEnumerator *records;
NSMutableArray *freeBusyItems;
NSTimeInterval interval;
int count, intervals;
interval = [endDate timeIntervalSinceDate: startDate] + 60;
intervals = interval / 900; /* slices of 15 minutes */
freeBusyItems = [NSMutableArray arrayWithCapacity: intervals];
for (count = 1; count < intervals; count++)
[freeBusyItems addObject: @"0"];
records = [[fb fetchFreeBusyInfosFrom: startDate to: endDate] objectEnumerator];
[self _fillFreeBusyItems: freeBusyItems withRecords: records
fromStartDate: startDate toEndDate: endDate];
return [freeBusyItems componentsJoinedByString: @","];
}
- (NSString *) _freeBusyAsText
{
SOGoFreeBusyObject *co;
NSCalendarDate *startDate, *endDate;
NSString *queryDay, *additionalDays;
NSTimeZone *uTZ;
co = [self clientObject];
uTZ = [co userTimeZone];
queryDay = [self queryParameterForKey: @"sday"];
if ([queryDay length])
startDate = [NSCalendarDate dateFromShortDateString: queryDay
andShortTimeString: @"0000"
inTimeZone: uTZ];
else
{
startDate = [NSCalendarDate calendarDate];
[startDate setTimeZone: uTZ];
startDate = [startDate hour: 0 minute: 0];
}
queryDay = [self queryParameterForKey: @"eday"];
if ([queryDay length])
endDate = [NSCalendarDate dateFromShortDateString: queryDay
andShortTimeString: @"2359"
inTimeZone: uTZ];
else
endDate = [startDate hour: 23 minute: 59];
additionalDays = [self queryParameterForKey: @"additional"];
if ([additionalDays length] > 0)
endDate = [endDate dateByAddingYears: 0 months: 0
days: [additionalDays intValue]
hours: 0 minutes: 0 seconds: 0];
return [self _freeBusyAsTextFromStartDate: startDate toEndDate: endDate
forFreeBusy: co];
}
- (id <WOActionResults>) readFreeBusyAction
{
WOResponse *response;
response = [context response];
[response setStatus: 200];
[response setHeader: @"text/plain; charset=iso-8859-1"
forKey: @"Content-Type"];
[response appendContentString: [self _freeBusyAsText]];
return response;
}
@end