Monotone-Parent: bcf3ec198a9fc9a38979133a1a51c6ad69c9537c
Monotone-Revision: 5a4a7c1db4a25a06a5e157e4f3556f764c632fa8 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-05-18T18:35:47 Monotone-Branch: ca.inverse.sogomaint-2.0.2
parent
59685ed035
commit
5b63644e6a
14
ChangeLog
14
ChangeLog
|
@ -1,5 +1,19 @@
|
|||
2010-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||
|
||||
* SoObjects/Appointments/iCalEvent+SOGo.m (-quickRecord): extract
|
||||
the event category into the c_category column.
|
||||
|
||||
* SoObjects/Appointments/iCalToDo+SOGo.m (-quickRecord): extract
|
||||
the task category into the c_category column.
|
||||
|
||||
* UI/Scheduler/UIxCalListingActions.m (+initialize): added the
|
||||
new "c_category" field to the list of fields that require
|
||||
fetching.
|
||||
|
||||
* UI/WebServerResources/SchedulerUI.js: (newBaseEventDIV) shifted
|
||||
field indexes by 1 from the 9th field, which is now the "category"
|
||||
field.
|
||||
|
||||
* Main/SOGo.m (-dispatchRequest:): send a "SOGoRequestDuration"
|
||||
header back to the client with the time delta as value when
|
||||
SOGoDebugRequests is set to YES.
|
||||
|
|
|
@ -95,6 +95,11 @@
|
|||
sqlType = "VARCHAR2(255)";
|
||||
allowsNull = YES;
|
||||
},
|
||||
{
|
||||
columnName = c_category;
|
||||
sqlType = "VARCHAR2(255)";
|
||||
allowsNull = YES;
|
||||
},
|
||||
{
|
||||
columnName = c_sequence;
|
||||
sqlType = "INTEGER";
|
||||
|
|
|
@ -95,6 +95,11 @@
|
|||
sqlType = "VARCHAR(255)";
|
||||
allowsNull = YES;
|
||||
},
|
||||
{
|
||||
columnName = c_category;
|
||||
sqlType = "VARCHAR(255)";
|
||||
allowsNull = YES;
|
||||
},
|
||||
{
|
||||
columnName = c_sequence;
|
||||
sqlType = "INT";
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
#!/bin/bash
|
||||
|
||||
# this script only works with PostgreSQL
|
||||
|
||||
defaultusername=$USER
|
||||
defaulthostname=localhost
|
||||
defaultdatabase=$USER
|
||||
indextable=sogo_folder_info
|
||||
|
||||
read -p "Username ($defaultusername): " username
|
||||
read -p "Hostname ($defaulthostname): " hostname
|
||||
read -p "Database ($defaultdatabase): " database
|
||||
|
||||
if [ -z "$username" ]
|
||||
then
|
||||
username=$defaultusername
|
||||
fi
|
||||
if [ -z "$hostname" ]
|
||||
then
|
||||
hostname=$defaulthostname
|
||||
fi
|
||||
if [ -z "$database" ]
|
||||
then
|
||||
database=$defaultdatabase
|
||||
fi
|
||||
|
||||
sqlscript=""
|
||||
|
||||
function addField() {
|
||||
oldIFS="$IFS"
|
||||
IFS=" "
|
||||
part="`echo -e \"ALTER TABLE $table ADD COLUMN c_category VARCHAR(255);\\n\"`";
|
||||
sqlscript="$sqlscript$part"
|
||||
IFS="$oldIFS"
|
||||
}
|
||||
|
||||
tables=`psql -t -U $username -h $hostname $database -c "select split_part(c_quick_location, '/', 5) from $indextable where c_folder_type = 'Appointment';"`
|
||||
|
||||
for table in $tables;
|
||||
do
|
||||
addField
|
||||
done
|
||||
|
||||
echo "$sqlscript" | psql -q -e -U $username -h $hostname $database > /dev/null
|
|
@ -64,7 +64,7 @@
|
|||
NSMutableDictionary *row;
|
||||
NSCalendarDate *startDate, *endDate, *nextAlarmDate;
|
||||
NSArray *attendees;
|
||||
NSString *uid, *title, *location, *status;
|
||||
NSString *uid, *title, *location, *status, *category;
|
||||
NSNumber *sequence;
|
||||
id organizer;
|
||||
id participants, partmails;
|
||||
|
@ -250,6 +250,9 @@
|
|||
else
|
||||
[row setObject: [NSNumber numberWithInt: 0] forKey: @"c_nextalarm"];
|
||||
|
||||
category = [self categories];
|
||||
if ([category length] > 0)
|
||||
[row setObject: category forKey: @"c_category"];
|
||||
|
||||
return row;
|
||||
}
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
NSMutableDictionary *row;
|
||||
NSCalendarDate *startDate, *dueDate, *nextAlarmDate;
|
||||
NSArray *attendees;
|
||||
NSString *uid, *title, *location, *status;
|
||||
NSString *uid, *title, *location, *status, *category;
|
||||
NSNumber *sequence;
|
||||
id organizer, date;
|
||||
id participants, partmails;
|
||||
|
@ -211,6 +211,10 @@
|
|||
else
|
||||
[row setObject: [NSNumber numberWithInt: 0] forKey: @"c_nextalarm"];
|
||||
|
||||
category = [self categories];
|
||||
if ([category length] > 0)
|
||||
[row setObject: category forKey: @"c_category"];
|
||||
|
||||
return row;
|
||||
}
|
||||
|
||||
|
|
|
@ -82,17 +82,19 @@ static NSArray *tasksFields = nil;
|
|||
eventsFields = [NSArray arrayWithObjects: @"c_name", @"c_folder",
|
||||
@"c_status", @"c_title", @"c_startdate",
|
||||
@"c_enddate", @"c_location", @"c_isallday",
|
||||
@"c_classification", @"c_partmails",
|
||||
@"c_partstates", @"c_owner", @"c_iscycle", @"c_nextalarm",
|
||||
@"c_recurrence_id", @"isException", @"editable", @"erasable",
|
||||
@"ownerIsOrganizer", nil];
|
||||
@"c_classification", @"c_category",
|
||||
@"c_partmails", @"c_partstates", @"c_owner",
|
||||
@"c_iscycle", @"c_nextalarm",
|
||||
@"c_recurrence_id", @"isException", @"editable",
|
||||
@"erasable", @"ownerIsOrganizer", nil];
|
||||
[eventsFields retain];
|
||||
}
|
||||
if (!tasksFields)
|
||||
{
|
||||
tasksFields = [NSArray arrayWithObjects: @"c_name", @"c_folder",
|
||||
@"c_status", @"c_title", @"c_enddate",
|
||||
@"c_classification", @"editable", @"erasable", @"c_priority", nil];
|
||||
@"c_classification", @"editable", @"erasable",
|
||||
@"c_priority", nil];
|
||||
[tasksFields retain];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -352,7 +352,7 @@ function _deleteCalendarEventBlocks(calendar, cname, occurenceTime) {
|
|||
if (occurences) {
|
||||
for (var i = 0; i < occurences.length; i++) {
|
||||
var occurence = occurences[i];
|
||||
if (occurenceTime == null || occurenceTime == occurence[14]) {
|
||||
if (occurenceTime == null || occurenceTime == occurence[15]) {
|
||||
var nodes = occurence.blocks;
|
||||
for (var j = 0; j < nodes.length; j++) {
|
||||
var node = nodes[j];
|
||||
|
@ -377,7 +377,7 @@ function _deleteEventFromTables(calendar, cname, occurenceTime) {
|
|||
var occurences = calendarEvents[calendar][cname];
|
||||
if (occurences) {
|
||||
var occurence = occurences.first();
|
||||
var ownerIsOrganizer = occurence[18];
|
||||
var ownerIsOrganizer = occurence[19];
|
||||
|
||||
// Delete event from events list
|
||||
var table = $("eventsList");
|
||||
|
@ -396,7 +396,7 @@ function _deleteEventFromTables(calendar, cname, occurenceTime) {
|
|||
// This is the specified event or the same event in another
|
||||
// calendar. In this case, remove it only if the delete
|
||||
// operation is triggered from the organizer's calendar.
|
||||
if (occurenceTime == null || occurenceTime == occurence[14]) {
|
||||
if (occurenceTime == null || occurenceTime == occurence[15]) {
|
||||
row.parentNode.removeChild(row);
|
||||
break;
|
||||
}
|
||||
|
@ -420,7 +420,7 @@ function _deleteCalendarEventCache(calendar, cname, occurenceTime) {
|
|||
if (calendarEvents[calendar]) {
|
||||
var occurences = calendarEvents[calendar][cname];
|
||||
if (occurences)
|
||||
ownerIsOrganizer = occurences[0][18];
|
||||
ownerIsOrganizer = occurences[0][19];
|
||||
}
|
||||
|
||||
for (var otherCalendar in calendarEvents) {
|
||||
|
@ -437,8 +437,8 @@ function _deleteCalendarEventCache(calendar, cname, occurenceTime) {
|
|||
if (occurenceTime == null) {
|
||||
delete calendarEvents[otherCalendar][cname];
|
||||
}
|
||||
else if (occurenceTime != occurence[14]) {
|
||||
// || occurenceTime == occurence[14]) {
|
||||
else if (occurenceTime != occurence[15]) {
|
||||
// || occurenceTime == occurence[15]) {
|
||||
newOccurences.push(occurence);
|
||||
}
|
||||
}
|
||||
|
@ -767,7 +767,7 @@ function eventsListCallback(http) {
|
|||
var row = $(document.createElement("tr"));
|
||||
table.tBodies[0].appendChild(row);
|
||||
row.addClassName("eventRow");
|
||||
var rTime = data[i][14];
|
||||
var rTime = data[i][15];
|
||||
var id = escape(data[i][1] + "-" + data[i][0]);
|
||||
if (rTime)
|
||||
id += "-" + escape(rTime);
|
||||
|
@ -776,9 +776,9 @@ function eventsListCallback(http) {
|
|||
row.calendar = escape(data[i][1]);
|
||||
if (rTime)
|
||||
row.recurrenceTime = escape(rTime);
|
||||
row.isException = data[i][15];
|
||||
row.editable = data[i][16];
|
||||
row.erasable = data[i][17];
|
||||
row.isException = data[i][16];
|
||||
row.editable = data[i][17];
|
||||
row.erasable = data[i][18];
|
||||
var startDate = new Date();
|
||||
startDate.setTime(data[i][4] * 1000);
|
||||
row.day = startDate.getDayString();
|
||||
|
@ -1243,28 +1243,29 @@ function newBaseEventDIV(eventRep, event, eventText) {
|
|||
// log ("6 location = " + event[6]);
|
||||
// log ("7 isallday = " + event[7]);
|
||||
// log ("8 classification = " + event[8]);
|
||||
// log ("9 participants emails = " + event[9]);
|
||||
// log ("10 participants states = " + event[10]);
|
||||
// log ("11 owner = " + event[11]);
|
||||
// log ("12 iscycle = " + event[12]);
|
||||
// log ("13 nextalarm = " + event[13]);
|
||||
// log ("14 recurrenceid = " + event[14]);
|
||||
// log ("15 isexception = " + event[15]);
|
||||
// log ("16 editable = " + event[16]);
|
||||
// log ("17 erasable = " + event[17]);
|
||||
// log ("18 ownerisorganizer = " + event[18]);
|
||||
// log ("9 category = " + event[9]);
|
||||
// log ("10 participants emails = " + event[10]);
|
||||
// log ("11 participants states = " + event[11]);
|
||||
// log ("12 owner = " + event[12]);
|
||||
// log ("13 iscycle = " + event[13]);
|
||||
// log ("14 nextalarm = " + event[14]);
|
||||
// log ("15 recurrenceid = " + event[15]);
|
||||
// log ("16 isexception = " + event[16]);
|
||||
// log ("17 editable = " + event[17]);
|
||||
// log ("18 erasable = " + event[18]);
|
||||
// log ("19 ownerisorganizer = " + event[19]);
|
||||
|
||||
var eventCell = $(document.createElement("div"));
|
||||
eventCell.cname = event[0];
|
||||
eventCell.calendar = event[1];
|
||||
if (eventRep.recurrenceTime)
|
||||
eventCell.recurrenceTime = eventRep.recurrenceTime;
|
||||
eventCell.isException = event[15];
|
||||
eventCell.editable = event[16];
|
||||
eventCell.erasable = event[17];
|
||||
eventCell.ownerIsOrganizer = event[18];
|
||||
eventCell.isException = event[16];
|
||||
eventCell.editable = event[17];
|
||||
eventCell.erasable = event[18];
|
||||
eventCell.ownerIsOrganizer = event[19];
|
||||
eventCell.addClassName("event");
|
||||
if (event[13] > 0)
|
||||
if (event[14] > 0)
|
||||
eventCell.addClassName("alarm");
|
||||
|
||||
var innerDiv = $(document.createElement("div"));
|
||||
|
@ -1763,7 +1764,7 @@ function _eventBlocksMatching(calendar, cname, recurrenceTime) {
|
|||
if (recurrenceTime) {
|
||||
for (var i = 0; i < occurences.length; i++) {
|
||||
var occurence = occurences[i];
|
||||
if (occurence[14] == recurrenceTime)
|
||||
if (occurence[15] == recurrenceTime)
|
||||
blocks = occurence.blocks;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue