Fixed issues with attendees invitation window.

See ChangeLog.

Monotone-Parent: 6cd910f43ad78b6d588fe7ba51ef346c434ee93a
Monotone-Revision: 2486c891d32ba8306f9e058c37f500a0d43424c5

Monotone-Author: flachapelle@inverse.ca
Monotone-Date: 2009-10-21T18:07:09
Monotone-Branch: ca.inverse.sogo
This commit is contained in:
Francis Lachapelle
2009-10-21 18:07:09 +00:00
parent a890f166fb
commit bfb2bf00a6
3 changed files with 63 additions and 64 deletions

View File

@@ -1,3 +1,13 @@
2009-10-21 Francis Lachapelle <flachapelle@inverse.ca>
* UI/Scheduler/UIxCalListingActions.m
(-_loadScheduleLimitsForUsers:): we must not consider users not
part of the system (no uid).
* UI/WebServerResources/UIxAttendeesEditor.js
(redisplayFreeBusyZone): removed logic around start/end
minutes. It was breaking the display of an event spanning multiple days.
2009-10-20 Ludovic Marcotte <lmarcotte@inverse.ca>
* Added missing timezones

View File

@@ -63,11 +63,11 @@ static NSArray *tasksFields = nil;
#define dayLength 86400
#define quarterLength 900
#define intervalSeconds 900
#define offsetHours 24 * 5
#define offsetSeconds offsetHours * 60 * 60
#define offsetBlocks offsetHours * 4
#define maxBlocks offsetBlocks * 2
#define intervalSeconds 900 // number of seconds in 15 minutes
#define offsetHours 24 * 5 // number of hours in invitation window
#define offsetSeconds offsetHours * 60 * 60 // number of seconds in invitation window
#define offsetBlocks offsetHours * 4 // number of 15-minute blocks in invitation window
#define maxBlocks offsetBlocks * 2 // maximum number of blocks to search for a free slot (10 days)
@implementation UIxCalListingActions
@@ -1048,9 +1048,9 @@ _computeBlocksPosition (NSArray *blocks)
int itemCount = (offsetBlocks + maxBlocks) * 15 * 60;
user = [SOGoUser userWithLogin: uid roles: nil];
fbObject = [[user homeFolderInContext: context]
freeBusyObject: @"freebusy.ifb"
inContext: context];
fbObject = [[user homeFolderInContext: context]
freeBusyObject: @"freebusy.ifb"
inContext: context];
end = [start addTimeInterval: itemCount];
@@ -1113,7 +1113,7 @@ _computeBlocksPosition (NSArray *blocks)
if (type == 1)
for (count = startInterval; count < endInterval; count++)
*(fb + count) = 1;
*(fb + count) = 1;
}
}
@@ -1269,12 +1269,15 @@ _computeBlocksPosition (NSArray *blocks)
{
ud = [[SOGoUser userWithLogin: [users objectAtIndex: count]
roles: nil] userDefaults];
from = [NSCalendarDate dateWithString: [ud objectForKey: @"DayStartTime"]
calendarFormat: @"%H:%M"];
to = [NSCalendarDate dateWithString: [ud objectForKey: @"DayEndTime"]
calendarFormat: @"%H:%M"];
maxFrom = (NSCalendarDate *)[from laterDate: maxFrom];
maxTo = (NSCalendarDate *)[to earlierDate: maxTo];
if (ud)
{
from = [NSCalendarDate dateWithString: [ud objectForKey: @"DayStartTime"]
calendarFormat: @"%H:%M"];
to = [NSCalendarDate dateWithString: [ud objectForKey: @"DayEndTime"]
calendarFormat: @"%H:%M"];
maxFrom = (NSCalendarDate *)[from laterDate: maxFrom];
maxTo = (NSCalendarDate *)[to earlierDate: maxTo];
}
}
return [NSArray arrayWithObjects: maxFrom, maxTo, nil];

View File

