mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-02-22 09:56:23 +00:00
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:
10
ChangeLog
10
ChangeLog
@@ -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
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user