mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-07-14 12:54:54 +00:00
Fixed bug #1515 Task View is very basic.
- Added sortable fields on Title, Due date, Location, Category and Calendar. - Added Priority column, also sortable. - Separated the logic of Events and Tasks.
This commit is contained in:
@@ -48,6 +48,20 @@
|
||||
#define eventErasableIndex 19
|
||||
#define eventOwnerIsOrganizerIndex 20
|
||||
|
||||
// See [UIxCalListingActions initialize]
|
||||
#define taskNameIndex 0
|
||||
#define taskFolderIndex 1
|
||||
#define taskCalendarNameIndex 2
|
||||
#define taskStatusIndex 3
|
||||
#define taskTitleIndex 4
|
||||
#define taskEndDateIndex 5
|
||||
#define taskClassificationIndex 6
|
||||
#define taskLocationIndex 7
|
||||
#define taskCategoryIndex 8
|
||||
#define taskEditableIndex 9
|
||||
#define taskErasableIndex 10
|
||||
#define taskPriorityIndex 11
|
||||
|
||||
@interface NSArray (SOGoEventComparison)
|
||||
|
||||
- (NSComparisonResult) compareEventsStartDateAscending: (NSArray *) otherEvent;
|
||||
@@ -56,6 +70,12 @@
|
||||
- (NSComparisonResult) compareEventsLocationAscending: (NSArray *) otherEvent;
|
||||
- (NSComparisonResult) compareEventsCalendarNameAscending: (NSArray *) otherEvent;
|
||||
- (NSComparisonResult) compareTasksAscending: (NSArray *) otherTask;
|
||||
- (NSComparisonResult) compareTasksPriorityAscending: (NSArray *) otherTask;
|
||||
- (NSComparisonResult) compareTasksTitleAscending: (NSArray *) otherTask;
|
||||
- (NSComparisonResult) compareTasksEndAscending: (NSArray *) otherTask;
|
||||
- (NSComparisonResult) compareTasksLocationAscending: (NSArray *) otherTask;
|
||||
- (NSComparisonResult) compareTasksCategoryAscending: (NSArray *) otherTask;
|
||||
- (NSComparisonResult) compareTasksCalendarNameAscending: (NSArray *) otherTask;
|
||||
- (NSArray *) reversedArray;
|
||||
|
||||
@end
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
#import <Foundation/NSValue.h>
|
||||
|
||||
#import <NGExtensions/NGCalendarDateRange.h>
|
||||
#import <NGExtensions/NSNull+misc.h>
|
||||
|
||||
#import "NSArray+Scheduler.h"
|
||||
|
||||
@@ -119,40 +120,148 @@
|
||||
NSComparisonResult result;
|
||||
unsigned int selfTime, otherTime;
|
||||
|
||||
result = [self _compareCompletionWithStatus1: [self objectAtIndex: 2]
|
||||
andStatus2: [otherTask objectAtIndex: 2]];
|
||||
result = [self _compareCompletionWithStatus1: [self objectAtIndex: taskCalendarNameIndex]
|
||||
andStatus2: [otherTask objectAtIndex: taskCalendarNameIndex]];
|
||||
if (result == NSOrderedSame)
|
||||
{
|
||||
// End date
|
||||
selfTime = [[self objectAtIndex: taskEndDateIndex] intValue];
|
||||
otherTime = [[otherTask objectAtIndex: taskEndDateIndex] intValue];
|
||||
if (selfTime && !otherTime)
|
||||
result = NSOrderedAscending;
|
||||
else if (!selfTime && otherTime)
|
||||
result = NSOrderedDescending;
|
||||
else
|
||||
{
|
||||
// End date
|
||||
selfTime = [[self objectAtIndex: 5] intValue];
|
||||
otherTime = [[otherTask objectAtIndex: 5] intValue];
|
||||
if (selfTime && !otherTime)
|
||||
result = NSOrderedAscending;
|
||||
else if (!selfTime && otherTime)
|
||||
result = NSOrderedDescending;
|
||||
if (selfTime > otherTime)
|
||||
result = NSOrderedDescending;
|
||||
else if (selfTime < otherTime)
|
||||
result = NSOrderedAscending;
|
||||
else
|
||||
{
|
||||
if (selfTime > otherTime)
|
||||
result = NSOrderedDescending;
|
||||
else if (selfTime < otherTime)
|
||||
result = NSOrderedAscending;
|
||||
else
|
||||
{
|
||||
// Calendar ID
|
||||
result = [[self objectAtIndex: 1]
|
||||
compare: [otherTask objectAtIndex: 1]];
|
||||
if (result == NSOrderedSame)
|
||||
// Task name
|
||||
result = [[self objectAtIndex: 4]
|
||||
compare: [otherTask objectAtIndex: 4]
|
||||
options: NSCaseInsensitiveSearch];
|
||||
}
|
||||
}
|
||||
{
|
||||
// Calendar ID
|
||||
result = [[self objectAtIndex: taskFolderIndex]
|
||||
compare: [otherTask objectAtIndex: taskFolderIndex]];
|
||||
if (result == NSOrderedSame)
|
||||
// Task name
|
||||
result = [[self objectAtIndex: taskTitleIndex]
|
||||
compare: [otherTask objectAtIndex: taskTitleIndex]
|
||||
options: NSCaseInsensitiveSearch];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
- (NSComparisonResult) compareTasksPriorityAscending: (NSArray *) otherTask
|
||||
{
|
||||
NSComparisonResult result;
|
||||
int selfPriority, otherPriority;
|
||||
|
||||
selfPriority = [[self objectAtIndex: taskPriorityIndex] intValue];
|
||||
otherPriority = [[otherTask objectAtIndex: taskPriorityIndex] intValue];
|
||||
|
||||
if (selfPriority && !otherPriority)
|
||||
result = NSOrderedAscending;
|
||||
else if (!selfPriority && otherPriority)
|
||||
result = NSOrderedDescending;
|
||||
else
|
||||
{
|
||||
if (selfPriority > otherPriority)
|
||||
result = NSOrderedDescending;
|
||||
else if (selfPriority < otherPriority)
|
||||
result = NSOrderedAscending;
|
||||
else
|
||||
result = NSOrderedSame;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
- (NSComparisonResult) compareTasksTitleAscending: (NSArray *) otherTask
|
||||
{
|
||||
NSString *selfTitle, *otherTitle;
|
||||
|
||||
selfTitle = [self objectAtIndex: taskTitleIndex];
|
||||
otherTitle = [otherTask objectAtIndex: taskTitleIndex];
|
||||
|
||||
return [selfTitle caseInsensitiveCompare: otherTitle];
|
||||
}
|
||||
|
||||
- (NSComparisonResult) compareTasksEndAscending: (NSArray *) otherTask
|
||||
{
|
||||
NSComparisonResult result;
|
||||
unsigned int selfTime, otherTime;
|
||||
|
||||
// End date
|
||||
selfTime = [[self objectAtIndex: taskEndDateIndex] intValue];
|
||||
otherTime = [[otherTask objectAtIndex: taskEndDateIndex] intValue];
|
||||
if (selfTime && !otherTime)
|
||||
result = NSOrderedAscending;
|
||||
else if (!selfTime && otherTime)
|
||||
result = NSOrderedDescending;
|
||||
else
|
||||
{
|
||||
if (selfTime > otherTime)
|
||||
result = NSOrderedDescending;
|
||||
else if (selfTime < otherTime)
|
||||
result = NSOrderedAscending;
|
||||
else
|
||||
{
|
||||
// Calendar ID
|
||||
result = [[self objectAtIndex: taskFolderIndex]
|
||||
compare: [otherTask objectAtIndex: taskFolderIndex]];
|
||||
if (result == NSOrderedSame)
|
||||
// Task name
|
||||
result = [[self objectAtIndex: taskTitleIndex]
|
||||
compare: [otherTask objectAtIndex: taskTitleIndex]
|
||||
options: NSCaseInsensitiveSearch];
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
- (NSComparisonResult) compareTasksLocationAscending: (NSArray *) otherTask
|
||||
{
|
||||
NSString *selfLocation, *otherLocation;
|
||||
|
||||
selfLocation = [self objectAtIndex: taskLocationIndex];
|
||||
otherLocation = [otherTask objectAtIndex: taskLocationIndex];
|
||||
|
||||
return [selfLocation caseInsensitiveCompare: otherLocation];
|
||||
}
|
||||
|
||||
- (NSComparisonResult) compareTasksCategoryAscending: (NSArray *) otherTask
|
||||
{
|
||||
NSString *selfCategory, *otherCategory;
|
||||
NSComparisonResult result;
|
||||
|
||||
selfCategory = [self objectAtIndex: taskCategoryIndex];
|
||||
otherCategory = [otherTask objectAtIndex: taskCategoryIndex];
|
||||
|
||||
if ([selfCategory isNotNull] && [otherCategory isNotNull])
|
||||
result = [selfCategory caseInsensitiveCompare: otherCategory];
|
||||
else if ([selfCategory isNotNull])
|
||||
result = NSOrderedAscending;
|
||||
else if ([otherCategory isNotNull])
|
||||
result = NSOrderedDescending;
|
||||
else
|
||||
result = NSOrderedSame;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
- (NSComparisonResult) compareTasksCalendarNameAscending: (NSArray *) otherTask
|
||||
{
|
||||
NSString *selfCalendarName, *otherCalendarName;
|
||||
|
||||
selfCalendarName = [self objectAtIndex: taskCalendarNameIndex];
|
||||
otherCalendarName = [otherTask objectAtIndex: taskCalendarNameIndex];
|
||||
|
||||
return [selfCalendarName caseInsensitiveCompare: otherCalendarName];
|
||||
}
|
||||
|
||||
- (NSArray *) reversedArray
|
||||
{
|
||||
return [[self reverseObjectEnumerator] allObjects];
|
||||
|
||||
@@ -1047,14 +1047,16 @@ _computeBlocksPosition (NSArray *blocks)
|
||||
|
||||
- (WOResponse *) tasksListAction
|
||||
{
|
||||
NSMutableArray *filteredTasks, *filteredTask;
|
||||
NSString *sort, *ascending;
|
||||
NSString *statusFlag;
|
||||
SOGoUserSettings *us;
|
||||
NSEnumerator *tasks;
|
||||
NSMutableArray *filteredTasks, *filteredTask;
|
||||
BOOL showCompleted;
|
||||
NSArray *task;
|
||||
int statusCode;
|
||||
|
||||
unsigned int endDateStamp;
|
||||
NSString *statusFlag;
|
||||
BOOL showCompleted;
|
||||
int statusCode;
|
||||
|
||||
filteredTasks = [NSMutableArray array];
|
||||
|
||||
@@ -1087,7 +1089,25 @@ _computeBlocksPosition (NSArray *blocks)
|
||||
[filteredTasks addObject: filteredTask];
|
||||
}
|
||||
}
|
||||
[filteredTasks sortUsingSelector: @selector (compareTasksAscending:)];
|
||||
sort = [[context request] formValueForKey: @"sort"];
|
||||
if ([sort isEqualToString: @"title"])
|
||||
[filteredTasks sortUsingSelector: @selector (compareTasksTitleAscending:)];
|
||||
else if ([sort isEqualToString: @"priority"])
|
||||
[filteredTasks sortUsingSelector: @selector (compareTasksPriorityAscending:)];
|
||||
else if ([sort isEqualToString: @"end"])
|
||||
[filteredTasks sortUsingSelector: @selector (compareTasksEndAscending:)];
|
||||
else if ([sort isEqualToString: @"location"])
|
||||
[filteredTasks sortUsingSelector: @selector (compareTasksLocationAscending:)];
|
||||
else if ([sort isEqualToString: @"category"])
|
||||
[filteredTasks sortUsingSelector: @selector (compareTasksCategoryAscending:)];
|
||||
else if ([sort isEqualToString: @"calendarname"])
|
||||
[filteredTasks sortUsingSelector: @selector (compareTasksCalendarNameAscending:)];
|
||||
else
|
||||
[filteredTasks sortUsingSelector: @selector (compareTasksAscending:)];
|
||||
|
||||
ascending = [[context request] formValueForKey: @"asc"];
|
||||
if (![ascending boolValue])
|
||||
[filteredTasks reverseArray];
|
||||
|
||||
return [self _responseWithData: filteredTasks];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user