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
+10
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> 2009-10-20 Ludovic Marcotte <lmarcotte@inverse.ca>
* Added missing timezones * Added missing timezones
+16 -13
View File
@@ -63,11 +63,11 @@ static NSArray *tasksFields = nil;
#define dayLength 86400 #define dayLength 86400
#define quarterLength 900 #define quarterLength 900
#define intervalSeconds 900 #define intervalSeconds 900 // number of seconds in 15 minutes
#define offsetHours 24 * 5 #define offsetHours 24 * 5 // number of hours in invitation window
#define offsetSeconds offsetHours * 60 * 60 #define offsetSeconds offsetHours * 60 * 60 // number of seconds in invitation window
#define offsetBlocks offsetHours * 4 #define offsetBlocks offsetHours * 4 // number of 15-minute blocks in invitation window
#define maxBlocks offsetBlocks * 2 #define maxBlocks offsetBlocks * 2 // maximum number of blocks to search for a free slot (10 days)
@implementation UIxCalListingActions @implementation UIxCalListingActions
@@ -1050,7 +1050,7 @@ _computeBlocksPosition (NSArray *blocks)
user = [SOGoUser userWithLogin: uid roles: nil]; user = [SOGoUser userWithLogin: uid roles: nil];
fbObject = [[user homeFolderInContext: context] fbObject = [[user homeFolderInContext: context]
freeBusyObject: @"freebusy.ifb" freeBusyObject: @"freebusy.ifb"
inContext: context]; inContext: context];
end = [start addTimeInterval: itemCount]; end = [start addTimeInterval: itemCount];
@@ -1113,7 +1113,7 @@ _computeBlocksPosition (NSArray *blocks)
if (type == 1) if (type == 1)
for (count = startInterval; count < endInterval; count++) 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] ud = [[SOGoUser userWithLogin: [users objectAtIndex: count]
roles: nil] userDefaults]; roles: nil] userDefaults];
from = [NSCalendarDate dateWithString: [ud objectForKey: @"DayStartTime"] if (ud)
calendarFormat: @"%H:%M"]; {
to = [NSCalendarDate dateWithString: [ud objectForKey: @"DayEndTime"] from = [NSCalendarDate dateWithString: [ud objectForKey: @"DayStartTime"]
calendarFormat: @"%H:%M"]; calendarFormat: @"%H:%M"];
maxFrom = (NSCalendarDate *)[from laterDate: maxFrom]; to = [NSCalendarDate dateWithString: [ud objectForKey: @"DayEndTime"]
maxTo = (NSCalendarDate *)[to earlierDate: maxTo]; calendarFormat: @"%H:%M"];
maxFrom = (NSCalendarDate *)[from laterDate: maxFrom];
maxTo = (NSCalendarDate *)[to earlierDate: maxTo];
}
} }
return [NSArray arrayWithObjects: maxFrom, maxTo, nil]; return [NSArray arrayWithObjects: maxFrom, maxTo, nil];
+33 -47
View File
@@ -244,6 +244,7 @@ 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 < displayStartHour) { if (stHour < displayStartHour) {
stHour = displayStartHour; stHour = displayStartHour;
stMinute = 0; stMinute = 0;
@@ -260,20 +261,6 @@ function redisplayFreeBusyZone() {
etHour = displayEndHour; etHour = displayEndHour;
etMinute = 0; 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 deltaCells = (etHour - stHour) + ((displayEndHour - displayStartHour + 1) * addDays);
var deltaSpans = (deltaCells * 4 ) + (etMinute - stMinute); var deltaSpans = (deltaCells * 4 ) + (etMinute - stMinute);
@@ -294,7 +281,7 @@ function redisplayFreeBusyZone() {
} }
deltaSpans--; deltaSpans--;
} }
scrollToEvent (); scrollToEvent();
} }
function newAttendee(event) { function newAttendee(event) {
@@ -446,7 +433,7 @@ function resetAllFreeBusys() {
var table = $("freeBusy"); var table = $("freeBusy");
var inputs = table.getElementsByTagName("input"); 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]; var currentInput = inputs[i];
currentInput.hasfreebusy = false; currentInput.hasfreebusy = false;
displayFreeBusyForNode(inputs[i]); displayFreeBusyForNode(inputs[i]);
@@ -475,10 +462,10 @@ function findSlot (direction) {
var et = window.timeWidgets['end']['hour'].value var et = window.timeWidgets['end']['hour'].value
+ ":" + window.timeWidgets['end']['minute'].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; userList += "," + inputs[i].uid;
} }
// Abort any pending request // Abort any pending request
if (document.findSlotAjaxRequest) { if (document.findSlotAjaxRequest) {
@@ -486,12 +473,12 @@ function findSlot (direction) {
document.findSlotAjaxRequest.abort(); document.findSlotAjaxRequest.abort();
} }
var urlstr = (ApplicationBaseURL var urlstr = (ApplicationBaseURL
+ "/findPossibleSlot?direction=" + direction + "findPossibleSlot?direction=" + direction
+ "&uids=" + escape (userList) + "&uids=" + escape(userList)
+ "&startDate=" + escape (sd) + "&startDate=" + escape(sd)
+ "&startTime=" + escape (st) + "&startTime=" + escape(st)
+ "&endDate=" + escape (ed) + "&endDate=" + escape(ed)
+ "&endTime=" + escape (et) + "&endTime=" + escape(et)
+ "&isAllDay=" + isAllDay + "&isAllDay=" + isAllDay
+ "&onlyOfficeHours=" + ($("onlyOfficeHours").checked + 0)); + "&onlyOfficeHours=" + ($("onlyOfficeHours").checked + 0));
document.findSlotAjaxRequest = triggerAjaxRequest(urlstr, document.findSlotAjaxRequest = triggerAjaxRequest(urlstr,
@@ -514,7 +501,7 @@ function scrollToEvent () {
var spans = $$('TR#currentEventPosition TH SPAN'); var spans = $$('TR#currentEventPosition TH SPAN');
for (var i = 0; i < spans.length; i++) { for (var i = 0; i < spans.length; i++) {
scroll += spans[i].getWidth (spans[i]); scroll += spans[i].getWidth (spans[i]);
if (spans[i].hasClassName ("busy")) { if (spans[i].hasClassName("busy")) {
scroll -= 20 * spans[i].getWidth (spans[i]); scroll -= 20 * spans[i].getWidth (spans[i]);
break; break;
} }
@@ -536,33 +523,32 @@ function toggleOfficeHours () {
} }
function updateSlotDisplayCallback(http) { function updateSlotDisplayCallback(http) {
var data = http.responseText.evalJSON (true); var data = http.responseText.evalJSON(true);
var start = new Date (); var start = new Date();
var end = new Date (); var end = new Date();
var cb = redisplayFreeBusyZone; var cb = redisplayFreeBusyZone;
start.setFullYear (parseInt (data[0]['startDate'].substr (0, 4)), start.setFullYear(parseInt (data[0]['startDate'].substr(0, 4)),
parseInt (data[0]['startDate'].substr (4, 2)) - 1, parseInt (data[0]['startDate'].substr(4, 2)) - 1,
parseInt (data[0]['startDate'].substr (6, 2))); parseInt (data[0]['startDate'].substr(6, 2)));
end.setFullYear (parseInt (data[0]['endDate'].substr (0, 4)), end.setFullYear(parseInt (data[0]['endDate'].substr(0, 4)),
parseInt (data[0]['endDate'].substr (4, 2)) - 1, parseInt (data[0]['endDate'].substr(4, 2)) - 1,
parseInt (data[0]['endDate'].substr (6, 2))); parseInt (data[0]['endDate'].substr(6, 2)));
window.timeWidgets['end']['date'].setValueAsDate (end); window.timeWidgets['end']['date'].setValueAsDate(end);
window.timeWidgets['end']['hour'].value = cleanInt (data[0]['endHour']); window.timeWidgets['end']['hour'].value = cleanInt(data[0]['endHour']);
window.timeWidgets['end']['minute'].value = cleanInt (data[0]['endMinute']); window.timeWidgets['end']['minute'].value = cleanInt(data[0]['endMinute']);
if (window.timeWidgets['start']['date'].valueAsShortDateString () != if (window.timeWidgets['start']['date'].valueAsShortDateString() !=
data[0]['startDate']) data[0]['startDate']) {
{ cb = onTimeDateWidgetChange;
cb = onTimeDateWidgetChange; }
}
window.timeWidgets['start']['date'].setValueAsDate (start); window.timeWidgets['start']['date'].setValueAsDate(start);
window.timeWidgets['start']['hour'].value = cleanInt (data[0]['startHour']); window.timeWidgets['start']['hour'].value = cleanInt(data[0]['startHour']);
window.timeWidgets['start']['minute'].value = cleanInt (data[0]['startMinute']); window.timeWidgets['start']['minute'].value = cleanInt(data[0]['startMinute']);
cb (); cb();
} }
function onPreviousSlotClick (event) { function onPreviousSlotClick (event) {