@@ -244,6 +244,7 @@ function redisplayFreeBusyZone() {
var stMinute = parseInt($("startTime_time_minute").value) / 15;
var etHour = parseInt($("endTime_time_hour").value);
var etMinute = parseInt($("endTime_time_minute").value) / 15;
if (stHour < displayStartHour) {
stHour = displayStartHour;
stMinute = 0;
@@ -260,20 +261,6 @@ function redisplayFreeBusyZone() {
etHour = displayEndHour;
etMinute = 0;
}
if (stHour > etHour) {
var swap = etHour;
etHour = stHour;
stHour = swap;
swap = etMinute;
etMinute = stMinute;
stMinute = etMinute;
} else {
if (stMinute > etMinute) {
var swap = etMinute;
etMinute = stMinute;
stMinute = swap;
}
}
var deltaCells = (etHour - stHour) + ((displayEndHour - displayStartHour + 1) * addDays);
var deltaSpans = (deltaCells * 4 ) + (etMinute - stMinute);
@@ -294,7 +281,7 @@ function redisplayFreeBusyZone() {
}
deltaSpans--;
}
scrollToEvent ();
scrollToEvent();
}
function newAttendee(event) {
@@ -446,7 +433,7 @@ function resetAllFreeBusys() {
var table = $("freeBusy");
var inputs = table.getElementsByTagName("input");
for (var i = 0; i < inputs.length - 2; i++) {
for (var i = 0; i < inputs.length - 1; i++) {
var currentInput = inputs[i];
currentInput.hasfreebusy = false;
displayFreeBusyForNode(inputs[i]);
@@ -475,10 +462,10 @@ function findSlot (direction) {
var et = window.timeWidgets['end']['hour'].value
+ ":" + window.timeWidgets['end']['minute'].value;
for (var i = 0; i < inputs.length - 2; i++)
{
for (var i = 0; i < inputs.length - 1; i++) {
if (inputs[i].uid)
userList += "," + inputs[i].uid;
}
}
// Abort any pending request
if (document.findSlotAjaxRequest) {
@@ -486,12 +473,12 @@ function findSlot (direction) {
document.findSlotAjaxRequest.abort();
}
var urlstr = (ApplicationBaseURL
+ "/findPossibleSlot?direction=" + direction
+ "&uids=" + escape (userList)
+ "&startDate=" + escape (sd)
+ "&startTime=" + escape (st)
+ "&endDate=" + escape (ed)
+ "&endTime=" + escape (et)
+ "findPossibleSlot?direction=" + direction
+ "&uids=" + escape(userList)
+ "&startDate=" + escape(sd)
+ "&startTime=" + escape(st)
+ "&endDate=" + escape(ed)
+ "&endTime=" + escape(et)
+ "&isAllDay=" + isAllDay
+ "&onlyOfficeHours=" + ($("onlyOfficeHours").checked + 0));
document.findSlotAjaxRequest = triggerAjaxRequest(urlstr,
@@ -514,7 +501,7 @@ function scrollToEvent () {
var spans = $$('TR#currentEventPosition TH SPAN');
for (var i = 0; i < spans.length; i++) {
scroll += spans[i].getWidth (spans[i]);
if (spans[i].hasClassName ("busy")) {
if (spans[i].hasClassName("busy")) {
scroll -= 20 * spans[i].getWidth (spans[i]);
break;
}
@@ -536,33 +523,32 @@ function toggleOfficeHours () {
}
function updateSlotDisplayCallback(http) {
var data = http.responseText.evalJSON (true);
var start = new Date ();
var end = new Date ();
var data = http.responseText.evalJSON(true);
var start = new Date();
var end = new Date();
var cb = redisplayFreeBusyZone;
start.setFullYear (parseInt (data[0]['startDate'].substr (0, 4)),
parseInt (data[0]['startDate'].substr (4, 2)) - 1,
parseInt (data[0]['startDate'].substr (6, 2)));
end.setFullYear (parseInt (data[0]['endDate'].substr (0, 4)),
parseInt (data[0]['endDate'].substr (4, 2)) - 1,
parseInt (data[0]['endDate'].substr (6, 2)));
window.timeWidgets['end']['date'].setValueAsDate (end);
window.timeWidgets['end']['hour'].value = cleanInt (data[0]['endHour']);
window.timeWidgets['end']['minute'].value = cleanInt (data[0]['endMinute']);
start.setFullYear(parseInt (data[0]['startDate'].substr(0, 4)),
parseInt (data[0]['startDate'].substr(4, 2)) - 1,
parseInt (data[0]['startDate'].substr(6, 2)));
end.setFullYear(parseInt (data[0]['endDate'].substr(0, 4)),
parseInt (data[0]['endDate'].substr(4, 2)) - 1,
parseInt (data[0]['endDate'].substr(6, 2)));
window.timeWidgets['end']['date'].setValueAsDate(end);
window.timeWidgets['end']['hour'].value = cleanInt(data[0]['endHour']);
window.timeWidgets['end']['minute'].value = cleanInt(data[0]['endMinute']);
if (window.timeWidgets['start']['date'].valueAsShortDateString () !=
data[0]['startDate'])
{
cb = onTimeDateWidgetChange;
}
if (window.timeWidgets['start']['date'].valueAsShortDateString() !=
data[0]['startDate']) {
cb = onTimeDateWidgetChange;
}
window.timeWidgets['start']['date'].setValueAsDate (start);
window.timeWidgets['start']['hour'].value = cleanInt (data[0]['startHour']);
window.timeWidgets['start']['minute'].value = cleanInt (data[0]['startMinute']);
cb ();
window.timeWidgets['start']['date'].setValueAsDate(start);
window.timeWidgets['start']['hour'].value = cleanInt(data[0]['startHour']);
window.timeWidgets['start']['minute'].value = cleanInt(data[0]['startMinute']);
cb();
}
function onPreviousSlotClick (event) {