diff --git a/ChangeLog b/ChangeLog index 61653a6cf..b6b25b5de 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,109 @@ +2009-03-25 Francis Lachapelle + + * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): must retain + the ivar language to avoid a crash if the language is retrieved + from the user agent header returned by the browser. + +2009-03-24 Wolfgang Sourdeau + + * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor + -takeValuesFromRequest:_rqinContext:_ctx]): ensure the values + meant to construct the custom recurrence rule are consistent. + + * UI/Scheduler/UIxCalMainView.m: if the module settings key + exists, do not reset it. + +2009-03-24 Ludovic Marcotte + + * UI/MailerUI/UIxMailListView.m + ([UIxMailListView messages)]: + Adjusted the sort so it's a little bit faster + and correctly work in case the server returns us + the FETCH response in an order different that what + we asked for. + +2009-03-24 Francis Lachapelle + + * SoObjects/SOGo/SOGoUser.m ([SOGoUser -invalidateLanguage]): + new method to invalidate the language ivar. + + * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -connectAction]): must + invalidate user's language ivar when it changes. + + * SoObjects/SOGo/SOGoCache.m ([SOGoCache + -_userDefaultsHaveChanged:]): must invalidate the user's language + ivar when the defaults change. + + * SoObjects/Appointments/SOGoCalendarComponent.m + ([SOGoCalendarComponent + -sendEMailUsingTemplateNamed:forObject:previousObject:toAttendees:]): + no longer send a deletion notification to an attendee who already + declined the meeting. + + * UI/MailPartViewers/UIxMailPartICalActions.m + ([UIxMailPartICalActions -_eventObjectWithUID:forUser:]): when + looking for an event for a specific user, we now search into all + the user's calendar folders. + + * UI/MailPartViewers/UIxMailPartICalViewer.m + ([UIxMailPartICalViewer -startCalendarDate]): new method that returns + the start date with the proper timezone. + ([-endCalendarDate]): idem for the end date. + ([-startDate]): new method that returns a formatted string of the + start date. + ([-endDate]): idem for the end date. Also take care of all-day events. + ([-startTime]): new method that returns a formatted string ot the + start time. + ([-endTime]): idem for the end time. + ([-isEndDateOnSameDay]): must subtract 1 second from end date when + it's a all-day event. + +2009-03-24 Wolfgang Sourdeau + + * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor + -_loadAttendees]): make use of autoreleased strings to avoid a leak. + ([UIxComponentEditor -dealloc]): release componentCalendar. + + * SoObjects/SOGo/SOGoUser.m ([SOGoUser + -_prepareDefaultMailAccounts]): return an autoreleased array to + avoid a leak. + + * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions + -initWithRequest:newRequest]): retain dateFormatter, since it is + released in -dealloc. + ([UIxCalListingActions -dealloc]): do not release startDate and + endDate since they are not retained. + +2009-03-23 Francis Lachapelle + + * SoObjects/Appointments/SOGoAppointmentObject.m + ([SOGoAppointmentObject -_lookupEvent:forUID:]): when looking for + an event for a specific user, we now search into all the user's + calendar folders. + + * SoObjects/Appointments/SOGoAppointmentFolder.m + ([SOGoAppointmentFolder -lookupCalendarFoldersForUID:]): new + method that returns an array of a user's calendar folders + excluding the subscriptions. + +2009-03-23 Wolfgang Sourdeau + + * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder + -subscribe:reallyDoinTheNamesOf:delegatedUsersfromMailInvitation:isMailInvitationinContext:localContext]): + when the user preferences didn't already contain a key matching + the current module name, the subscriptions would not work. We thus + create one if none exists yet. + + * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders + -appendSystemSources]): modified the return type and returns nil, + to match the new SOGoParentFolder definition of the method. + Otherwise, a confusion is created on the stack. + 2009-03-23 Ludovic Marcotte * SoObjects/SOGo/SOGoUser.m: Don't retain/release the language ivar. - 2009-03-22 Wolfgang Sourdeau * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): cache the @@ -79,8 +179,8 @@ * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -version]): new method that returns the application version. - * iCalDateTime.m ([iCalDateTime -dateTime]): when not defined, the - timezone is now guessed from the date of the current object. + * SOPE/NGCards/iCalDateTime.m ([iCalDateTime -dateTime]): when not + defined, the timezone is now guessed from the date of the current object. 2009-03-18 Ludovic Marcotte diff --git a/Documentation/SOGo Mozilla Thunderbird Configuration.odt b/Documentation/SOGo Mozilla Thunderbird Configuration.odt index 339376f98..fc3e80f04 100644 Binary files a/Documentation/SOGo Mozilla Thunderbird Configuration.odt and b/Documentation/SOGo Mozilla Thunderbird Configuration.odt differ diff --git a/NEWS b/NEWS index 8dfb2d775..993843c9e 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,9 @@ -1.0-20090317 ------------ +1.0-2009 +-------- +- when the status of an attendee changes, the event of an organizer is now updated correctly if it doesn't reside in the personal folder + +1.0-20090317 (1.0.0) +--------------- - when double-clicking in the all-day zone (day & week views), the "All Day event" checkbox is now automatically checked - replaced the JavaScript FastInit class by the dom:loaded event of Prototype JS - also updated Prototype JS to fix issues with IE7 diff --git a/SOPE/GDLContentStore/ChangeLog b/SOPE/GDLContentStore/ChangeLog index 2aa397409..7d27f8619 100644 --- a/SOPE/GDLContentStore/ChangeLog +++ b/SOPE/GDLContentStore/ChangeLog @@ -1,3 +1,10 @@ +2009-03-24 Wolfgang Sourdeau + + * GCSFolderType.m ([GCSFolderType +folderTypeWithName:_typeName]): + autorelease the returned GCSFolderType. + ([GCSFolderType -initWithFolderTypeName:_path]): removed useless + method. + 2009-03-20 Wolfgang Sourdeau * GCSChannelManager.m ([GCSChannelManager diff --git a/SOPE/GDLContentStore/GCSFolderManager.m b/SOPE/GDLContentStore/GCSFolderManager.m index ab8f9b52a..fd0e70b77 100644 --- a/SOPE/GDLContentStore/GCSFolderManager.m +++ b/SOPE/GDLContentStore/GCSFolderManager.m @@ -161,12 +161,11 @@ static NSLock *lock; GCSFolderType *typeObject; type = [[types objectAtIndex:i] stringByDeletingPathExtension]; - typeObject = [[GCSFolderType alloc] initWithFolderTypeName:type]; + typeObject = [GCSFolderType folderTypeWithName: type]; [self logWithFormat:@" %@: %s", type, [typeObject isNotNull] ? "OK" : "FAIL"]; - [typeMap setObject:typeObject forKey:type]; - [typeObject release]; + [typeMap setObject: typeObject forKey:type]; } return typeMap; diff --git a/SOPE/GDLContentStore/GCSFolderType.h b/SOPE/GDLContentStore/GCSFolderType.h index a27584d18..369e06087 100644 --- a/SOPE/GDLContentStore/GCSFolderType.h +++ b/SOPE/GDLContentStore/GCSFolderType.h @@ -57,7 +57,6 @@ - (id)initWithPropertyList:(id)_plist; - (id)initWithContentsOfFile:(NSString *)_path; -- (id)initWithFolderTypeName:(NSString *)_typeName; /* operations */ diff --git a/SOPE/GDLContentStore/GCSFolderType.m b/SOPE/GDLContentStore/GCSFolderType.m index 04ed7d197..18780b32b 100644 --- a/SOPE/GDLContentStore/GCSFolderType.m +++ b/SOPE/GDLContentStore/GCSFolderType.m @@ -10,11 +10,11 @@ OGo is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with OGo; see the file COPYING. If not, write to the + License along with OGo; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ @@ -39,148 +39,164 @@ @implementation GCSFolderType -- (id)initWithPropertyList:(id)_plist { - if ((self = [super init])) { - NSDictionary *plist = _plist; - - blobTablePattern = [[plist objectForKey:@"blobTablePattern"] copy]; - quickTablePattern = [[plist objectForKey:@"quickTablePattern"]copy]; - - extractorClassName = - [[plist objectForKey:@"extractorClassName"] copy]; - // TODO: qualifier; - - fields = [[GCSFieldInfo fieldsForPropertyList: - [plist objectForKey:@"fields"]] retain]; - } - return self; -} - -- (id)initWithContentsOfFile:(NSString *)_path { - NSDictionary *plist; - - plist = [NSDictionary dictionaryWithContentsOfFile:_path]; - if (plist == nil) { - NSLog(@"ERROR(%s): could not read dictionary at path %@", - __PRETTY_FUNCTION__, _path); - [self release]; - return nil; - } - return [self initWithPropertyList:plist]; -} - -+ (NGResourceLocator *)resourceLocator { - NGResourceLocator *loc; - - // TODO: fix me, GCS instead of OCS - loc = [NGResourceLocator resourceLocatorForGNUstepPath: - @"OCSTypeModels" - fhsPath:@"share/ocs"]; - return loc; -} - -+ (id)folderTypeWithName:(NSString *)_typeName { ++ (id) folderTypeWithName: (NSString *) _typeName +{ NSString *filename, *path; + GCSFolderType *folderType; // TODO: fix me, GCS instead of OCS filename = [_typeName stringByAppendingPathExtension:@"ocs"]; - path = [[self resourceLocator] lookupFileWithName:filename]; - - if (path != nil) - return [[self alloc] initWithContentsOfFile:path]; + path = [[self resourceLocator] lookupFileWithName: filename]; + + if (path) + { + folderType = [[self alloc] initWithContentsOfFile: path]; + [folderType autorelease]; + } + else + { + folderType = nil; + NSLog(@"ERROR(%s): did not find model for type: '%@'", + __PRETTY_FUNCTION__, _typeName); + } - NSLog(@"ERROR(%s): did not find model for type: '%@'", - __PRETTY_FUNCTION__, _typeName); - return nil; + return folderType; } -- (id)initWithFolderTypeName:(NSString *)_typeName { - // DEPRECATED - [self release]; - return [[GCSFolderType folderTypeWithName:_typeName] retain]; +- (id) initWithPropertyList: (id) _plist +{ + NSDictionary *plist = _plist; + + if ((self = [super init])) + { + blobTablePattern = [[plist objectForKey:@"blobTablePattern"] copy]; + quickTablePattern = [[plist objectForKey:@"quickTablePattern"] copy]; + + extractorClassName = + [[plist objectForKey: @"extractorClassName"] copy]; + // TODO: qualifier; + + fields = [[GCSFieldInfo fieldsForPropertyList: + [plist objectForKey:@"fields"]] retain]; + } + + return self; } -- (void)dealloc { - [extractor release]; +- (id) initWithContentsOfFile: (NSString *) _path +{ + NSDictionary *plist; + + plist = [NSDictionary dictionaryWithContentsOfFile: _path]; + if (plist) + [self initWithPropertyList: plist]; + else + { + NSLog(@"ERROR(%s): could not read dictionary at path %@", + __PRETTY_FUNCTION__, _path); + [self release]; + self = nil; + } + + return self; +} + ++ (NGResourceLocator *) resourceLocator +{ + NGResourceLocator *loc; + + // TODO: fix me, GCS instead of OCS + loc = [NGResourceLocator resourceLocatorForGNUstepPath: + @"OCSTypeModels" + fhsPath:@"share/ocs"]; + return loc; +} + +- (void) dealloc +{ + [extractor release]; [extractorClassName release]; - [blobTablePattern release]; - [quickTablePattern release]; - [fields release]; - [folderQualifier release]; + [blobTablePattern release]; + [quickTablePattern release]; + [fields release]; + [folderQualifier release]; [super dealloc]; } /* operations */ -- (NSString *)blobTableNameForFolder:(GCSFolder *)_folder { +- (NSString *) blobTableNameForFolder: (GCSFolder *) _folder +{ return [blobTablePattern - stringByReplacingVariablesWithBindings:_folder]; -} -- (NSString *)quickTableNameForFolder:(GCSFolder *)_folder { - return [quickTablePattern - stringByReplacingVariablesWithBindings:_folder]; + stringByReplacingVariablesWithBindings:_folder]; } -- (EOQualifier *)qualifierForFolder:(GCSFolder *)_folder { - NSArray *keys; +- (NSString *) quickTableNameForFolder: (GCSFolder *) _folder +{ + return [quickTablePattern + stringByReplacingVariablesWithBindings:_folder]; +} + +- (EOQualifier *) qualifierForFolder: (GCSFolder *) _folder +{ + NSArray *keys; NSDictionary *bindings; - + keys = [[folderQualifier allQualifierKeys] allObjects]; if ([keys count] == 0) return folderQualifier; bindings = [_folder valuesForKeys:keys]; return [folderQualifier qualifierWithBindings:bindings - requiresAllVariables:NO]; + requiresAllVariables:NO]; } /* generating SQL */ -- (NSString *)sqlQuickCreateWithTableName:(NSString *)_tabName { +- (NSString *) sqlQuickCreateWithTableName: (NSString *) _tabName +{ NSMutableString *sql; unsigned i, count; - - sql = [NSMutableString stringWithCapacity:512]; - [sql appendString:@"CREATE TABLE "]; - [sql appendString:_tabName]; - [sql appendString:@" (\n"]; - + + sql = [NSMutableString stringWithFormat: @"CREATE TABLE %@ (", _tabName]; count = [fields count]; - for (i = 0; i < count; i++) { - if (i > 0) [sql appendString:@",\n"]; - - [sql appendString:@" "]; - [sql appendString:[[fields objectAtIndex:i] sqlCreateSection]]; - } - + for (i = 0; i < count; i++) + { + if (i > 0) [sql appendString:@", "]; + [sql appendFormat: @" %@", [[fields objectAtIndex:i] sqlCreateSection]]; + } [sql appendString:@"\n)"]; - + return sql; } /* quick support */ -- (GCSFieldExtractor *)quickExtractor { +- (GCSFieldExtractor *) quickExtractor +{ Class clazz; - - if (extractor != nil) { - return [extractor isNotNull] - ? extractor : (GCSFieldExtractor *)nil; - } + GCSFieldExtractor *quickExtractor; - clazz = extractorClassName - ? NSClassFromString(extractorClassName) - : [GCSFieldExtractor class]; - if (clazz == Nil) { - [self logWithFormat:@"ERROR: did not find field extractor class!"]; - return nil; - } - - if ((extractor = [[clazz alloc] init]) == nil) { - [self logWithFormat:@"ERROR: could not create field extractor of class %@", - clazz]; - return nil; - } + if (!extractor) + { + clazz = (extractorClassName + ? NSClassFromString (extractorClassName) + : [GCSFieldExtractor class]); + if (clazz) + { + extractor = [clazz new]; + if (!extractor) + [self logWithFormat:@"ERROR: could not create field extractor of class %@", + clazz]; + } + else + [self logWithFormat:@"ERROR: did not find field extractor class!"]; + } + if ([extractor isNotNull]) + quickExtractor = extractor; + else + quickExtractor = nil; + return extractor; } @@ -191,20 +207,21 @@ /* description */ -- (NSString *)description { +- (NSString *) description +{ NSMutableString *ms; ms = [NSMutableString stringWithCapacity:256]; [ms appendFormat:@"<0x%p[%@]:", self, NSStringFromClass([self class])]; - [ms appendFormat:@" blobtable='%@'", blobTablePattern]; + [ms appendFormat:@" blobtable='%@'", blobTablePattern]; [ms appendFormat:@" quicktable='%@'", quickTablePattern]; - [ms appendFormat:@" fields=%@", fields]; - [ms appendFormat:@" extractor=%@", extractorClassName]; - + [ms appendFormat:@" fields=%@", fields]; + [ms appendFormat:@" extractor=%@", extractorClassName]; + if (folderQualifier) [ms appendFormat:@" qualifier=%@", folderQualifier]; - + [ms appendString:@">"]; return ms; } diff --git a/SOPE/NGCards/ChangeLog b/SOPE/NGCards/ChangeLog index ed8f6fcdc..330b308a8 100644 --- a/SOPE/NGCards/ChangeLog +++ b/SOPE/NGCards/ChangeLog @@ -1,3 +1,19 @@ +2009-03-24 Wolfgang Sourdeau + + * iCalWeeklyRecurrenceCalculator.m + ([iCalWeeklyRecurrenceCalculator + -recurrenceRangesWithinCalendarDateRange:_r]): same as below. + + * iCalDailyRecurrenceCalculator.m ([iCalDailyRecurrenceCalculator + -recurrenceRangesWithinCalendarDateRange:_r]): autorelease + currentStartDate when instantiated from a copy of firDate, to + avoid a leak. + +2009-03-18 Francis Lachapelle + + * iCalDateTime.m ([iCalDateTime -dateTime]): when not defined, the + timezone is now guessed from the date of the current object. + 2009-02-06 Wolfgang Sourdeau * CardElement.m ([CardElement -setParent:aParent]): no longer diff --git a/SOPE/NGCards/iCalDailyRecurrenceCalculator.m b/SOPE/NGCards/iCalDailyRecurrenceCalculator.m index 7cd4d6849..233f531e1 100644 --- a/SOPE/NGCards/iCalDailyRecurrenceCalculator.m +++ b/SOPE/NGCards/iCalDailyRecurrenceCalculator.m @@ -80,6 +80,7 @@ } currentStartDate = [firStart copy]; + [currentStartDate autorelease]; ranges = [NSMutableArray array]; i = 1; diff --git a/SOPE/NGCards/iCalWeeklyRecurrenceCalculator.m b/SOPE/NGCards/iCalWeeklyRecurrenceCalculator.m index f5303deaf..6b673464e 100644 --- a/SOPE/NGCards/iCalWeeklyRecurrenceCalculator.m +++ b/SOPE/NGCards/iCalWeeklyRecurrenceCalculator.m @@ -87,6 +87,7 @@ } currentStartDate = [firStart copy]; + [currentStartDate autorelease]; ranges = [NSMutableArray array]; byDayMask = [rrule byDayMask]; i = 1; diff --git a/SOPE/NGCards/versitCardsSaxDriver/ChangeLog b/SOPE/NGCards/versitCardsSaxDriver/ChangeLog index a39b14061..f166451be 100644 --- a/SOPE/NGCards/versitCardsSaxDriver/ChangeLog +++ b/SOPE/NGCards/versitCardsSaxDriver/ChangeLog @@ -1,3 +1,7 @@ +2009-03-24 Wolfgang Sourdeau + + * VSStringFormatter.[hm]: removed useless module. + 2007-08-27 Wolfgang Sourdeau * VSSaxDriver.m ([VSSaxDriver diff --git a/SOPE/NGCards/versitCardsSaxDriver/GNUmakefile b/SOPE/NGCards/versitCardsSaxDriver/GNUmakefile index b28f46d96..edb6e1097 100644 --- a/SOPE/NGCards/versitCardsSaxDriver/GNUmakefile +++ b/SOPE/NGCards/versitCardsSaxDriver/GNUmakefile @@ -14,8 +14,7 @@ versitCardsSaxDriver_PCH_FILE = common.h versitCardsSaxDriver_OBJC_FILES = \ VSSaxDriver.m \ - VSCardSaxDriver.m \ - VSStringFormatter.m \ + VSCardSaxDriver.m versitCardsSaxDriver_RESOURCE_FILES = bundle-info.plist diff --git a/SOPE/NGCards/versitCardsSaxDriver/VSSaxDriver.m b/SOPE/NGCards/versitCardsSaxDriver/VSSaxDriver.m index 22ad7653c..38ff8bffa 100644 --- a/SOPE/NGCards/versitCardsSaxDriver/VSSaxDriver.m +++ b/SOPE/NGCards/versitCardsSaxDriver/VSSaxDriver.m @@ -29,7 +29,6 @@ are not expected in a sax handler... this is all wrong. */ #import "VSSaxDriver.h" -#import "VSStringFormatter.h" #import #import #import @@ -164,8 +163,6 @@ static NSCharacterSet *colonAndSemicolonCharSet = nil; static NSCharacterSet *colonSemicolonAndDquoteCharSet = nil; static NSCharacterSet *whitespaceCharSet = nil; -static VSStringFormatter *stringFormatter = nil; - + (void) initialize { static BOOL didInit = NO; @@ -190,8 +187,6 @@ static VSStringFormatter *stringFormatter = nil; [[NSCharacterSet characterSetWithCharactersInString: @":;\""] retain]; whitespaceCharSet = [[NSCharacterSet whitespaceCharacterSet] retain]; - - stringFormatter = [VSStringFormatter sharedFormatter]; } - (id) init { @@ -382,7 +377,6 @@ static VSStringFormatter *stringFormatter = nil; *attr_ = attrName; *value_ = [attrValue unescapedFromCard]; -// *value_ = [stringFormatter stringByUnescapingRFC2445Text: attrValue]; } - (SaxAttributes *) _mapAttrs: (NSArray *) _attrs diff --git a/SOPE/NGCards/versitCardsSaxDriver/VSStringFormatter.h b/SOPE/NGCards/versitCardsSaxDriver/VSStringFormatter.h deleted file mode 100644 index 13d901203..000000000 --- a/SOPE/NGCards/versitCardsSaxDriver/VSStringFormatter.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - Copyright (C) 2004-2005 OpenGroupware.org - - This file is part of versitCardsSaxDriver, written for the OpenGroupware.org - project (OGo). - - SOPE is free software; you can redistribute it and/or modify it under - the terms of the GNU Lesser General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - SOPE is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with SOPE; see the file COPYING. If not, write to the - Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. - */ - - -#ifndef __VSStringFormatter_H_ -#define __VSStringFormatter_H_ - -#import - -@interface VSStringFormatter : NSObject -{ -} - -+ (id)sharedFormatter; -- (NSString *)stringByUnescapingRFC2445Text:(NSString *)_s; - -@end - -#endif /* __VSStringFormatter_H_ */ diff --git a/SOPE/NGCards/versitCardsSaxDriver/VSStringFormatter.m b/SOPE/NGCards/versitCardsSaxDriver/VSStringFormatter.m deleted file mode 100644 index 5535e5ebb..000000000 --- a/SOPE/NGCards/versitCardsSaxDriver/VSStringFormatter.m +++ /dev/null @@ -1,94 +0,0 @@ -/* - Copyright (C) 2004-2005 OpenGroupware.org - - This file is part of versitCardsSaxDriver, written for the OpenGroupware.org - project (OGo). - - SOPE is free software; you can redistribute it and/or modify it under - the terms of the GNU Lesser General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - SOPE is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with SOPE; see the file COPYING. If not, write to the - Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. -*/ - -#include "VSStringFormatter.h" -#include "common.h" - -@implementation VSStringFormatter - -static NSCharacterSet *escSet = nil; - -+ (void)initialize { - static BOOL didInit = NO; - - if(didInit) - return; - - didInit = YES; - escSet = [[NSCharacterSet characterSetWithCharactersInString:@"\\"] retain]; -} - -+ (id)sharedFormatter { - static id sharedInstance = nil; - if(!sharedInstance) { - sharedInstance = [[self alloc] init]; - } - return sharedInstance; -} - -- (NSString *)stringByUnescapingRFC2445Text:(NSString *)_s { - NSMutableString *safeString; - unsigned length; - NSRange prevRange, escRange; - NSRange todoRange; - BOOL needsEscaping; - - length = [_s length]; - prevRange = NSMakeRange(0, length); - escRange = [_s rangeOfCharacterFromSet:escSet options:0 range:prevRange]; - - needsEscaping = escRange.length > 0 ? YES : NO; - if (!needsEscaping) - return _s; /* cheap */ - - safeString = [NSMutableString stringWithCapacity:length]; - - do { - prevRange.length = escRange.location - prevRange.location; - if (prevRange.length > 0) - [safeString appendString:[_s substringWithRange:prevRange]]; - - /* test edge case */ - if(NSMaxRange(escRange) < length) { - unichar c = [_s characterAtIndex:escRange.location + 1]; - if(c == 'n' || c == 'N') { - [safeString appendString:@"\n"]; - escRange.length += 1; /* skip the 'n' */ - } - } - - prevRange.location = NSMaxRange(escRange); - todoRange.location = prevRange.location; - todoRange.length = length - prevRange.location; - escRange = [_s rangeOfCharacterFromSet:escSet - options:0 - range:todoRange]; - } - while(escRange.length > 0); - - if (todoRange.length > 0) - [safeString appendString:[_s substringWithRange:todoRange]]; - - return safeString; -} - -@end /* VSStringFormatter */ diff --git a/SOPE/sope-debugleaks.diff b/SOPE/sope-debugleaks.diff new file mode 100644 index 000000000..39cea24f8 --- /dev/null +++ b/SOPE/sope-debugleaks.diff @@ -0,0 +1,29 @@ +Index: sope-appserver/NGObjWeb/WOCoreApplication.m +=================================================================== +--- sope-appserver/NGObjWeb/WOCoreApplication.m (révision 1632) ++++ sope-appserver/NGObjWeb/WOCoreApplication.m (copie de travail) +@@ -157,6 +157,10 @@ + NSUserDefaults *ud; + NGLoggerManager *lm; + ++ GSDebugAllocationActive (YES); ++ GSDebugAllocationList (NO); ++ ++// GSDebugAllocationActiveRecordingObjects + [self registerUserDefaults]; + ud = [NSUserDefaults standardUserDefaults]; + lm = [NGLoggerManager defaultLoggerManager]; +@@ -535,10 +539,12 @@ + + if ([self isTerminating]) + break; +- ++ + [self activateApplication]; + [loop runMode:NSDefaultRunLoopMode beforeDate:limitDate]; + [self deactivateApplication]; ++ ++ NSLog (@"allocated classes:\n%s", GSDebugAllocationList (YES)); + } + + [pool release]; diff --git a/SOPE/sope-gsmake2.diff b/SOPE/sope-gsmake2.diff index 0e55cdc68..a2172e35f 100644 --- a/SOPE/sope-gsmake2.diff +++ b/SOPE/sope-gsmake2.diff @@ -1,6 +1,6 @@ Index: configure =================================================================== ---- configure (révision 1608) +--- configure (révision 1632) +++ configure (copie de travail) @@ -1,4 +1,4 @@ -#!/bin/bash @@ -316,7 +316,7 @@ Index: configure fi Index: sope-ldap/samples/GNUmakefile =================================================================== ---- sope-ldap/samples/GNUmakefile (révision 1608) +--- sope-ldap/samples/GNUmakefile (révision 1632) +++ sope-ldap/samples/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -345,7 +345,7 @@ Index: sope-ldap/samples/GNUmakefile --include fhs.make Index: sope-ldap/NGLdap/GNUmakefile =================================================================== ---- sope-ldap/NGLdap/GNUmakefile (révision 1608) +--- sope-ldap/NGLdap/GNUmakefile (révision 1632) +++ sope-ldap/NGLdap/GNUmakefile (copie de travail) @@ -1,11 +1,9 @@ # GNUstep makefile @@ -386,7 +386,7 @@ Index: sope-ldap/NGLdap/GNUmakefile --include fhs.make Index: sope-ldap/GNUmakefile =================================================================== ---- sope-ldap/GNUmakefile (révision 1608) +--- sope-ldap/GNUmakefile (révision 1632) +++ sope-ldap/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -398,7 +398,7 @@ Index: sope-ldap/GNUmakefile PACKAGE_NAME=sope-ldap Index: GNUmakefile =================================================================== ---- GNUmakefile (révision 1608) +--- GNUmakefile (révision 1632) +++ GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -419,7 +419,7 @@ Index: GNUmakefile distclean :: Index: sope-gdl1/PostgreSQL/GNUmakefile.preamble =================================================================== ---- sope-gdl1/PostgreSQL/GNUmakefile.preamble (révision 1608) +--- sope-gdl1/PostgreSQL/GNUmakefile.preamble (révision 1632) +++ sope-gdl1/PostgreSQL/GNUmakefile.preamble (copie de travail) @@ -27,7 +27,7 @@ ifeq ($(frameworks),yes) @@ -432,7 +432,7 @@ Index: sope-gdl1/PostgreSQL/GNUmakefile.preamble Index: sope-gdl1/PostgreSQL/GNUmakefile =================================================================== ---- sope-gdl1/PostgreSQL/GNUmakefile (révision 1608) +--- sope-gdl1/PostgreSQL/GNUmakefile (révision 1632) +++ sope-gdl1/PostgreSQL/GNUmakefile (copie de travail) @@ -22,7 +22,7 @@ # If not, write to the Free Software Foundation, @@ -450,7 +450,7 @@ Index: sope-gdl1/PostgreSQL/GNUmakefile -include fhs.make Index: sope-gdl1/SQLite3/GNUmakefile.preamble =================================================================== ---- sope-gdl1/SQLite3/GNUmakefile.preamble (révision 1608) +--- sope-gdl1/SQLite3/GNUmakefile.preamble (révision 1632) +++ sope-gdl1/SQLite3/GNUmakefile.preamble (copie de travail) @@ -27,7 +27,7 @@ ifeq ($(frameworks),yes) @@ -463,7 +463,7 @@ Index: sope-gdl1/SQLite3/GNUmakefile.preamble Index: sope-gdl1/SQLite3/GNUmakefile =================================================================== ---- sope-gdl1/SQLite3/GNUmakefile (révision 1608) +--- sope-gdl1/SQLite3/GNUmakefile (révision 1632) +++ sope-gdl1/SQLite3/GNUmakefile (copie de travail) @@ -22,7 +22,7 @@ # If not, write to the Free Software Foundation, @@ -481,7 +481,7 @@ Index: sope-gdl1/SQLite3/GNUmakefile -include fhs.make Index: sope-gdl1/FrontBase2/GNUmakefile =================================================================== ---- sope-gdl1/FrontBase2/GNUmakefile (révision 1608) +--- sope-gdl1/FrontBase2/GNUmakefile (révision 1632) +++ sope-gdl1/FrontBase2/GNUmakefile (copie de travail) @@ -22,7 +22,7 @@ # If not, write to the Free Software Foundation, @@ -512,7 +512,7 @@ Index: sope-gdl1/FrontBase2/GNUmakefile BUNDLE_EXTENSION = .gdladaptor Index: sope-gdl1/MySQL/GNUmakefile.preamble =================================================================== ---- sope-gdl1/MySQL/GNUmakefile.preamble (révision 1608) +--- sope-gdl1/MySQL/GNUmakefile.preamble (révision 1632) +++ sope-gdl1/MySQL/GNUmakefile.preamble (copie de travail) @@ -27,7 +27,7 @@ ifeq ($(frameworks),yes) @@ -525,7 +525,7 @@ Index: sope-gdl1/MySQL/GNUmakefile.preamble Index: sope-gdl1/MySQL/GNUmakefile =================================================================== ---- sope-gdl1/MySQL/GNUmakefile (révision 1608) +--- sope-gdl1/MySQL/GNUmakefile (révision 1632) +++ sope-gdl1/MySQL/GNUmakefile (copie de travail) @@ -22,7 +22,7 @@ # If not, write to the Free Software Foundation, @@ -543,7 +543,7 @@ Index: sope-gdl1/MySQL/GNUmakefile -include fhs.make Index: sope-gdl1/GNUmakefile =================================================================== ---- sope-gdl1/GNUmakefile (révision 1608) +--- sope-gdl1/GNUmakefile (révision 1632) +++ sope-gdl1/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -555,7 +555,7 @@ Index: sope-gdl1/GNUmakefile PACKAGE_NAME=sope-gdl1 Index: sope-gdl1/GDLAccess/GNUmakefile.preamble =================================================================== ---- sope-gdl1/GDLAccess/GNUmakefile.preamble (révision 1608) +--- sope-gdl1/GDLAccess/GNUmakefile.preamble (révision 1632) +++ sope-gdl1/GDLAccess/GNUmakefile.preamble (copie de travail) @@ -21,17 +21,12 @@ -I$(SOPE_ROOT)/sope-core/NGExtensions/ @@ -579,7 +579,7 @@ Index: sope-gdl1/GDLAccess/GNUmakefile.preamble libGDLAccess_LIBRARIES_DEPEND_UPON += -lEOControl Index: sope-gdl1/GDLAccess/GNUmakefile =================================================================== ---- sope-gdl1/GDLAccess/GNUmakefile (révision 1608) +--- sope-gdl1/GDLAccess/GNUmakefile (révision 1632) +++ sope-gdl1/GDLAccess/GNUmakefile (copie de travail) @@ -1,12 +1,10 @@ # GNUstep makefile @@ -631,7 +631,7 @@ Index: sope-gdl1/GDLAccess/GNUmakefile -include fhs.make Index: sope-gdl1/GDLAccess/EOAdaptor.h =================================================================== ---- sope-gdl1/GDLAccess/EOAdaptor.h (révision 1608) +--- sope-gdl1/GDLAccess/EOAdaptor.h (révision 1632) +++ sope-gdl1/GDLAccess/EOAdaptor.h (copie de travail) @@ -62,11 +62,14 @@ + (id)adaptorWithModel:(EOModel *)aModel; @@ -650,7 +650,7 @@ Index: sope-gdl1/GDLAccess/EOAdaptor.h - (NSDictionary*)connectionDictionary; Index: sope-gdl1/GDLAccess/EOAdaptor.m =================================================================== ---- sope-gdl1/GDLAccess/EOAdaptor.m (révision 1608) +--- sope-gdl1/GDLAccess/EOAdaptor.m (révision 1632) +++ sope-gdl1/GDLAccess/EOAdaptor.m (copie de travail) @@ -53,14 +53,23 @@ + (NSArray *)adaptorSearchPathes { @@ -718,7 +718,7 @@ Index: sope-gdl1/GDLAccess/EOAdaptor.m "Database URLs" Index: sope-gdl1/GDLAccess/FoundationExt/GNUmakefile =================================================================== ---- sope-gdl1/GDLAccess/FoundationExt/GNUmakefile (révision 1608) +--- sope-gdl1/GDLAccess/FoundationExt/GNUmakefile (révision 1632) +++ sope-gdl1/GDLAccess/FoundationExt/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -730,7 +730,7 @@ Index: sope-gdl1/GDLAccess/FoundationExt/GNUmakefile include ../Version Index: sope-gdl1/GDLAccess/common.h =================================================================== ---- sope-gdl1/GDLAccess/common.h (révision 1608) +--- sope-gdl1/GDLAccess/common.h (révision 1632) +++ sope-gdl1/GDLAccess/common.h (copie de travail) @@ -42,7 +42,7 @@ #import @@ -743,7 +743,7 @@ Index: sope-gdl1/GDLAccess/common.h Index: sope-gdl1/Oracle8/GNUmakefile =================================================================== ---- sope-gdl1/Oracle8/GNUmakefile (révision 1608) +--- sope-gdl1/Oracle8/GNUmakefile (révision 1632) +++ sope-gdl1/Oracle8/GNUmakefile (copie de travail) @@ -19,7 +19,7 @@ # License along with this library; if not, write to the Free Software @@ -765,7 +765,7 @@ Index: sope-gdl1/Oracle8/GNUmakefile Oracle8_OBJC_FILES = \ Index: sope-mime/NGImap4/GNUmakefile =================================================================== ---- sope-mime/NGImap4/GNUmakefile (révision 1608) +--- sope-mime/NGImap4/GNUmakefile (révision 1632) +++ sope-mime/NGImap4/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -789,7 +789,7 @@ Index: sope-mime/NGImap4/GNUmakefile else Index: sope-mime/samples/GNUmakefile =================================================================== ---- sope-mime/samples/GNUmakefile (révision 1608) +--- sope-mime/samples/GNUmakefile (révision 1632) +++ sope-mime/samples/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -827,7 +827,7 @@ Index: sope-mime/samples/GNUmakefile --include fhs.make Index: sope-mime/NGMail/GNUmakefile =================================================================== ---- sope-mime/NGMail/GNUmakefile (révision 1608) +--- sope-mime/NGMail/GNUmakefile (révision 1632) +++ sope-mime/NGMail/GNUmakefile (copie de travail) @@ -1,10 +1,8 @@ # GNUstep makefile @@ -853,7 +853,7 @@ Index: sope-mime/NGMail/GNUmakefile else Index: sope-mime/GNUmakefile =================================================================== ---- sope-mime/GNUmakefile (révision 1608) +--- sope-mime/GNUmakefile (révision 1632) +++ sope-mime/GNUmakefile (copie de travail) @@ -1,11 +1,9 @@ # GNUstep makefile @@ -898,7 +898,7 @@ Index: sope-mime/GNUmakefile # package Index: sope-mime/NGMime/GNUmakefile.preamble =================================================================== ---- sope-mime/NGMime/GNUmakefile.preamble (révision 1608) +--- sope-mime/NGMime/GNUmakefile.preamble (révision 1632) +++ sope-mime/NGMime/GNUmakefile.preamble (copie de travail) @@ -5,6 +5,15 @@ -DLIBRARY_MINOR_VERSION=${MINOR_VERSION} \ @@ -918,7 +918,7 @@ Index: sope-mime/NGMime/GNUmakefile.preamble -I../../sope-core/NGStreams/ \ Index: sope-mime/NGMime/GNUmakefile =================================================================== ---- sope-mime/NGMime/GNUmakefile (révision 1608) +--- sope-mime/NGMime/GNUmakefile (révision 1632) +++ sope-mime/NGMime/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -939,7 +939,7 @@ Index: sope-mime/NGMime/GNUmakefile -include GNUmakefile.postamble Index: sope-core/NGExtensions/NGExtensions/NGResourceLocator.h =================================================================== ---- sope-core/NGExtensions/NGExtensions/NGResourceLocator.h (révision 1608) +--- sope-core/NGExtensions/NGExtensions/NGResourceLocator.h (révision 1632) +++ sope-core/NGExtensions/NGExtensions/NGResourceLocator.h (copie de travail) @@ -52,23 +52,54 @@ int reserved:29; @@ -999,7 +999,7 @@ Index: sope-core/NGExtensions/NGExtensions/NGResourceLocator.h Index: sope-core/NGExtensions/NGBundleManager.m =================================================================== ---- sope-core/NGExtensions/NGBundleManager.m (révision 1608) +--- sope-core/NGExtensions/NGBundleManager.m (révision 1632) +++ sope-core/NGExtensions/NGBundleManager.m (copie de travail) @@ -332,10 +332,7 @@ } @@ -1036,7 +1036,7 @@ Index: sope-core/NGExtensions/NGBundleManager.m - (void)_setupBundleSearchPathes { Index: sope-core/NGExtensions/FdExt.subproj/GNUmakefile =================================================================== ---- sope-core/NGExtensions/FdExt.subproj/GNUmakefile (révision 1608) +--- sope-core/NGExtensions/FdExt.subproj/GNUmakefile (révision 1632) +++ sope-core/NGExtensions/FdExt.subproj/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -1048,7 +1048,7 @@ Index: sope-core/NGExtensions/FdExt.subproj/GNUmakefile SUBPROJECT_NAME = FdExt Index: sope-core/NGExtensions/XmlExt.subproj/GNUmakefile =================================================================== ---- sope-core/NGExtensions/XmlExt.subproj/GNUmakefile (révision 1608) +--- sope-core/NGExtensions/XmlExt.subproj/GNUmakefile (révision 1632) +++ sope-core/NGExtensions/XmlExt.subproj/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -1060,7 +1060,7 @@ Index: sope-core/NGExtensions/XmlExt.subproj/GNUmakefile SUBPROJECT_NAME = XmlExt Index: sope-core/NGExtensions/EOExt.subproj/GNUmakefile =================================================================== ---- sope-core/NGExtensions/EOExt.subproj/GNUmakefile (révision 1608) +--- sope-core/NGExtensions/EOExt.subproj/GNUmakefile (révision 1632) +++ sope-core/NGExtensions/EOExt.subproj/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -1072,7 +1072,7 @@ Index: sope-core/NGExtensions/EOExt.subproj/GNUmakefile SUBPROJECT_NAME = EOExt Index: sope-core/NGExtensions/GNUmakefile =================================================================== ---- sope-core/NGExtensions/GNUmakefile (révision 1608) +--- sope-core/NGExtensions/GNUmakefile (révision 1632) +++ sope-core/NGExtensions/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -1108,7 +1108,7 @@ Index: sope-core/NGExtensions/GNUmakefile --include fhs.make Index: sope-core/NGExtensions/NGResourceLocator.m =================================================================== ---- sope-core/NGExtensions/NGResourceLocator.m (révision 1608) +--- sope-core/NGExtensions/NGResourceLocator.m (révision 1632) +++ sope-core/NGExtensions/NGResourceLocator.m (copie de travail) @@ -43,7 +43,11 @@ return self; @@ -1166,7 +1166,7 @@ Index: sope-core/NGExtensions/NGResourceLocator.m e = ([self->fhsSubPath length] > 0) Index: sope-core/NGExtensions/NGLogging.subproj/GNUmakefile =================================================================== ---- sope-core/NGExtensions/NGLogging.subproj/GNUmakefile (révision 1608) +--- sope-core/NGExtensions/NGLogging.subproj/GNUmakefile (révision 1632) +++ sope-core/NGExtensions/NGLogging.subproj/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -1178,7 +1178,7 @@ Index: sope-core/NGExtensions/NGLogging.subproj/GNUmakefile SUBPROJECT_NAME = NGLogging Index: sope-core/NGExtensions/NGRuleEngine.subproj/GNUmakefile =================================================================== ---- sope-core/NGExtensions/NGRuleEngine.subproj/GNUmakefile (révision 1608) +--- sope-core/NGExtensions/NGRuleEngine.subproj/GNUmakefile (révision 1632) +++ sope-core/NGExtensions/NGRuleEngine.subproj/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -1190,7 +1190,7 @@ Index: sope-core/NGExtensions/NGRuleEngine.subproj/GNUmakefile SUBPROJECT_NAME = NGRuleEngine Index: sope-core/GNUmakefile =================================================================== ---- sope-core/GNUmakefile (révision 1608) +--- sope-core/GNUmakefile (révision 1632) +++ sope-core/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -1208,7 +1208,7 @@ Index: sope-core/GNUmakefile + ../maintenance/make-osxpkg.sh $(PACKAGE_NAME) Index: sope-core/NGStreams/GNUmakefile.preamble =================================================================== ---- sope-core/NGStreams/GNUmakefile.preamble (révision 1608) +--- sope-core/NGStreams/GNUmakefile.preamble (révision 1632) +++ sope-core/NGStreams/GNUmakefile.preamble (copie de travail) @@ -38,7 +38,11 @@ endif @@ -1224,7 +1224,7 @@ Index: sope-core/NGStreams/GNUmakefile.preamble endif Index: sope-core/NGStreams/GNUmakefile =================================================================== ---- sope-core/NGStreams/GNUmakefile (révision 1608) +--- sope-core/NGStreams/GNUmakefile (révision 1632) +++ sope-core/NGStreams/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -1260,7 +1260,7 @@ Index: sope-core/NGStreams/GNUmakefile --include fhs.make Index: sope-core/samples/GNUmakefile =================================================================== ---- sope-core/samples/GNUmakefile (révision 1608) +--- sope-core/samples/GNUmakefile (révision 1632) +++ sope-core/samples/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -1277,7 +1277,7 @@ Index: sope-core/samples/GNUmakefile --include fhs.make Index: sope-core/EOControl/GNUmakefile =================================================================== ---- sope-core/EOControl/GNUmakefile (révision 1608) +--- sope-core/EOControl/GNUmakefile (révision 1632) +++ sope-core/EOControl/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -1313,7 +1313,7 @@ Index: sope-core/EOControl/GNUmakefile --include fhs.make Index: sope-core/common.make =================================================================== ---- sope-core/common.make (révision 1608) +--- sope-core/common.make (révision 1632) +++ sope-core/common.make (copie de travail) @@ -6,8 +6,6 @@ include $(SKYROOT)/Version @@ -1326,7 +1326,7 @@ Index: sope-core/common.make ADDITIONAL_CPPFLAGS += -D_REENTRANT=1 Index: sope-core/EOCoreData/GNUmakefile =================================================================== ---- sope-core/EOCoreData/GNUmakefile (révision 1608) +--- sope-core/EOCoreData/GNUmakefile (révision 1632) +++ sope-core/EOCoreData/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -1362,7 +1362,7 @@ Index: sope-core/EOCoreData/GNUmakefile --include fhs.make Index: sopex/GNUmakefile =================================================================== ---- sopex/GNUmakefile (révision 1608) +--- sopex/GNUmakefile (révision 1632) +++ sopex/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -1374,7 +1374,7 @@ Index: sopex/GNUmakefile ifeq ($(FOUNDATION_LIB),apple) Index: sopex/SOPEX/GNUmakefile =================================================================== ---- sopex/SOPEX/GNUmakefile (révision 1608) +--- sopex/SOPEX/GNUmakefile (révision 1632) +++ sopex/SOPEX/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -1386,7 +1386,7 @@ Index: sopex/SOPEX/GNUmakefile Index: xmlrpc_call/GNUmakefile =================================================================== ---- xmlrpc_call/GNUmakefile (révision 1608) +--- xmlrpc_call/GNUmakefile (révision 1632) +++ xmlrpc_call/GNUmakefile (copie de travail) @@ -1,10 +1,11 @@ # GNUstep makefile @@ -1411,7 +1411,7 @@ Index: xmlrpc_call/GNUmakefile # do not build a pkg just for this tool Index: xmlrpc_call/GNUmakefile.preamble =================================================================== ---- xmlrpc_call/GNUmakefile.preamble (révision 1608) +--- xmlrpc_call/GNUmakefile.preamble (révision 1632) +++ xmlrpc_call/GNUmakefile.preamble (copie de travail) @@ -1,5 +1,6 @@ # compilation settings @@ -1440,7 +1440,7 @@ Index: xmlrpc_call/GNUmakefile.preamble endif Index: sope-xml/libxmlSAXDriver/GNUmakefile =================================================================== ---- sope-xml/libxmlSAXDriver/GNUmakefile (révision 1608) +--- sope-xml/libxmlSAXDriver/GNUmakefile (révision 1632) +++ sope-xml/libxmlSAXDriver/GNUmakefile (copie de travail) @@ -1,13 +1,13 @@ # GNUstep makefile @@ -1465,7 +1465,7 @@ Index: sope-xml/libxmlSAXDriver/GNUmakefile --include fhs.make Index: sope-xml/DOM/GNUmakefile.preamble =================================================================== ---- sope-xml/DOM/GNUmakefile.preamble (révision 1608) +--- sope-xml/DOM/GNUmakefile.preamble (révision 1632) +++ sope-xml/DOM/GNUmakefile.preamble (copie de travail) @@ -1,10 +1,13 @@ # compilation settings @@ -1485,7 +1485,7 @@ Index: sope-xml/DOM/GNUmakefile.preamble Index: sope-xml/DOM/GNUmakefile =================================================================== ---- sope-xml/DOM/GNUmakefile (révision 1608) +--- sope-xml/DOM/GNUmakefile (révision 1632) +++ sope-xml/DOM/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -1511,7 +1511,7 @@ Index: sope-xml/DOM/GNUmakefile --include fhs.make Index: sope-xml/ChangeLogSaxDriver/GNUmakefile =================================================================== ---- sope-xml/ChangeLogSaxDriver/GNUmakefile (révision 1608) +--- sope-xml/ChangeLogSaxDriver/GNUmakefile (révision 1632) +++ sope-xml/ChangeLogSaxDriver/GNUmakefile (copie de travail) @@ -1,13 +1,13 @@ # GNUstep makefile @@ -1536,7 +1536,7 @@ Index: sope-xml/ChangeLogSaxDriver/GNUmakefile --include fhs.make Index: sope-xml/GNUmakefile =================================================================== ---- sope-xml/GNUmakefile (révision 1608) +--- sope-xml/GNUmakefile (révision 1632) +++ sope-xml/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -1548,7 +1548,7 @@ Index: sope-xml/GNUmakefile PACKAGE_NAME=sope-xml Index: sope-xml/SaxObjC/SaxXMLReaderFactory.m =================================================================== ---- sope-xml/SaxObjC/SaxXMLReaderFactory.m (révision 1608) +--- sope-xml/SaxObjC/SaxXMLReaderFactory.m (révision 1632) +++ sope-xml/SaxObjC/SaxXMLReaderFactory.m (copie de travail) @@ -137,11 +137,19 @@ @@ -1594,7 +1594,7 @@ Index: sope-xml/SaxObjC/SaxXMLReaderFactory.m #endif Index: sope-xml/SaxObjC/SaxObjectModel.h =================================================================== ---- sope-xml/SaxObjC/SaxObjectModel.h (révision 1608) +--- sope-xml/SaxObjC/SaxObjectModel.h (révision 1632) +++ sope-xml/SaxObjC/SaxObjectModel.h (copie de travail) @@ -34,6 +34,7 @@ @@ -1606,7 +1606,7 @@ Index: sope-xml/SaxObjC/SaxObjectModel.h Index: sope-xml/SaxObjC/SaxObjectModel.m =================================================================== ---- sope-xml/SaxObjC/SaxObjectModel.m (révision 1608) +--- sope-xml/SaxObjC/SaxObjectModel.m (révision 1632) +++ sope-xml/SaxObjC/SaxObjectModel.m (copie de travail) @@ -67,12 +67,12 @@ if (searchPathes == nil) { @@ -1652,7 +1652,7 @@ Index: sope-xml/SaxObjC/SaxObjectModel.m NSEnumerator *pathes; Index: sope-xml/SaxObjC/GNUmakefile.preamble =================================================================== ---- sope-xml/SaxObjC/GNUmakefile.preamble (révision 1608) +--- sope-xml/SaxObjC/GNUmakefile.preamble (révision 1632) +++ sope-xml/SaxObjC/GNUmakefile.preamble (copie de travail) @@ -1,9 +1,12 @@ # compilation settings @@ -1682,7 +1682,7 @@ Index: sope-xml/SaxObjC/GNUmakefile.preamble # Apple Index: sope-xml/SaxObjC/GNUmakefile =================================================================== ---- sope-xml/SaxObjC/GNUmakefile (révision 1608) +--- sope-xml/SaxObjC/GNUmakefile (révision 1632) +++ sope-xml/SaxObjC/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -1708,7 +1708,7 @@ Index: sope-xml/SaxObjC/GNUmakefile --include fhs.make Index: sope-xml/common.make =================================================================== ---- sope-xml/common.make (révision 1608) +--- sope-xml/common.make (révision 1632) +++ sope-xml/common.make (copie de travail) @@ -1,13 +1,7 @@ # GNUstep makefile @@ -1726,7 +1726,7 @@ Index: sope-xml/common.make ADDITIONAL_INCLUDE_DIRS += -I.. Index: sope-xml/samples/PlistSaxDriver/GNUmakefile =================================================================== ---- sope-xml/samples/PlistSaxDriver/GNUmakefile (révision 1608) +--- sope-xml/samples/PlistSaxDriver/GNUmakefile (révision 1632) +++ sope-xml/samples/PlistSaxDriver/GNUmakefile (copie de travail) @@ -1,11 +1,11 @@ # GNUstep Makefile @@ -1744,7 +1744,7 @@ Index: sope-xml/samples/PlistSaxDriver/GNUmakefile PlistSaxDriver.m Index: sope-xml/samples/GNUmakefile =================================================================== ---- sope-xml/samples/GNUmakefile (révision 1608) +--- sope-xml/samples/GNUmakefile (révision 1632) +++ sope-xml/samples/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -1778,7 +1778,7 @@ Index: sope-xml/samples/GNUmakefile --include fhs.make Index: sope-xml/samples/GNUmakefile.preamble =================================================================== ---- sope-xml/samples/GNUmakefile.preamble (révision 1608) +--- sope-xml/samples/GNUmakefile.preamble (révision 1632) +++ sope-xml/samples/GNUmakefile.preamble (copie de travail) @@ -1,5 +1,6 @@ # compilation settings @@ -1800,7 +1800,7 @@ Index: sope-xml/samples/GNUmakefile.preamble endif Index: sope-xml/XmlRpc/GNUmakefile.preamble =================================================================== ---- sope-xml/XmlRpc/GNUmakefile.preamble (révision 1608) +--- sope-xml/XmlRpc/GNUmakefile.preamble (révision 1632) +++ sope-xml/XmlRpc/GNUmakefile.preamble (copie de travail) @@ -1,10 +1,13 @@ # compilation settings @@ -1820,7 +1820,7 @@ Index: sope-xml/XmlRpc/GNUmakefile.preamble Index: sope-xml/XmlRpc/GNUmakefile =================================================================== ---- sope-xml/XmlRpc/GNUmakefile (révision 1608) +--- sope-xml/XmlRpc/GNUmakefile (révision 1632) +++ sope-xml/XmlRpc/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -1846,7 +1846,7 @@ Index: sope-xml/XmlRpc/GNUmakefile --include fhs.make Index: sope-xml/STXSaxDriver/ExtraSTX/GNUmakefile =================================================================== ---- sope-xml/STXSaxDriver/ExtraSTX/GNUmakefile (révision 1608) +--- sope-xml/STXSaxDriver/ExtraSTX/GNUmakefile (révision 1632) +++ sope-xml/STXSaxDriver/ExtraSTX/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -1858,7 +1858,7 @@ Index: sope-xml/STXSaxDriver/ExtraSTX/GNUmakefile SUBPROJECT_NAME = ExtraSTX Index: sope-xml/STXSaxDriver/GNUmakefile =================================================================== ---- sope-xml/STXSaxDriver/GNUmakefile (révision 1608) +--- sope-xml/STXSaxDriver/GNUmakefile (révision 1632) +++ sope-xml/STXSaxDriver/GNUmakefile (copie de travail) @@ -1,13 +1,13 @@ # GNUstep makefile @@ -1883,7 +1883,7 @@ Index: sope-xml/STXSaxDriver/GNUmakefile --include fhs.make Index: sope-xml/STXSaxDriver/Model/GNUmakefile =================================================================== ---- sope-xml/STXSaxDriver/Model/GNUmakefile (révision 1608) +--- sope-xml/STXSaxDriver/Model/GNUmakefile (révision 1632) +++ sope-xml/STXSaxDriver/Model/GNUmakefile (copie de travail) @@ -6,7 +6,7 @@ # Date: 24 November 2003 @@ -1896,7 +1896,7 @@ Index: sope-xml/STXSaxDriver/Model/GNUmakefile SUBPROJECT_NAME = Model Index: sope-xml/pyxSAXDriver/GNUmakefile =================================================================== ---- sope-xml/pyxSAXDriver/GNUmakefile (révision 1608) +--- sope-xml/pyxSAXDriver/GNUmakefile (révision 1632) +++ sope-xml/pyxSAXDriver/GNUmakefile (copie de travail) @@ -1,17 +1,16 @@ # GNUstep makefile @@ -1920,7 +1920,7 @@ Index: sope-xml/pyxSAXDriver/GNUmakefile --include fhs.make Index: sope-appserver/GNUmakefile =================================================================== ---- sope-appserver/GNUmakefile (révision 1608) +--- sope-appserver/GNUmakefile (révision 1632) +++ sope-appserver/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -1930,17 +1930,7 @@ Index: sope-appserver/GNUmakefile include $(GNUSTEP_MAKEFILES)/common.make PACKAGE_NAME=sope-appserver -@@ -13,7 +13,8 @@ - WOXML \ - SoOFS \ - NGXmlRpc \ -- WEPrototype -+ WEPrototype \ -+ mod_ngobjweb - - - ifeq ($(frameworks),yes) -@@ -38,4 +39,4 @@ +@@ -38,4 +38,4 @@ # package macosx-pkg :: all @@ -1948,7 +1938,7 @@ Index: sope-appserver/GNUmakefile + ../maintenance/make-osxpkg.sh $(PACKAGE_NAME) Index: sope-appserver/SoOFS/GNUmakefile.preamble =================================================================== ---- sope-appserver/SoOFS/GNUmakefile.preamble (révision 1608) +--- sope-appserver/SoOFS/GNUmakefile.preamble (révision 1632) +++ sope-appserver/SoOFS/GNUmakefile.preamble (copie de travail) @@ -76,17 +76,9 @@ $(foreach dir,$(DEP_DIRS),-F$(GNUSTEP_BUILD_DIR)/$(dir)) @@ -1979,7 +1969,7 @@ Index: sope-appserver/SoOFS/GNUmakefile.preamble endif Index: sope-appserver/SoOFS/GNUmakefile =================================================================== ---- sope-appserver/SoOFS/GNUmakefile (révision 1608) +--- sope-appserver/SoOFS/GNUmakefile (révision 1632) +++ sope-appserver/SoOFS/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -2029,7 +2019,7 @@ Index: sope-appserver/SoOFS/GNUmakefile --include fhs.make Index: sope-appserver/NGXmlRpc/GNUmakefile =================================================================== ---- sope-appserver/NGXmlRpc/GNUmakefile (révision 1608) +--- sope-appserver/NGXmlRpc/GNUmakefile (révision 1632) +++ sope-appserver/NGXmlRpc/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -2066,7 +2056,7 @@ Index: sope-appserver/NGXmlRpc/GNUmakefile --include fhs.make Index: sope-appserver/WEExtensions/GNUmakefile.preamble =================================================================== ---- sope-appserver/WEExtensions/GNUmakefile.preamble (révision 1608) +--- sope-appserver/WEExtensions/GNUmakefile.preamble (révision 1632) +++ sope-appserver/WEExtensions/GNUmakefile.preamble (copie de travail) @@ -21,7 +21,8 @@ cp ../bundle-info.plist .) @@ -2080,7 +2070,7 @@ Index: sope-appserver/WEExtensions/GNUmakefile.preamble Index: sope-appserver/WEExtensions/GNUmakefile =================================================================== ---- sope-appserver/WEExtensions/GNUmakefile (révision 1608) +--- sope-appserver/WEExtensions/GNUmakefile (révision 1632) +++ sope-appserver/WEExtensions/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -2116,7 +2106,7 @@ Index: sope-appserver/WEExtensions/GNUmakefile --include fhs.make Index: sope-appserver/WEExtensions/WEResourceManager.m =================================================================== ---- sope-appserver/WEExtensions/WEResourceManager.m (révision 1608) +--- sope-appserver/WEExtensions/WEResourceManager.m (révision 1632) +++ sope-appserver/WEExtensions/WEResourceManager.m (copie de travail) @@ -53,28 +53,43 @@ @@ -2194,7 +2184,7 @@ Index: sope-appserver/WEExtensions/WEResourceManager.m Index: sope-appserver/WEExtensions/WETableView/GNUmakefile =================================================================== ---- sope-appserver/WEExtensions/WETableView/GNUmakefile (révision 1608) +--- sope-appserver/WEExtensions/WETableView/GNUmakefile (révision 1632) +++ sope-appserver/WEExtensions/WETableView/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -2206,7 +2196,7 @@ Index: sope-appserver/WEExtensions/WETableView/GNUmakefile SUBPROJECT_NAME = WETableView Index: sope-appserver/NGObjWeb/WOCoreApplication+Bundle.m =================================================================== ---- sope-appserver/NGObjWeb/WOCoreApplication+Bundle.m (révision 1608) +--- sope-appserver/NGObjWeb/WOCoreApplication+Bundle.m (révision 1632) +++ sope-appserver/NGObjWeb/WOCoreApplication+Bundle.m (copie de travail) @@ -50,8 +50,6 @@ } @@ -2240,7 +2230,7 @@ Index: sope-appserver/NGObjWeb/WOCoreApplication+Bundle.m tmp = [tmp componentsSeparatedByString:@":"]; Index: sope-appserver/NGObjWeb/wobundle-gs.make =================================================================== ---- sope-appserver/NGObjWeb/wobundle-gs.make (révision 1608) +--- sope-appserver/NGObjWeb/wobundle-gs.make (révision 1632) +++ sope-appserver/NGObjWeb/wobundle-gs.make (copie de travail) @@ -85,7 +85,7 @@ endif @@ -2266,7 +2256,7 @@ Index: sope-appserver/NGObjWeb/wobundle-gs.make endif Index: sope-appserver/NGObjWeb/GNUmakefile.preamble =================================================================== ---- sope-appserver/NGObjWeb/GNUmakefile.preamble (révision 1608) +--- sope-appserver/NGObjWeb/GNUmakefile.preamble (révision 1632) +++ sope-appserver/NGObjWeb/GNUmakefile.preamble (copie de travail) @@ -50,9 +50,6 @@ $(foreach dir,$(DEP_DIRS),-F$(GNUSTEP_BUILD_DIR)/$(dir)) @@ -2305,7 +2295,7 @@ Index: sope-appserver/NGObjWeb/GNUmakefile.preamble endif Index: sope-appserver/NGObjWeb/GNUmakefile =================================================================== ---- sope-appserver/NGObjWeb/GNUmakefile (révision 1608) +--- sope-appserver/NGObjWeb/GNUmakefile (révision 1632) +++ sope-appserver/NGObjWeb/GNUmakefile (copie de travail) @@ -1,11 +1,9 @@ # GNUstep makefile @@ -2374,7 +2364,7 @@ Index: sope-appserver/NGObjWeb/GNUmakefile --include fhs.make Index: sope-appserver/NGObjWeb/WebDAV/GNUmakefile =================================================================== ---- sope-appserver/NGObjWeb/WebDAV/GNUmakefile (révision 1608) +--- sope-appserver/NGObjWeb/WebDAV/GNUmakefile (révision 1632) +++ sope-appserver/NGObjWeb/WebDAV/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -2386,7 +2376,7 @@ Index: sope-appserver/NGObjWeb/WebDAV/GNUmakefile include $(GNUSTEP_MAKEFILES)/common.make Index: sope-appserver/NGObjWeb/DynamicElements/GNUmakefile =================================================================== ---- sope-appserver/NGObjWeb/DynamicElements/GNUmakefile (révision 1608) +--- sope-appserver/NGObjWeb/DynamicElements/GNUmakefile (révision 1632) +++ sope-appserver/NGObjWeb/DynamicElements/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -2398,7 +2388,7 @@ Index: sope-appserver/NGObjWeb/DynamicElements/GNUmakefile SUBPROJECT_NAME = DynamicElements Index: sope-appserver/NGObjWeb/SoObjects/SoProductLoader.m =================================================================== ---- sope-appserver/NGObjWeb/SoObjects/SoProductLoader.m (révision 1608) +--- sope-appserver/NGObjWeb/SoObjects/SoProductLoader.m (révision 1632) +++ sope-appserver/NGObjWeb/SoObjects/SoProductLoader.m (copie de travail) @@ -74,6 +74,14 @@ } @@ -2425,7 +2415,7 @@ Index: sope-appserver/NGObjWeb/SoObjects/SoProductLoader.m - (void)_addFHSPathesToArray:(NSMutableArray *)ma { Index: sope-appserver/NGObjWeb/SoObjects/SoProductRegistry.m =================================================================== ---- sope-appserver/NGObjWeb/SoObjects/SoProductRegistry.m (révision 1608) +--- sope-appserver/NGObjWeb/SoObjects/SoProductRegistry.m (révision 1632) +++ sope-appserver/NGObjWeb/SoObjects/SoProductRegistry.m (copie de travail) @@ -231,7 +231,7 @@ @@ -2502,7 +2492,7 @@ Index: sope-appserver/NGObjWeb/SoObjects/SoProductRegistry.m #endif Index: sope-appserver/NGObjWeb/SoObjects/GNUmakefile.preamble =================================================================== ---- sope-appserver/NGObjWeb/SoObjects/GNUmakefile.preamble (révision 1608) +--- sope-appserver/NGObjWeb/SoObjects/GNUmakefile.preamble (révision 1632) +++ sope-appserver/NGObjWeb/SoObjects/GNUmakefile.preamble (copie de travail) @@ -1,5 +1,7 @@ # compilation settings @@ -2523,7 +2513,7 @@ Index: sope-appserver/NGObjWeb/SoObjects/GNUmakefile.preamble endif Index: sope-appserver/NGObjWeb/SoObjects/GNUmakefile =================================================================== ---- sope-appserver/NGObjWeb/SoObjects/GNUmakefile (révision 1608) +--- sope-appserver/NGObjWeb/SoObjects/GNUmakefile (révision 1632) +++ sope-appserver/NGObjWeb/SoObjects/GNUmakefile (copie de travail) @@ -1,7 +1,7 @@ # GNUstep makefile @@ -2536,7 +2526,7 @@ Index: sope-appserver/NGObjWeb/SoObjects/GNUmakefile Index: sope-appserver/NGObjWeb/Templates/GNUmakefile =================================================================== ---- sope-appserver/NGObjWeb/Templates/GNUmakefile (révision 1608) +--- sope-appserver/NGObjWeb/Templates/GNUmakefile (révision 1632) +++ sope-appserver/NGObjWeb/Templates/GNUmakefile (copie de travail) @@ -1,7 +1,7 @@ # GNUmakefile makefile @@ -2549,7 +2539,7 @@ Index: sope-appserver/NGObjWeb/Templates/GNUmakefile Index: sope-appserver/NGObjWeb/Templates/WOApplication+Builders.m =================================================================== ---- sope-appserver/NGObjWeb/Templates/WOApplication+Builders.m (révision 1608) +--- sope-appserver/NGObjWeb/Templates/WOApplication+Builders.m (révision 1632) +++ sope-appserver/NGObjWeb/Templates/WOApplication+Builders.m (copie de travail) @@ -76,7 +76,7 @@ @@ -2610,7 +2600,7 @@ Index: sope-appserver/NGObjWeb/Templates/WOApplication+Builders.m [FHS_INSTALL_ROOT stringByAppendingString:relPath], Index: sope-appserver/NGObjWeb/Templates/GNUmakefile.preamble =================================================================== ---- sope-appserver/NGObjWeb/Templates/GNUmakefile.preamble (révision 1608) +--- sope-appserver/NGObjWeb/Templates/GNUmakefile.preamble (révision 1632) +++ sope-appserver/NGObjWeb/Templates/GNUmakefile.preamble (copie de travail) @@ -6,6 +6,6 @@ ADDITIONAL_CPPFLAGS += -DFHS_INSTALL_ROOT=\@\"$(FHS_INSTALL_ROOT)\" @@ -2623,7 +2613,7 @@ Index: sope-appserver/NGObjWeb/Templates/GNUmakefile.preamble endif Index: sope-appserver/NGObjWeb/Associations/GNUmakefile =================================================================== ---- sope-appserver/NGObjWeb/Associations/GNUmakefile (révision 1608) +--- sope-appserver/NGObjWeb/Associations/GNUmakefile (révision 1632) +++ sope-appserver/NGObjWeb/Associations/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -2635,7 +2625,7 @@ Index: sope-appserver/NGObjWeb/Associations/GNUmakefile SUBPROJECT_NAME = Associations Index: sope-appserver/NGObjWeb/WOHttpAdaptor/GNUmakefile =================================================================== ---- sope-appserver/NGObjWeb/WOHttpAdaptor/GNUmakefile (révision 1608) +--- sope-appserver/NGObjWeb/WOHttpAdaptor/GNUmakefile (révision 1632) +++ sope-appserver/NGObjWeb/WOHttpAdaptor/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -2647,7 +2637,7 @@ Index: sope-appserver/NGObjWeb/WOHttpAdaptor/GNUmakefile SUBPROJECT_NAME = WOHttpAdaptor Index: sope-appserver/NGObjWeb/woapp-gs.make =================================================================== ---- sope-appserver/NGObjWeb/woapp-gs.make (révision 1608) +--- sope-appserver/NGObjWeb/woapp-gs.make (révision 1632) +++ sope-appserver/NGObjWeb/woapp-gs.make (copie de travail) @@ -103,7 +103,7 @@ # Determine the application directory extension @@ -2672,7 +2662,7 @@ Index: sope-appserver/NGObjWeb/woapp-gs.make endif Index: sope-appserver/NGObjWeb/WOCoreApplication.m =================================================================== ---- sope-appserver/NGObjWeb/WOCoreApplication.m (révision 1608) +--- sope-appserver/NGObjWeb/WOCoreApplication.m (révision 1632) +++ sope-appserver/NGObjWeb/WOCoreApplication.m (copie de travail) @@ -730,9 +730,15 @@ [self sopeMajorVersion], [self sopeMinorVersion]]; @@ -2692,7 +2682,7 @@ Index: sope-appserver/NGObjWeb/WOCoreApplication.m + (NSArray *)resourcesSearchPathes { Index: sope-appserver/NGObjWeb/NGHttp/GNUmakefile =================================================================== ---- sope-appserver/NGObjWeb/NGHttp/GNUmakefile (révision 1608) +--- sope-appserver/NGObjWeb/NGHttp/GNUmakefile (révision 1632) +++ sope-appserver/NGObjWeb/NGHttp/GNUmakefile (copie de travail) @@ -1,10 +1,8 @@ # GNUstep makefile @@ -2717,7 +2707,7 @@ Index: sope-appserver/NGObjWeb/NGHttp/GNUmakefile -include GNUmakefile.postamble Index: sope-appserver/WEPrototype/GNUmakefile =================================================================== ---- sope-appserver/WEPrototype/GNUmakefile (révision 1608) +--- sope-appserver/WEPrototype/GNUmakefile (révision 1632) +++ sope-appserver/WEPrototype/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -2753,7 +2743,7 @@ Index: sope-appserver/WEPrototype/GNUmakefile --include fhs.make Index: sope-appserver/WEPrototype/doc/GNUmakefile =================================================================== ---- sope-appserver/WEPrototype/doc/GNUmakefile (révision 1608) +--- sope-appserver/WEPrototype/doc/GNUmakefile (révision 1632) +++ sope-appserver/WEPrototype/doc/GNUmakefile (copie de travail) @@ -2,7 +2,7 @@ @@ -2766,7 +2756,7 @@ Index: sope-appserver/WEPrototype/doc/GNUmakefile Index: sope-appserver/WEPrototype/GNUmakefile.preamble =================================================================== ---- sope-appserver/WEPrototype/GNUmakefile.preamble (révision 1608) +--- sope-appserver/WEPrototype/GNUmakefile.preamble (révision 1632) +++ sope-appserver/WEPrototype/GNUmakefile.preamble (copie de travail) @@ -1,4 +1,4 @@ -# compiler flags @@ -2786,7 +2776,7 @@ Index: sope-appserver/WEPrototype/GNUmakefile.preamble libWEPrototype_LIBRARIES_DEPEND_UPON += \ Index: sope-appserver/common.make =================================================================== ---- sope-appserver/common.make (révision 1608) +--- sope-appserver/common.make (révision 1632) +++ sope-appserver/common.make (copie de travail) @@ -4,8 +4,6 @@ include ../Version @@ -2799,7 +2789,7 @@ Index: sope-appserver/common.make ADDITIONAL_INCLUDE_DIRS += \ Index: sope-appserver/samples/CoreDataBlog/GNUmakefile =================================================================== ---- sope-appserver/samples/CoreDataBlog/GNUmakefile (révision 1608) +--- sope-appserver/samples/CoreDataBlog/GNUmakefile (révision 1632) +++ sope-appserver/samples/CoreDataBlog/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -2811,7 +2801,7 @@ Index: sope-appserver/samples/CoreDataBlog/GNUmakefile WOAPP_NAME = CoreDataBlog Index: sope-appserver/samples/HelloForm/GNUmakefile =================================================================== ---- sope-appserver/samples/HelloForm/GNUmakefile (révision 1608) +--- sope-appserver/samples/HelloForm/GNUmakefile (révision 1632) +++ sope-appserver/samples/HelloForm/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -2823,7 +2813,7 @@ Index: sope-appserver/samples/HelloForm/GNUmakefile WOAPP_NAME = HelloForm Index: sope-appserver/samples/GNUmakefile =================================================================== ---- sope-appserver/samples/GNUmakefile (révision 1608) +--- sope-appserver/samples/GNUmakefile (révision 1632) +++ sope-appserver/samples/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -2835,7 +2825,7 @@ Index: sope-appserver/samples/GNUmakefile SUBPROJECTS += \ Index: sope-appserver/samples/iCalPortal/GNUmakefile.preamble =================================================================== ---- sope-appserver/samples/iCalPortal/GNUmakefile.preamble (révision 1608) +--- sope-appserver/samples/iCalPortal/GNUmakefile.preamble (révision 1632) +++ sope-appserver/samples/iCalPortal/GNUmakefile.preamble (copie de travail) @@ -7,7 +7,9 @@ -lEOControl \ @@ -2849,7 +2839,7 @@ Index: sope-appserver/samples/iCalPortal/GNUmakefile.preamble SYSTEM_LIB_DIR += -L/usr/local/lib -L/usr/lib Index: sope-appserver/samples/iCalPortal/GNUmakefile =================================================================== ---- sope-appserver/samples/iCalPortal/GNUmakefile (révision 1608) +--- sope-appserver/samples/iCalPortal/GNUmakefile (révision 1632) +++ sope-appserver/samples/iCalPortal/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -2861,7 +2851,7 @@ Index: sope-appserver/samples/iCalPortal/GNUmakefile WOAPP_NAME = iCalPortal Index: sope-appserver/samples/iCalPortal/Pages/GNUmakefile =================================================================== ---- sope-appserver/samples/iCalPortal/Pages/GNUmakefile (révision 1608) +--- sope-appserver/samples/iCalPortal/Pages/GNUmakefile (révision 1632) +++ sope-appserver/samples/iCalPortal/Pages/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -2873,7 +2863,7 @@ Index: sope-appserver/samples/iCalPortal/Pages/GNUmakefile SUBPROJECT_NAME = Pages Index: sope-appserver/samples/iCalPortal/WebDAV/GNUmakefile =================================================================== ---- sope-appserver/samples/iCalPortal/WebDAV/GNUmakefile (révision 1608) +--- sope-appserver/samples/iCalPortal/WebDAV/GNUmakefile (révision 1632) +++ sope-appserver/samples/iCalPortal/WebDAV/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -2885,7 +2875,7 @@ Index: sope-appserver/samples/iCalPortal/WebDAV/GNUmakefile SUBPROJECT_NAME = DAV Index: sope-appserver/samples/SoCookieAuth/GNUmakefile =================================================================== ---- sope-appserver/samples/SoCookieAuth/GNUmakefile (révision 1608) +--- sope-appserver/samples/SoCookieAuth/GNUmakefile (révision 1632) +++ sope-appserver/samples/SoCookieAuth/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -2897,7 +2887,7 @@ Index: sope-appserver/samples/SoCookieAuth/GNUmakefile WOAPP_NAME = SoCookieAuth Index: sope-appserver/samples/WOxExtTest/GNUmakefile =================================================================== ---- sope-appserver/samples/WOxExtTest/GNUmakefile (révision 1608) +--- sope-appserver/samples/WOxExtTest/GNUmakefile (révision 1632) +++ sope-appserver/samples/WOxExtTest/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -2909,7 +2899,7 @@ Index: sope-appserver/samples/WOxExtTest/GNUmakefile WOAPP_NAME = WOxExtTest Index: sope-appserver/samples/TestPages/GNUmakefile =================================================================== ---- sope-appserver/samples/TestPages/GNUmakefile (révision 1608) +--- sope-appserver/samples/TestPages/GNUmakefile (révision 1632) +++ sope-appserver/samples/TestPages/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -2921,7 +2911,7 @@ Index: sope-appserver/samples/TestPages/GNUmakefile WOAPP_NAME = TestPages Index: sope-appserver/samples/parsedav/GNUmakefile =================================================================== ---- sope-appserver/samples/parsedav/GNUmakefile (révision 1608) +--- sope-appserver/samples/parsedav/GNUmakefile (révision 1632) +++ sope-appserver/samples/parsedav/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -2933,7 +2923,7 @@ Index: sope-appserver/samples/parsedav/GNUmakefile TOOL_NAME = parsedav Index: sope-appserver/samples/xmlrpc/GNUmakefile =================================================================== ---- sope-appserver/samples/xmlrpc/GNUmakefile (révision 1608) +--- sope-appserver/samples/xmlrpc/GNUmakefile (révision 1632) +++ sope-appserver/samples/xmlrpc/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -2945,7 +2935,7 @@ Index: sope-appserver/samples/xmlrpc/GNUmakefile TOOL_NAME = \ Index: sope-appserver/samples/TestPrototype/GNUmakefile =================================================================== ---- sope-appserver/samples/TestPrototype/GNUmakefile (révision 1608) +--- sope-appserver/samples/TestPrototype/GNUmakefile (révision 1632) +++ sope-appserver/samples/TestPrototype/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -2957,7 +2947,7 @@ Index: sope-appserver/samples/TestPrototype/GNUmakefile WOAPP_NAME = TestPrototype Index: sope-appserver/samples/HelloWorld/GNUmakefile =================================================================== ---- sope-appserver/samples/HelloWorld/GNUmakefile (révision 1608) +--- sope-appserver/samples/HelloWorld/GNUmakefile (révision 1632) +++ sope-appserver/samples/HelloWorld/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -2969,7 +2959,7 @@ Index: sope-appserver/samples/HelloWorld/GNUmakefile WOAPP_NAME = HelloWorld Index: sope-appserver/samples/davpropget/GNUmakefile =================================================================== ---- sope-appserver/samples/davpropget/GNUmakefile (révision 1608) +--- sope-appserver/samples/davpropget/GNUmakefile (révision 1632) +++ sope-appserver/samples/davpropget/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -2981,7 +2971,7 @@ Index: sope-appserver/samples/davpropget/GNUmakefile TOOL_NAME = davpropget Index: sope-appserver/WOExtensions/GNUmakefile.preamble =================================================================== ---- sope-appserver/WOExtensions/GNUmakefile.preamble (révision 1608) +--- sope-appserver/WOExtensions/GNUmakefile.preamble (révision 1632) +++ sope-appserver/WOExtensions/GNUmakefile.preamble (copie de travail) @@ -12,7 +12,8 @@ -I$(SOPE_ROOT)/sope-xml @@ -2995,7 +2985,7 @@ Index: sope-appserver/WOExtensions/GNUmakefile.preamble Index: sope-appserver/WOExtensions/GNUmakefile =================================================================== ---- sope-appserver/WOExtensions/GNUmakefile (révision 1608) +--- sope-appserver/WOExtensions/GNUmakefile (révision 1632) +++ sope-appserver/WOExtensions/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -3031,7 +3021,7 @@ Index: sope-appserver/WOExtensions/GNUmakefile --include fhs.make Index: sope-appserver/WOXML/GNUmakefile =================================================================== ---- sope-appserver/WOXML/GNUmakefile (révision 1608) +--- sope-appserver/WOXML/GNUmakefile (révision 1632) +++ sope-appserver/WOXML/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -3065,7 +3055,7 @@ Index: sope-appserver/WOXML/GNUmakefile --include fhs.make Index: sope-appserver/WOXML/GNUmakefile.preamble =================================================================== ---- sope-appserver/WOXML/GNUmakefile.preamble (révision 1608) +--- sope-appserver/WOXML/GNUmakefile.preamble (révision 1632) +++ sope-appserver/WOXML/GNUmakefile.preamble (copie de travail) @@ -2,7 +2,7 @@ @@ -3078,7 +3068,7 @@ Index: sope-appserver/WOXML/GNUmakefile.preamble libWOXML_INCLUDE_DIRS += -I. -I.. Index: sope-ical/samples/GNUmakefile =================================================================== ---- sope-ical/samples/GNUmakefile (révision 1608) +--- sope-ical/samples/GNUmakefile (révision 1632) +++ sope-ical/samples/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -3095,7 +3085,7 @@ Index: sope-ical/samples/GNUmakefile --include fhs.make Index: sope-ical/versitSaxDriver/GNUmakefile =================================================================== ---- sope-ical/versitSaxDriver/GNUmakefile (révision 1608) +--- sope-ical/versitSaxDriver/GNUmakefile (révision 1632) +++ sope-ical/versitSaxDriver/GNUmakefile (copie de travail) @@ -1,13 +1,13 @@ # GNUstep makefile @@ -3120,7 +3110,7 @@ Index: sope-ical/versitSaxDriver/GNUmakefile --include fhs.make Index: sope-ical/GNUmakefile =================================================================== ---- sope-ical/GNUmakefile (révision 1608) +--- sope-ical/GNUmakefile (révision 1632) +++ sope-ical/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile @@ -3132,7 +3122,7 @@ Index: sope-ical/GNUmakefile PACKAGE_NAME=sope-ical Index: sope-ical/NGiCal/GNUmakefile.postamble =================================================================== ---- sope-ical/NGiCal/GNUmakefile.postamble (révision 1608) +--- sope-ical/NGiCal/GNUmakefile.postamble (révision 1632) +++ sope-ical/NGiCal/GNUmakefile.postamble (copie de travail) @@ -1,10 +1,6 @@ # compilation settings @@ -3148,7 +3138,7 @@ Index: sope-ical/NGiCal/GNUmakefile.postamble $(MKDIRS) $(MAPDIR) Index: sope-ical/NGiCal/GNUmakefile =================================================================== ---- sope-ical/NGiCal/GNUmakefile (révision 1608) +--- sope-ical/NGiCal/GNUmakefile (révision 1632) +++ sope-ical/NGiCal/GNUmakefile (copie de travail) @@ -1,6 +1,6 @@ # GNUstep makefile diff --git a/SOPE/sope-patchset-r1630.diff b/SOPE/sope-patchset-r1632.diff similarity index 98% rename from SOPE/sope-patchset-r1630.diff rename to SOPE/sope-patchset-r1632.diff index cb8d195b6..d0720199f 100644 --- a/SOPE/sope-patchset-r1630.diff +++ b/SOPE/sope-patchset-r1632.diff @@ -3608,6 +3608,23 @@ Index: sope-core/NGExtensions/FdExt.subproj/NSString+Encoding.m } static char *iconv_wrapper(id self, char *_src, unsigned _srcLen, +Index: sope-core/NGExtensions/NGCalendarDateRange.m +=================================================================== +--- sope-core/NGExtensions/NGCalendarDateRange.m (revision 1632) ++++ sope-core/NGExtensions/NGCalendarDateRange.m (working copy) +@@ -50,6 +50,12 @@ + return self; + } + ++- (void)dealloc { ++ [self->startDate release]; ++ [self->endDate release]; ++ [super dealloc]; ++} ++ + /* NSCopying */ + + - (id)copyWithZone:(NSZone *)zone { Index: sope-core/NGExtensions/NGQuotedPrintableCoding.m =================================================================== --- sope-core/NGExtensions/NGQuotedPrintableCoding.m (revision 1632) @@ -3638,6 +3655,19 @@ Index: sope-core/NGExtensions/EOExt.subproj/EOGlobalID+Ext.m #import #import +Index: sope-core/NGExtensions/ChangeLog +=================================================================== +--- sope-core/NGExtensions/ChangeLog (revision 1632) ++++ sope-core/NGExtensions/ChangeLog (working copy) +@@ -1,3 +1,8 @@ ++2009-03-24 Wolfgang Sourdeau ++ ++ * NGCalendarDateRange.m ([NGCalendarDateRange -dealloc]): release ++ endDate and startDate. ++ + 2008-03-11 Helge Hess + + * FdExt.subproj/NSArray+enumerator.m: fixed for MacOS 10.5 (v4.7.201) Index: sope-core/NGStreams/GNUmakefile.preamble =================================================================== --- sope-core/NGStreams/GNUmakefile.preamble (revision 1632) @@ -3653,6 +3683,19 @@ Index: sope-core/NGStreams/GNUmakefile.preamble -INGStreams \ -I../NGExtensions \ -I.. +Index: sope-xml/libxmlSAXDriver/ChangeLog +=================================================================== +--- sope-xml/libxmlSAXDriver/ChangeLog (revision 1632) ++++ sope-xml/libxmlSAXDriver/ChangeLog (working copy) +@@ -1,3 +1,8 @@ ++2009-03-24 Wolfgang Sourdeau ++ ++ * libxmlSAXDriver.m (_startElement): autorelease "nsDict" when its ++ instantiated from a copy of "ns". ++ + 2006-07-03 Helge Hess + + * libXMLSaxDriver.m: fixed last changes for libFoundation (v4.5.24) Index: sope-xml/libxmlSAXDriver/libxmlHTMLSAXDriver.h =================================================================== --- sope-xml/libxmlSAXDriver/libxmlHTMLSAXDriver.h (revision 1632) @@ -3757,6 +3800,14 @@ Index: sope-xml/libxmlSAXDriver/libxmlSAXDriver.m ((xmlParserCtxtPtr)self->ctxt)->sax = NULL; xmlFreeParserCtxt(self->ctxt); +@@ -872,6 +872,7 @@ + } + + nsDict = [ns copy]; ++ [nsDict autorelease]; + [ns release]; + } + Index: sope-appserver/mod_ngobjweb/config.c =================================================================== --- sope-appserver/mod_ngobjweb/config.c (revision 1632) @@ -3881,8 +3932,17 @@ Index: sope-appserver/NGObjWeb/ChangeLog =================================================================== --- sope-appserver/NGObjWeb/ChangeLog (revision 1632) +++ sope-appserver/NGObjWeb/ChangeLog (working copy) -@@ -3,6 +3,11 @@ +@@ -1,3 +1,9 @@ ++2009-03-24 Wolfgang Sourdeau ++ ++ * SoObjects/SoActionInvocation.m ([SoActionInvocation ++ -bindToObject:inContext:]): do not retain methodObject when ++ instantiated since it is not autoreleased. ++ + 2008-12-11 Helge Hess + * WOHttpAdaptor/WOHttpAdaptor.m: properly embed threaded request +@@ -3,4 +9,9 @@ handler in a top-level pool (v4.7.27) +2008-09-01 Ludovic Marcotte @@ -3892,7 +3952,6 @@ Index: sope-appserver/NGObjWeb/ChangeLog + 2008-05-21 Sebastian Reitenbach - * WOHTTPURLHandle.m: add 'query' component of URL to request path Index: sope-appserver/NGObjWeb/DAVPropMap.plist =================================================================== --- sope-appserver/NGObjWeb/DAVPropMap.plist (revision 1632) @@ -4353,6 +4412,19 @@ Index: sope-appserver/NGObjWeb/SoObjects/SoObject.m } } +Index: sope-appserver/NGObjWeb/SoObjects/SoActionInvocation.m +=================================================================== +--- sope-appserver/NGObjWeb/SoObjects/SoActionInvocation.m (revision 1632) ++++ sope-appserver/NGObjWeb/SoObjects/SoActionInvocation.m (working copy) +@@ -338,7 +338,7 @@ + inv->actionName = [self->actionName copy]; + inv->argumentSpecifications = [self->argumentSpecifications copy]; + +- inv->methodObject = [[inv instantiateMethodInContext:_ctx] retain]; ++ inv->methodObject = [inv instantiateMethodInContext:_ctx]; + if (inv->methodObject == nil) { + [self errorWithFormat:@"did not find method '%@'", [self actionClassName]]; + return nil; Index: sope-appserver/NGObjWeb/SoObjects/SoObject+Traversal.m =================================================================== --- sope-appserver/NGObjWeb/SoObjects/SoObject+Traversal.m (revision 1632) diff --git a/Scripts/sogo-init.d-redhat b/Scripts/sogo-init.d-redhat index 06d669a03..12db1c858 100755 --- a/Scripts/sogo-init.d-redhat +++ b/Scripts/sogo-init.d-redhat @@ -30,8 +30,9 @@ # sogod Scalable OpenGroupware.org (Inverse edition) -PREFORK=3 +PREFORK=1 SOGO_ARGS="" +USER=sogo PATH=/sbin:/bin:/usr/sbin:/usr/bin @@ -44,7 +45,7 @@ fi REAL_DAEMON=sogod DAEMON=/usr/sbin/sogod -NAME=sogo +NAME=sogod DESC="Scalable OpenGroupware.Org (Inverse edition)" PIDFILE=/var/run/sogo/sogod. @@ -58,20 +59,23 @@ if [ ! -x $DAEMON ]; then exit 1 fi -if [ `/usr/bin/stat /var/run/sogo -c %U` != "sogo" ]; then - echo "/var/run/sogo is not owned by the sogo user." - exit 1 -fi +checkDir() { + directory="$1" + if [ ! -d "$directory" ] + then + echo "$directory does not exist." + exit 1 + fi -if [ `/usr/bin/stat /var/spool/sogo -c %U` != "sogo" ]; then - echo "/var/spool/sogo is not owned by the sogo user." - exit 1 -fi + if [ `/usr/bin/stat "$directory" -c %U` != "$USER" ] + then + echo "$directory is not owned by the sogo user." + exit 1 + fi +} -if [ `/usr/bin/stat /var/log/sogo -c %U` != "sogo" ]; then - echo "/var/log/sogo is not owned by the sogo user." - exit 1 -fi +checkDir /var/run/sogo +checkDir /var/spool/sogo #set -e @@ -79,22 +83,99 @@ start() { echo $"Starting $DESC: " for ((a=1; a <= PREFORK ; a++)) do - daemon --user=sogo $DAEMON $a - echo "$DAEMON $a" + ppid="`cat ${PIDFILE}${a} 2> /dev/null`" + if [ -n "$ppid" ] + then + ppid="`ps --pid ${ppid} -o pid=`" + if [ -n "$ppid" ] + then + echo " $DAEMON $a already running. Skipped." + else + rm -f ${PIDFILE}${a} + daemon --user="$USER" "$DAEMON" $a + echo " $DAEMON $a (stale pid file removed)" + fi + else + daemon --user="$USER" "$DAEMON" $a + echo " $DAEMON $a" + fi done } stop() { echo $"Stopping $DESC: " - /usr/bin/killall -u sogo gdnc + su "$USER" -c '/usr/bin/killall gdnc >& /dev/null' + # We kill the parent processes with SIGTERM so that they + # can exit gracefully. for ((a=1; a <= PREFORK ; a++)) do - pid="`cat ${PIDFILE}${a}`" - ppid="`ps --ppid ${pid} -o pid=`" - kill -9 $pid - kill -9 $ppid + ppid="`cat ${PIDFILE}${a} 2> /dev/null`" + if [ -n "$ppid" ] + then + ppid="`ps --pid ${ppid} -o pid=`" + if [ -n "$ppid" ] + then + if kill $ppid >& /dev/null + then + echo " $DAEMON $a stopped" + fi + else + echo " $DAEMON $a not running" + fi + else + echo " $DAEMON $a not running" + fi + done + + sleep 1 + # We kill the parent and child processes with SIGKILL to make sure they + # really are shutdown, and then we remove their pidfile. + for ((a=1; a <= PREFORK ; a++)) + do + ppid="`cat ${PIDFILE}${a} 2> /dev/null`" + if [ -n "$ppid" ] + then + ppid="`ps --pid ${ppid} -o pid= 2> /dev/null`" + if [ -n "$ppid" ] + then + kill -9 $ppid >& /dev/null + pid="`ps --ppid ${ppid} -o pid= 2> /dev/null`" + if [ -n "$pid" ] + then + kill -9 $pid >& /dev/null + fi + echo " $DAEMON $a killed" + fi + fi rm -f ${PIDFILE}${a} - echo "$DAEMON $a stopped" + done +} + +restart() { + echo $"Restarting $DESC: " + su "$USER" -c '/usr/bin/killall gdnc >& /dev/null' + for ((a=1; a <= PREFORK ; a++)) + do + ppid="`cat ${PIDFILE}${a} 2> /dev/null`" + if [ -n "$ppid" ] + then + ppid="`ps --pid ${ppid} -o pid=`" + if [ -n "$ppid" ] + then + kill $ppid >& /dev/null + sleep 1 + fi + ppid="`ps --pid ${ppid} -o pid=`" + if [ -n "$ppid" ] + then + pid="`ps --ppid ${ppid} -o pid=`" + kill -9 $ppid >& /dev/null + kill -9 $pid >& /dev/null + fi + rm -f ${PIDFILE}${a} + fi + daemon --user="$USER" "$DAEMON" $a + echo " $DAEMON $a" done } @@ -106,8 +187,7 @@ case "$1" in stop ;; restart|force-reload) - stop - start + restart ;; status) status $REAL_DAEMON diff --git a/SoObjects/Appointments/SOGoAppointmentFolder.h b/SoObjects/Appointments/SOGoAppointmentFolder.h index ff7925290..66e5548f6 100644 --- a/SoObjects/Appointments/SOGoAppointmentFolder.h +++ b/SoObjects/Appointments/SOGoAppointmentFolder.h @@ -107,6 +107,7 @@ inContext: (id) _ctx; - (SOGoAppointmentFolder *) lookupCalendarFolderForUID: (NSString *) uid; +- (NSArray *) lookupCalendarFoldersForUID: (NSString *) theUID; - (NSArray *) lookupCalendarFoldersForUIDs: (NSArray *) _uids inContext: (id) _ctx; - (NSArray *) lookupFreeBusyObjectsForUIDs: (NSArray *) _uids diff --git a/SoObjects/Appointments/SOGoAppointmentFolder.m b/SoObjects/Appointments/SOGoAppointmentFolder.m index 44f6bf655..2ec5c945f 100644 --- a/SoObjects/Appointments/SOGoAppointmentFolder.m +++ b/SoObjects/Appointments/SOGoAppointmentFolder.m @@ -2406,6 +2406,37 @@ firstInstanceCalendarDateRange: (NGCalendarDateRange *) fir return (SOGoAppointmentFolder *) currentContainer; } +// +// This method returns an array containing all the calendar folders +// of a specific user, excluding her/his subscriptions. +// +- (NSArray *) lookupCalendarFoldersForUID: (NSString *) theUID +{ + NSArray *aFolders; + NSEnumerator *e; + NSMutableArray *aUserFolders; + SOGoAppointmentFolders *aParent; + SOGoFolder *aContainer, *aFolder; + + aUserFolders = [NSMutableArray arrayWithCapacity: 16]; + aContainer = [[container container] container]; + aContainer = [aContainer lookupName: theUID + inContext: context + acquire: NO]; + aParent = [aContainer lookupName: @"Calendar" + inContext: context + acquire: NO]; + aFolders = [aParent subFolders]; + e = [aFolders objectEnumerator]; + while ( (aFolder = [e nextObject]) ) + { + if (![aFolder isSubscription]) + [aUserFolders addObject: aFolder]; + } + + return aUserFolders; +} + - (NSArray *) lookupCalendarFoldersForUIDs: (NSArray *) _uids inContext: (id)_ctx { diff --git a/SoObjects/Appointments/SOGoAppointmentObject.m b/SoObjects/Appointments/SOGoAppointmentObject.m index 740d5922e..457e22dc2 100644 --- a/SoObjects/Appointments/SOGoAppointmentObject.m +++ b/SoObjects/Appointments/SOGoAppointmentObject.m @@ -173,28 +173,36 @@ { SOGoAppointmentFolder *folder; SOGoAppointmentObject *object; + NSArray *folders; + NSEnumerator *e; NSString *possibleName; -#warning Should call lookupCalendarFoldersForUIDs to search among all folders - folder = [container lookupCalendarFolderForUID: uid]; - object = [folder lookupName: nameInContainer - inContext: context acquire: NO]; - if ([object isKindOfClass: [NSException class]]) + object = nil; + folders = [container lookupCalendarFoldersForUID: uid]; + e = [folders objectEnumerator]; + while ( object == nil && (folder = [e nextObject]) ) { - possibleName = [folder resourceNameForEventUID: eventUID]; - if (possibleName) + object = [folder lookupName: nameInContainer + inContext: context + acquire: NO]; + if ([object isKindOfClass: [NSException class]]) { - object = [folder lookupName: possibleName - inContext: context acquire: NO]; - if ([object isKindOfClass: [NSException class]]) + possibleName = [folder resourceNameForEventUID: eventUID]; + if (possibleName) + { + object = [folder lookupName: possibleName + inContext: context acquire: NO]; + if ([object isKindOfClass: [NSException class]]) + object = nil; + } + else object = nil; } - else - object = nil; } if (!object) { + folder = [container lookupCalendarFolderForUID: uid]; object = [SOGoAppointmentObject objectWithName: nameInContainer inContainer: folder]; [object setIsNew: YES]; @@ -281,8 +289,9 @@ NSCalendarDate *currentId; NSString *calendarContent; int max, count; - -#warning Should call lookupCalendarFoldersForUIDs to search among all folders + + // Invitations are always written to the personal folder; it's not necessay + // to look into all folders of the user folder = [container lookupCalendarFolderForUID: theUID]; object = [folder lookupName: nameInContainer inContext: context acquire: NO]; @@ -293,7 +302,7 @@ else { calendar = [object calendar: NO secure: NO]; - + // If recurrenceId is defined, remove the occurence from // the repeating event. occurences = [calendar events]; @@ -314,9 +323,9 @@ // Add an date exception. event = (iCalRepeatableEntityObject*)[calendar firstChildWithTag: [object componentTag]]; [event addToExceptionDates: recurrenceId]; - + [event increaseSequence]; - + // We generate the updated iCalendar file and we save it // in the database. calendarContent = [calendar versitString]; diff --git a/SoObjects/Appointments/SOGoAptMailDutchUpdate.wo/SOGoAptMailDutchUpdate.html b/SoObjects/Appointments/SOGoAptMailDutchUpdate.wo/SOGoAptMailDutchUpdate.html index ade9f7f44..10b806356 100644 --- a/SoObjects/Appointments/SOGoAptMailDutchUpdate.wo/SOGoAptMailDutchUpdate.html +++ b/SoObjects/Appointments/SOGoAptMailDutchUpdate.wo/SOGoAptMailDutchUpdate.html @@ -1,5 +1,5 @@ <#IsSubject>The appointment "<#Summary />" for the <#OldAptStartDate /> at <#OldAptStartTime /> has changed <#IsBody> -This appointment<#HasSentBy> (sent by <#sentBy/>), previously set for <#OldAptStartDate /> at <#OldAptStartTime /><#HasOldLocation> (<#OldAptLocation />) is now scheduled for <#NewAptStartDate /> at <#NewAptStartTime /><#HasNewLocation> (<#NewAptLocation />). +This appointment<#HasSentBy> (sent by <#sentBy/>), previously set for <#OldAptStartDate /><#IsNotOldAllDay> at <#OldAptStartTime /><#HasOldLocation> (<#OldAptLocation />) is now scheduled for <#NewAptStartDate /><#IsNotNewAllDay> at <#NewAptStartTime /><#HasNewLocation> (<#NewAptLocation />). Please make a decision for these new settings. diff --git a/SoObjects/Appointments/SOGoAptMailDutchUpdate.wo/SOGoAptMailDutchUpdate.wod b/SoObjects/Appointments/SOGoAptMailDutchUpdate.wo/SOGoAptMailDutchUpdate.wod index 65021fc5a..df9b65c38 100644 --- a/SoObjects/Appointments/SOGoAptMailDutchUpdate.wo/SOGoAptMailDutchUpdate.wod +++ b/SoObjects/Appointments/SOGoAptMailDutchUpdate.wo/SOGoAptMailDutchUpdate.wod @@ -10,6 +10,11 @@ OldAptStartTime: WOString { escapeHTML = NO; } +IsNotOldAllDay: WOConditional { + condition = previousApt.isAllDay; + negate = YES; +} + NewAptStartDate: WOString { value = newStartDate; dateformat = "%d/%m/%y"; @@ -22,6 +27,11 @@ NewAptStartTime: WOString { escapeHTML = NO; } +IsNotNewAllDay: WOConditional { + condition = apt.isAllDay; + negate = YES; +} + Organizer: WOString { value = organizerName; escapeHTML = NO; diff --git a/SoObjects/Appointments/SOGoAptMailEnglishUpdate.wo/SOGoAptMailEnglishUpdate.html b/SoObjects/Appointments/SOGoAptMailEnglishUpdate.wo/SOGoAptMailEnglishUpdate.html index ade9f7f44..10b806356 100644 --- a/SoObjects/Appointments/SOGoAptMailEnglishUpdate.wo/SOGoAptMailEnglishUpdate.html +++ b/SoObjects/Appointments/SOGoAptMailEnglishUpdate.wo/SOGoAptMailEnglishUpdate.html @@ -1,5 +1,5 @@ <#IsSubject>The appointment "<#Summary />" for the <#OldAptStartDate /> at <#OldAptStartTime /> has changed <#IsBody> -This appointment<#HasSentBy> (sent by <#sentBy/>), previously set for <#OldAptStartDate /> at <#OldAptStartTime /><#HasOldLocation> (<#OldAptLocation />) is now scheduled for <#NewAptStartDate /> at <#NewAptStartTime /><#HasNewLocation> (<#NewAptLocation />). +This appointment<#HasSentBy> (sent by <#sentBy/>), previously set for <#OldAptStartDate /><#IsNotOldAllDay> at <#OldAptStartTime /><#HasOldLocation> (<#OldAptLocation />) is now scheduled for <#NewAptStartDate /><#IsNotNewAllDay> at <#NewAptStartTime /><#HasNewLocation> (<#NewAptLocation />). Please make a decision for these new settings. diff --git a/SoObjects/Appointments/SOGoAptMailEnglishUpdate.wo/SOGoAptMailEnglishUpdate.wod b/SoObjects/Appointments/SOGoAptMailEnglishUpdate.wo/SOGoAptMailEnglishUpdate.wod index 65021fc5a..df9b65c38 100644 --- a/SoObjects/Appointments/SOGoAptMailEnglishUpdate.wo/SOGoAptMailEnglishUpdate.wod +++ b/SoObjects/Appointments/SOGoAptMailEnglishUpdate.wo/SOGoAptMailEnglishUpdate.wod @@ -10,6 +10,11 @@ OldAptStartTime: WOString { escapeHTML = NO; } +IsNotOldAllDay: WOConditional { + condition = previousApt.isAllDay; + negate = YES; +} + NewAptStartDate: WOString { value = newStartDate; dateformat = "%d/%m/%y"; @@ -22,6 +27,11 @@ NewAptStartTime: WOString { escapeHTML = NO; } +IsNotNewAllDay: WOConditional { + condition = apt.isAllDay; + negate = YES; +} + Organizer: WOString { value = organizerName; escapeHTML = NO; diff --git a/SoObjects/Appointments/SOGoAptMailFrenchUpdate.wo/SOGoAptMailFrenchUpdate.html b/SoObjects/Appointments/SOGoAptMailFrenchUpdate.wo/SOGoAptMailFrenchUpdate.html index d746a6fdd..4bd7f62e9 100644 --- a/SoObjects/Appointments/SOGoAptMailFrenchUpdate.wo/SOGoAptMailFrenchUpdate.html +++ b/SoObjects/Appointments/SOGoAptMailFrenchUpdate.wo/SOGoAptMailFrenchUpdate.html @@ -1,5 +1,5 @@ <#IsSubject>Le rendez-vous "<#Summary />" du <#OldAptStartDate /> à <#OldAptStartTime /> est modifié <#IsBody> -La réunion<#HasSentBy> (envoyé par <#sentBy/>) qui devait se dérouler le <#OldAptStartDate /> à <#OldAptStartTime /><#HasOldLocation> (<#OldAptLocation />) est maintenant prévue le <#NewAptStartDate /> à <#NewAptStartTime /><#HasNewLocation> (<#NewAptLocation />). +La réunion<#HasSentBy> (envoyé par <#sentBy/>) qui devait se dérouler le <#OldAptStartDate /><#IsNotOldAllDay> à <#OldAptStartTime /><#HasOldLocation> (<#OldAptLocation />) est maintenant prévue le <#NewAptStartDate /><#IsNotNewAllDay> à <#NewAptStartTime /><#HasNewLocation> (<#NewAptLocation />). Vous êtes invité à accepter ou refuser de participer à la réunion pour cette nouvelle date. diff --git a/SoObjects/Appointments/SOGoAptMailFrenchUpdate.wo/SOGoAptMailFrenchUpdate.wod b/SoObjects/Appointments/SOGoAptMailFrenchUpdate.wo/SOGoAptMailFrenchUpdate.wod index 65021fc5a..df9b65c38 100644 --- a/SoObjects/Appointments/SOGoAptMailFrenchUpdate.wo/SOGoAptMailFrenchUpdate.wod +++ b/SoObjects/Appointments/SOGoAptMailFrenchUpdate.wo/SOGoAptMailFrenchUpdate.wod @@ -10,6 +10,11 @@ OldAptStartTime: WOString { escapeHTML = NO; } +IsNotOldAllDay: WOConditional { + condition = previousApt.isAllDay; + negate = YES; +} + NewAptStartDate: WOString { value = newStartDate; dateformat = "%d/%m/%y"; @@ -22,6 +27,11 @@ NewAptStartTime: WOString { escapeHTML = NO; } +IsNotNewAllDay: WOConditional { + condition = apt.isAllDay; + negate = YES; +} + Organizer: WOString { value = organizerName; escapeHTML = NO; diff --git a/SoObjects/Appointments/SOGoAptMailGermanUpdate.wo/SOGoAptMailGermanUpdate.html b/SoObjects/Appointments/SOGoAptMailGermanUpdate.wo/SOGoAptMailGermanUpdate.html index a1fe49195..0de7e95ad 100644 --- a/SoObjects/Appointments/SOGoAptMailGermanUpdate.wo/SOGoAptMailGermanUpdate.html +++ b/SoObjects/Appointments/SOGoAptMailGermanUpdate.wo/SOGoAptMailGermanUpdate.html @@ -1,5 +1,5 @@ <#IsSubject>Der Termin "<#Summary />" am <#OldAptStartDate /> um <#OldAptStartTime /> hat sich geändert <#IsBody> -Dieser Termin <#HasSentBy>(sent by <#sentBy/>), ursprünglich geplant am <#OldAptStartDate /> um <#OldAptStartTime /><#HasOldLocation> (<#OldAptLocation />), ist nun verschoben auf den <#NewAptStartDate /> um <#NewAptStartTime /><#HasNewLocation> (<#NewAptLocation />). +Dieser Termin <#HasSentBy>(sent by <#sentBy/>), ursprünglich geplant am <#OldAptStartDate /><#IsNotOldAllDay> um <#OldAptStartTime /><#HasOldLocation> (<#OldAptLocation />), ist nun verschoben auf den <#NewAptStartDate /><#IsNotNewAllDay> um <#NewAptStartTime /><#HasNewLocation> (<#NewAptLocation />). Bitte treffen Sie eine Entscheidung über diese Änderung. diff --git a/SoObjects/Appointments/SOGoAptMailGermanUpdate.wo/SOGoAptMailGermanUpdate.wod b/SoObjects/Appointments/SOGoAptMailGermanUpdate.wo/SOGoAptMailGermanUpdate.wod index 65021fc5a..df9b65c38 100644 --- a/SoObjects/Appointments/SOGoAptMailGermanUpdate.wo/SOGoAptMailGermanUpdate.wod +++ b/SoObjects/Appointments/SOGoAptMailGermanUpdate.wo/SOGoAptMailGermanUpdate.wod @@ -10,6 +10,11 @@ OldAptStartTime: WOString { escapeHTML = NO; } +IsNotOldAllDay: WOConditional { + condition = previousApt.isAllDay; + negate = YES; +} + NewAptStartDate: WOString { value = newStartDate; dateformat = "%d/%m/%y"; @@ -22,6 +27,11 @@ NewAptStartTime: WOString { escapeHTML = NO; } +IsNotNewAllDay: WOConditional { + condition = apt.isAllDay; + negate = YES; +} + Organizer: WOString { value = organizerName; escapeHTML = NO; diff --git a/SoObjects/Appointments/SOGoAptMailItalianUpdate.wo/SOGoAptMailItalianUpdate.html b/SoObjects/Appointments/SOGoAptMailItalianUpdate.wo/SOGoAptMailItalianUpdate.html index a36e94a2b..5b2637a8a 100644 --- a/SoObjects/Appointments/SOGoAptMailItalianUpdate.wo/SOGoAptMailItalianUpdate.html +++ b/SoObjects/Appointments/SOGoAptMailItalianUpdate.wo/SOGoAptMailItalianUpdate.html @@ -1,5 +1,5 @@ <#IsSubject>L'appuntamento "<#Summary />" fissato in data <#OldAptStartDate /> alle ore <#OldAptStartTime /> è stato modificato <#IsBody> -Questo appuntamento<#HasSentBy> (sent by <#sentBy/>), fissato precedentemete in data <#OldAptStartDate /><#HasOldLocation> (<#OldAptLocation />) alle ore <#OldAptStartTime /> è ora programmato il <#NewAptStartDate /> alle ore <#NewAptStartTime/><#HasNewLocation> (<#NewAptLocation />). +Questo appuntamento<#HasSentBy> (sent by <#sentBy/>), fissato precedentemete in data <#OldAptStartDate /><#HasOldLocation> (<#OldAptLocation />)<#IsNotOldAllDay> alle ore <#OldAptStartTime /> è ora programmato il <#NewAptStartDate /><#IsNotNewAllDay> alle ore <#NewAptStartTime/><#HasNewLocation> (<#NewAptLocation />). Per confermare o disdire. diff --git a/SoObjects/Appointments/SOGoAptMailItalianUpdate.wo/SOGoAptMailItalianUpdate.wod b/SoObjects/Appointments/SOGoAptMailItalianUpdate.wo/SOGoAptMailItalianUpdate.wod index 65021fc5a..df9b65c38 100644 --- a/SoObjects/Appointments/SOGoAptMailItalianUpdate.wo/SOGoAptMailItalianUpdate.wod +++ b/SoObjects/Appointments/SOGoAptMailItalianUpdate.wo/SOGoAptMailItalianUpdate.wod @@ -10,6 +10,11 @@ OldAptStartTime: WOString { escapeHTML = NO; } +IsNotOldAllDay: WOConditional { + condition = previousApt.isAllDay; + negate = YES; +} + NewAptStartDate: WOString { value = newStartDate; dateformat = "%d/%m/%y"; @@ -22,6 +27,11 @@ NewAptStartTime: WOString { escapeHTML = NO; } +IsNotNewAllDay: WOConditional { + condition = apt.isAllDay; + negate = YES; +} + Organizer: WOString { value = organizerName; escapeHTML = NO; diff --git a/SoObjects/Appointments/SOGoAptMailSpanishUpdate.wo/SOGoAptMailSpanishUpdate.html b/SoObjects/Appointments/SOGoAptMailSpanishUpdate.wo/SOGoAptMailSpanishUpdate.html index ade9f7f44..10b806356 100644 --- a/SoObjects/Appointments/SOGoAptMailSpanishUpdate.wo/SOGoAptMailSpanishUpdate.html +++ b/SoObjects/Appointments/SOGoAptMailSpanishUpdate.wo/SOGoAptMailSpanishUpdate.html @@ -1,5 +1,5 @@ <#IsSubject>The appointment "<#Summary />" for the <#OldAptStartDate /> at <#OldAptStartTime /> has changed <#IsBody> -This appointment<#HasSentBy> (sent by <#sentBy/>), previously set for <#OldAptStartDate /> at <#OldAptStartTime /><#HasOldLocation> (<#OldAptLocation />) is now scheduled for <#NewAptStartDate /> at <#NewAptStartTime /><#HasNewLocation> (<#NewAptLocation />). +This appointment<#HasSentBy> (sent by <#sentBy/>), previously set for <#OldAptStartDate /><#IsNotOldAllDay> at <#OldAptStartTime /><#HasOldLocation> (<#OldAptLocation />) is now scheduled for <#NewAptStartDate /><#IsNotNewAllDay> at <#NewAptStartTime /><#HasNewLocation> (<#NewAptLocation />). Please make a decision for these new settings. diff --git a/SoObjects/Appointments/SOGoAptMailSpanishUpdate.wo/SOGoAptMailSpanishUpdate.wod b/SoObjects/Appointments/SOGoAptMailSpanishUpdate.wo/SOGoAptMailSpanishUpdate.wod index 65021fc5a..df9b65c38 100644 --- a/SoObjects/Appointments/SOGoAptMailSpanishUpdate.wo/SOGoAptMailSpanishUpdate.wod +++ b/SoObjects/Appointments/SOGoAptMailSpanishUpdate.wo/SOGoAptMailSpanishUpdate.wod @@ -10,6 +10,11 @@ OldAptStartTime: WOString { escapeHTML = NO; } +IsNotOldAllDay: WOConditional { + condition = previousApt.isAllDay; + negate = YES; +} + NewAptStartDate: WOString { value = newStartDate; dateformat = "%d/%m/%y"; @@ -22,6 +27,11 @@ NewAptStartTime: WOString { escapeHTML = NO; } +IsNotNewAllDay: WOConditional { + condition = apt.isAllDay; + negate = YES; +} + Organizer: WOString { value = organizerName; escapeHTML = NO; diff --git a/SoObjects/Appointments/SOGoCalendarComponent.m b/SoObjects/Appointments/SOGoCalendarComponent.m index 017473402..82cc7899b 100644 --- a/SoObjects/Appointments/SOGoCalendarComponent.m +++ b/SoObjects/Appointments/SOGoCalendarComponent.m @@ -570,7 +570,11 @@ _occurenceHasID (iCalRepeatableEntityObject *occurence, NSString *recID) for (i = 0; i < count; i++) { attendee = [attendees objectAtIndex: i]; - if (![[attendee uid] isEqualToString: owner]) + // Don't send a notification to the event organizer nor a deletion + // notification to an attendee who already declined the invitation. + if (![[attendee uid] isEqualToString: owner] && + !([[attendee partStat] compare: @"DECLINED"] == NSOrderedSame && + [newPageName compare: @"Deletion"] == NSOrderedSame)) { /* construct recipient */ recipient = [attendee mailAddress]; diff --git a/SoObjects/Contacts/SOGoContactFolders.m b/SoObjects/Contacts/SOGoContactFolders.m index b83e7bd7d..c2330347f 100644 --- a/SoObjects/Contacts/SOGoContactFolders.m +++ b/SoObjects/Contacts/SOGoContactFolders.m @@ -50,7 +50,7 @@ return [SOGoContactGCSFolder class]; } -- (void) appendSystemSources +- (NSException *) appendSystemSources { LDAPUserManager *um; NSEnumerator *sourceIDs; @@ -68,6 +68,8 @@ [currentFolder setLDAPSource: [um sourceWithID: currentSourceID]]; [subFolders setObject: currentFolder forKey: currentSourceID]; } + + return nil; } - (NSString *) defaultFolderName diff --git a/SoObjects/SOGo/SOGoCache.m b/SoObjects/SOGo/SOGoCache.m index af3a7f305..932468722 100644 --- a/SoObjects/SOGo/SOGoCache.m +++ b/SoObjects/SOGo/SOGoCache.m @@ -416,10 +416,18 @@ static NSLock *lock; // - (void) _userDefaultsHaveChanged: (NSNotification *) theNotification { + SOGoUser *user; SOGoUserDefaults *defaults; NSString *uid; uid = [[theNotification userInfo] objectForKey: @"uid"]; + + // When the user defaults changed, we must invalidate the + // ivar language for the user object. + user = [self userNamed: uid]; + if (user) + [user invalidateLanguage]; + //NSLog(@"Updating user defaults for UID: %@", uid); defaults = (SOGoUserDefaults *)[self userDefaultsForLogin: uid]; if (defaults) diff --git a/SoObjects/SOGo/SOGoGCSFolder.m b/SoObjects/SOGo/SOGoGCSFolder.m index 8ae3a117b..2e08717ca 100644 --- a/SoObjects/SOGo/SOGoGCSFolder.m +++ b/SoObjects/SOGo/SOGoGCSFolder.m @@ -621,9 +621,6 @@ static NSArray *childRecordFields = nil; NSUserDefaults *ud; NSMutableDictionary *moduleSettings; - ud = [subscribingUser userSettings]; - moduleSettings = [ud objectForKey: [container nameInContainer]]; - if ([owner isEqualToString: [subscribingUser login]]) { [response setStatus: 403]; @@ -632,6 +629,15 @@ static NSArray *childRecordFields = nil; } else { + ud = [subscribingUser userSettings]; + moduleSettings = [ud objectForKey: [container nameInContainer]]; + if (!(moduleSettings + && [moduleSettings isKindOfClass: [NSMutableDictionary class]])) + { + moduleSettings = [NSMutableDictionary dictionary]; + [ud setObject: moduleSettings forKey: [container nameInContainer]]; + } + folderSubscription = [moduleSettings objectForKey: @"SubscribedFolders"]; if (!(folderSubscription diff --git a/SoObjects/SOGo/SOGoObject.m b/SoObjects/SOGo/SOGoObject.m index 2858b14d3..44b613c87 100644 --- a/SoObjects/SOGo/SOGoObject.m +++ b/SoObjects/SOGo/SOGoObject.m @@ -561,8 +561,8 @@ SEL SOGoSelectorForPropertySetter (NSString *property) [self _davPrivilegesFromRoles: roles]); [currentAce addObject: currentGrant]; [aces addObject: davElementWithContent (@"ace", @"DAV:", currentAce)]; - [currentAce release]; } + [currentAce release]; } - (void) _fillAcesWithRolesForPseudoPrincipals: (NSMutableArray *) aces diff --git a/SoObjects/SOGo/SOGoUser.h b/SoObjects/SOGo/SOGoUser.h index 5ee7088e4..217a5017b 100644 --- a/SoObjects/SOGo/SOGoUser.h +++ b/SoObjects/SOGo/SOGoUser.h @@ -93,6 +93,7 @@ extern NSString *SOGoWeekStartFirstFullWeek; - (NSUserDefaults *) userDefaults; - (NSUserDefaults *) userSettings; +- (void) invalidateLanguage; - (NSString *) language; - (NSTimeZone *) timeZone; - (NSTimeZone *) serverTimeZone; diff --git a/SoObjects/SOGo/SOGoUser.m b/SoObjects/SOGo/SOGoUser.m index 3d4a4a9aa..abcd0499b 100644 --- a/SoObjects/SOGo/SOGoUser.m +++ b/SoObjects/SOGo/SOGoUser.m @@ -280,6 +280,7 @@ _timeValue (NSString *key) [allEmails release]; [currentPassword release]; [cn release]; + [language release]; [super dealloc]; } @@ -465,7 +466,7 @@ _timeValue (NSString *key) if (values) { // See explanation in -language - language = nil; + [self invalidateLanguage]; // Required parameters for the Web interface. This will trigger the // preferences to load so it's important to leave those calls here. @@ -522,7 +523,7 @@ _timeValue (NSString *key) if (values) { // See explanation in -language - language = nil; + [self invalidateLanguage]; // We propagate the loaded user settings to other sogod instances // which will cache them in SOGoCache (including for the instance @@ -548,6 +549,11 @@ _timeValue (NSString *key) return (NSUserDefaults *) settings; } +- (void) invalidateLanguage +{ + DESTROY(language); +} + - (NSString *) language { if (![language length]) @@ -558,6 +564,8 @@ _timeValue (NSString *key) // many times when the DB is down, causing a huge delay. if (![language length]) language = [SOGoUser language]; + + [language retain]; } return language; @@ -740,7 +748,7 @@ _timeValue (NSString *key) [mailAccount setObject: identities forKey: @"identities"]; - mailAccounts = [NSMutableArray new]; + mailAccounts = [NSMutableArray array]; [mailAccounts addObject: mailAccount]; return mailAccounts; diff --git a/UI/MailPartViewers/UIxMailPartICalActions.m b/UI/MailPartViewers/UIxMailPartICalActions.m index e6e483d6c..a58978018 100644 --- a/UI/MailPartViewers/UIxMailPartICalActions.m +++ b/UI/MailPartViewers/UIxMailPartICalActions.m @@ -21,6 +21,7 @@ */ #import +#import #import #import @@ -41,6 +42,7 @@ #import #import #import +#import #import #import #import @@ -69,27 +71,33 @@ - (SOGoAppointmentObject *) _eventObjectWithUID: (NSString *) uid forUser: (SOGoUser *) user { - SOGoAppointmentFolder *personalFolder; + SOGoAppointmentFolder *folder; SOGoAppointmentObject *eventObject; + NSArray *folders; + NSEnumerator *e; NSString *cname; eventObject = nil; -#warning Should call lookupCalendarFoldersForUIDs to search among all folders - personalFolder = [user personalCalendarFolderInContext: context]; - cname = [personalFolder resourceNameForEventUID: uid]; - if (cname) + folders = [[user calendarsFolderInContext: context] subFolders]; + e = [folders objectEnumerator]; + while ( eventObject == nil && (folder = [e nextObject]) ) { - eventObject = [personalFolder lookupName: cname - inContext: context acquire: NO]; - if (![eventObject isKindOfClass: [SOGoAppointmentObject class]]) - eventObject = nil; + cname = [folder resourceNameForEventUID: uid]; + if (cname) + { + eventObject = [folder lookupName: cname + inContext: context acquire: NO]; + if (![eventObject isKindOfClass: [SOGoAppointmentObject class]]) + eventObject = nil; + } } - + if (!eventObject) { + folder = [user personalCalendarFolderInContext: context]; eventObject = [SOGoAppointmentObject objectWithName: uid - inContainer: personalFolder]; + inContainer: folder]; [eventObject setIsNew: YES]; } diff --git a/UI/MailPartViewers/UIxMailPartICalViewer.m b/UI/MailPartViewers/UIxMailPartICalViewer.m index 4a18f0284..69916a243 100644 --- a/UI/MailPartViewers/UIxMailPartICalViewer.m +++ b/UI/MailPartViewers/UIxMailPartICalViewer.m @@ -164,7 +164,7 @@ return item; } -- (NSCalendarDate *) startTime +- (NSCalendarDate *) startCalendarDate { NSCalendarDate *date; NSTimeZone *timeZone; @@ -172,11 +172,21 @@ date = [[self inEvent] startDate]; timeZone = [[context activeUser] timeZone]; [date setTimeZone: timeZone]; - + return date; } -- (NSCalendarDate *) endTime +- (NSString *) startDate +{ + return [[self dateFormatter] formattedDate: [self startCalendarDate]]; +} + +- (NSString *) startTime +{ + return [[self dateFormatter] formattedTime: [self startCalendarDate]]; +} + +- (NSCalendarDate *) endCalendarDate { NSCalendarDate *date; NSTimeZone *timeZone; @@ -188,14 +198,35 @@ return date; } +- (NSString *) endDate +{ + NSCalendarDate *aDate; + if ([[self inEvent] isAllDay]) + aDate = [[self endCalendarDate] dateByAddingYears:0 months:0 days:0 hours:0 minutes:0 seconds:-1]; + else + aDate = [self endCalendarDate]; + + return [[self dateFormatter] formattedDate: aDate]; +} + +- (NSString *) endTime +{ + return [[self dateFormatter] formattedTime: [self endCalendarDate]]; +} + - (BOOL) isEndDateOnSameDay { - return [[self startTime] isDateOnSameDay:[self endTime]]; + NSCalendarDate *aDate; + if ([[self inEvent] isAllDay]) + aDate = [[self endCalendarDate] dateByAddingYears:0 months:0 days:0 hours:0 minutes:0 seconds:-1]; + else + aDate = [self endCalendarDate]; + return [[self startCalendarDate] isDateOnSameDay: aDate]; } - (NSTimeInterval) duration { - return [[self endTime] timeIntervalSinceDate:[self startTime]]; + return [[self endCalendarDate] timeIntervalSinceDate:[self startCalendarDate]]; } /* calendar folder support */ diff --git a/UI/MailerUI/UIxMailListView.m b/UI/MailerUI/UIxMailListView.m index 0ee6599fb..e560af6c4 100644 --- a/UI/MailerUI/UIxMailListView.m +++ b/UI/MailerUI/UIxMailListView.m @@ -1,14 +1,15 @@ /* Copyright (C) 2004-2005 SKYRIX Software AG + Copyright (C) 2006-2009 Inverse inc. - This file is part of OpenGroupware.org. + This file is part of SOGo - OGo is free software; you can redistribute it and/or modify it under + SOGo is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. - OGo is distributed in the hope that it will be useful, but WITHOUT ANY + SOGo is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. @@ -459,21 +460,26 @@ - (NSArray *) messages { + NSMutableArray *unsortedMsgs; + NSMutableDictionary *map; + NSDictionary *msgs; NSArray *uids; - NSDictionary *msgs, *msg; - NSEnumerator *msgsList; - NSMutableArray *unsortedMsgs, *sortedMsgs; + + unsigned len, i, count; NSRange r; - unsigned len, index; if (!messages) { - r = [self fetchBlock]; + r = [self fetchBlock]; uids = [self sortedUIDs]; len = [uids count]; + + // only need to restrict if we have a lot if (len > r.length) - /* only need to restrict if we have a lot */ + { uids = [uids subarrayWithRange: r]; + len = [uids count]; + } // Don't assume the IMAP server return the messages in the // same order as the specified list of UIDs (specially true for @@ -481,17 +487,24 @@ msgs = (NSDictionary *) [[self clientObject] fetchUIDs: uids parts: [self fetchKeys]]; unsortedMsgs = [msgs objectForKey: @"fetch"]; - sortedMsgs = [NSMutableArray arrayWithCapacity: [unsortedMsgs count]]; - msgsList = [unsortedMsgs objectEnumerator]; - while ( (msg = [msgsList nextObject]) ) + count = [unsortedMsgs count]; + + messages = [NSMutableArray arrayWithCapacity: count]; + + // We build our uid->message map from our FETCH response + map = [[NSMutableDictionary alloc] initWithCapacity: count]; + + for (i = 0; i < count; i++) + [map setObject: [unsortedMsgs objectAtIndex: i] + forKey: [[unsortedMsgs objectAtIndex: i] objectForKey: @"uid"]]; + + for (i = 0; i < len; i++) { - index = [uids indexOfObject: [msg objectForKey: @"uid"]]; - if (index < [sortedMsgs count]) - [sortedMsgs insertObject: msg atIndex: index]; - else - [sortedMsgs addObject: msg]; + [(NSMutableArray *)messages addObject: [map objectForKey: [uids objectAtIndex: i]]]; } - messages = [[NSArray arrayWithArray: sortedMsgs] retain]; + + RELEASE(map); + RETAIN(messages); } return messages; diff --git a/UI/MainUI/SOGoRootPage.m b/UI/MainUI/SOGoRootPage.m index 6ba80cf68..914abbf74 100644 --- a/UI/MainUI/SOGoRootPage.m +++ b/UI/MainUI/SOGoRootPage.m @@ -96,6 +96,7 @@ static NSArray *supportedLanguages = nil; user = [SOGoUser userWithLogin: userName roles: nil]; [[user userDefaults] setObject: language forKey: @"Language"]; [[user userDefaults] synchronize]; + [user invalidateLanguage]; } } else diff --git a/UI/MainUI/Version b/UI/MainUI/Version index 051efa3c5..5768c75df 100644 --- a/UI/MainUI/Version +++ b/UI/MainUI/Version @@ -1,5 +1,5 @@ # Version file -SUBMINOR_VERSION:=0 +SUBMINOR_VERSION:=1 # v0.9.1 requires Main v0.9.59 diff --git a/UI/Scheduler/UIxCalListingActions.m b/UI/Scheduler/UIxCalListingActions.m index 85ed4e5d3..82d950c9c 100644 --- a/UI/Scheduler/UIxCalListingActions.m +++ b/UI/Scheduler/UIxCalListingActions.m @@ -90,7 +90,7 @@ static NSArray *tasksFields = nil; endDate = nil; ASSIGN (request, newRequest); user = [[self context] activeUser]; - dateFormatter = [user dateFormatterInContext: context]; + ASSIGN (dateFormatter, [user dateFormatterInContext: context]); ASSIGN (userTimeZone, [user timeZone]); dayBasedView = NO; } @@ -103,8 +103,6 @@ static NSArray *tasksFields = nil; [dateFormatter release]; [request release]; [componentsData release]; - [startDate release]; - [endDate release]; [userTimeZone release]; [super dealloc]; } diff --git a/UI/Scheduler/UIxCalMainView.m b/UI/Scheduler/UIxCalMainView.m index 86cd931ce..f1c56ee87 100644 --- a/UI/Scheduler/UIxCalMainView.m +++ b/UI/Scheduler/UIxCalMainView.m @@ -40,9 +40,6 @@ #import -static NSMutableArray *monthMenuItems = nil; -static NSMutableArray *yearMenuItems = nil; - @implementation UIxCalMainView - (void) _setupContext @@ -60,24 +57,22 @@ static NSMutableArray *yearMenuItems = nil; moduleSettings = [ud objectForKey: module]; if (!moduleSettings) { - moduleSettings = [NSMutableDictionary new]; - [moduleSettings autorelease]; + moduleSettings = [NSMutableDictionary dictionary]; + [ud setObject: moduleSettings forKey: module]; } - [ud setObject: moduleSettings forKey: module]; } - (NSArray *) monthMenuItems { + static NSMutableArray *monthMenuItems = nil; unsigned int count; if (!monthMenuItems) { - monthMenuItems = [NSMutableArray arrayWithCapacity: 12]; - + monthMenuItems = [[NSMutableArray alloc] initWithCapacity: 12]; for (count = 1; count < 13; count++) [monthMenuItems addObject: [NSString stringWithFormat: @"%.2d", count]]; - [monthMenuItems retain]; } return monthMenuItems; @@ -100,15 +95,15 @@ static NSMutableArray *yearMenuItems = nil; - (NSArray *) yearMenuItems { + static NSMutableArray *yearMenuItems = nil; int count, year; if (!yearMenuItems) { year = [[NSCalendarDate date] yearOfCommonEra]; - yearMenuItems = [NSMutableArray arrayWithCapacity: 11]; + yearMenuItems = [[NSMutableArray alloc] initWithCapacity: 11]; for (count = -5; count < 6; count++) [yearMenuItems addObject: [NSNumber numberWithInt: year + count]]; - [yearMenuItems retain]; } return yearMenuItems; diff --git a/UI/Scheduler/UIxComponentEditor.m b/UI/Scheduler/UIxComponentEditor.m index a8375cfe0..8ffe9460a 100644 --- a/UI/Scheduler/UIxComponentEditor.m +++ b/UI/Scheduler/UIxComponentEditor.m @@ -94,16 +94,18 @@ iRANGE(2); - (id) init { + UIxDatePicker *datePicker; + if ((self = [super init])) { - UIxDatePicker *datePicker; - // We must instanciate a UIxDatePicker object to retrieve // the proper date format to use. datePicker = [[UIxDatePicker alloc] initWithContext: context]; dateFormat = [datePicker dateFormat]; - + [datePicker release]; + component = nil; + componentCalendar = nil; [self setPrivacy: @"PUBLIC"]; [self setIsCycleEndNever]; componentOwner = @""; @@ -126,8 +128,6 @@ iRANGE(2); repeat7 = nil; range1 = nil; range2 = nil; - - [datePicker release]; } return self; @@ -166,8 +166,9 @@ iRANGE(2); [repeat7 release]; [range1 release]; [range2 release]; - + [component release]; + [componentCalendar release]; [super dealloc]; } @@ -180,10 +181,10 @@ iRANGE(2); NSString *uid; LDAPUserManager *um; - names = [NSMutableString new]; - uids = [NSMutableString new]; - emails = [NSMutableString new]; - states = [NSMutableString new]; + names = [NSMutableString string]; + uids = [NSMutableString string]; + emails = [NSMutableString string]; + states = [NSMutableString string]; um = [LDAPUserManager sharedUserManager]; attendees = [[component attendees] objectEnumerator]; @@ -193,7 +194,7 @@ iRANGE(2); [names appendFormat: @"%@,", [currentAttendee cn]]; else [names appendFormat: @"%@,", [currentAttendee rfc822Email]]; - + [emails appendFormat: @"%@,", [currentAttendee rfc822Email]]; uid = [um getUIDForEmail: [currentAttendee rfc822Email]]; if (uid != nil) @@ -212,9 +213,6 @@ iRANGE(2); [emails substringToIndex: [emails length] - 1]); ASSIGN (attendeesStates, [states substringToIndex: [states length] - 1]); } - - [names release]; - [emails release]; } - (void) _loadCategories @@ -364,7 +362,12 @@ iRANGE(2); [self setRange1: @"0"]; } else - DESTROY(repeat); + { + DESTROY(repeat); + repeatType = @"0"; + repeat1 = @"0"; + repeat2 = @"1"; + } } /* warning: we use this method which will be triggered by the template system @@ -397,7 +400,7 @@ iRANGE(2); [self _loadAttendees]; [self _loadRRules]; - [componentCalendar release]; + [componentCalendar release]; componentCalendar = [co container]; if ([componentCalendar isKindOfClass: [SOGoCalendarComponent class]]) componentCalendar = [componentCalendar container]; @@ -1435,19 +1438,22 @@ RANGE(2); // case 0: { - [theRule setFrequency: iCalRecurrenceFrequenceDaily]; + if ([[self repeat2] intValue] > 0) + { + [theRule setFrequency: iCalRecurrenceFrequenceDaily]; - if ([[self repeat1] intValue] == 0) - { - [theRule setInterval: [self repeat2]]; - } - else - { - [theRule setByDayMask: (iCalWeekDayMonday - |iCalWeekDayTuesday - |iCalWeekDayWednesday - |iCalWeekDayThursday - |iCalWeekDayFriday)]; + if ([[self repeat1] intValue] == 0) + { + [theRule setInterval: [self repeat2]]; + } + else + { + [theRule setByDayMask: (iCalWeekDayMonday + |iCalWeekDayTuesday + |iCalWeekDayWednesday + |iCalWeekDayThursday + |iCalWeekDayFriday)]; + } } } break; @@ -1462,20 +1468,23 @@ RANGE(2); // The list is separated by commas, like: 1,3,4 case 1: { - NSArray *v; - int c, mask; + if ([[self repeat1] intValue] > 0) + { + NSArray *v; + int c, mask; - [theRule setFrequency: iCalRecurrenceFrequenceWeekly]; - [theRule setInterval: [self repeat1]]; + [theRule setFrequency: iCalRecurrenceFrequenceWeekly]; + [theRule setInterval: [self repeat1]]; - v = [[self repeat2] componentsSeparatedByString: @","]; - c = [v count]; - mask = 0; + v = [[self repeat2] componentsSeparatedByString: @","]; + c = [v count]; + mask = 0; - while (c--) - mask |= 1 << ([[v objectAtIndex: c] intValue]); + while (c--) + mask |= 1 << ([[v objectAtIndex: c] intValue]); - [theRule setByDayMask: mask]; + [theRule setByDayMask: mask]; + } } break; @@ -1501,17 +1510,21 @@ RANGE(2); // case 2: { - [theRule setFrequency: iCalRecurrenceFrequenceMonthly]; - [theRule setInterval: [self repeat1]]; + if ([[self repeat1] intValue] > 0) + { + [theRule setFrequency: iCalRecurrenceFrequenceMonthly]; + [theRule setInterval: [self repeat1]]; - // We recur on specific days... - if ([[self repeat2] intValue] == 1) - { - [theRule setNamedValue: @"bymonthday" to: [self repeat5]]; - } - else - { - // TODO + // We recur on specific days... + if ([[self repeat2] intValue] == 1 + && [[self repeat5] intValue] > 0) + { + [theRule setNamedValue: @"bymonthday" to: [self repeat5]]; + } + else + { + // TODO + } } } break; @@ -1535,19 +1548,27 @@ RANGE(2); case 3: default: { - [theRule setFrequency: iCalRecurrenceFrequenceYearly]; - [theRule setInterval: [self repeat1]]; + if ([[self repeat1] intValue] > 0) + { + [theRule setFrequency: iCalRecurrenceFrequenceYearly]; + [theRule setInterval: [self repeat1]]; - // We recur Every .. of .. - if ([[self repeat2] intValue] == 1) - { - // TODO - } - else - { - [theRule setNamedValue: @"bymonthday" to: [self repeat3]]; - [theRule setNamedValue: @"bymonth" - to: [NSString stringWithFormat: @"%d", ([[self repeat4] intValue]+1)]]; + // We recur Every .. of .. + if ([[self repeat2] intValue] == 1) + { + // TODO + } + else + { + if ([[self repeat3] intValue] > 0 + && [[self repeat4] intValue] > 0) + { + [theRule setNamedValue: @"bymonthday" + to: [self repeat3]]; + [theRule setNamedValue: @"bymonth" + to: [NSString stringWithFormat: @"%d", ([[self repeat4] intValue]+1)]]; + } + } } } break; diff --git a/UI/Scheduler/UIxRecurrenceEditor.m b/UI/Scheduler/UIxRecurrenceEditor.m index 6fc576fe5..cdc4ba4e1 100644 --- a/UI/Scheduler/UIxRecurrenceEditor.m +++ b/UI/Scheduler/UIxRecurrenceEditor.m @@ -29,13 +29,6 @@ @implementation UIxRecurrenceEditor -- (id) defaultAction -{ - [[self parent] setToolbar: @""]; - - return self; -} - - (NSArray *) monthlyRepeatList { static NSArray *monthlyRepeatList = nil; @@ -43,7 +36,7 @@ if (!monthlyRepeatList) { monthlyRepeatList = [NSArray arrayWithObjects: @"First", @"Second", @"Third", - @"Fourth", @"Fift", @"Last", nil]; + @"Fourth", @"Fift", @"Last", nil]; [monthlyRepeatList retain]; } diff --git a/UI/Templates/MailPartViewers/UIxMailPartICalViewer.wox b/UI/Templates/MailPartViewers/UIxMailPartICalViewer.wox index 96bf1e168..cf76b98c8 100644 --- a/UI/Templates/MailPartViewers/UIxMailPartICalViewer.wox +++ b/UI/Templates/MailPartViewers/UIxMailPartICalViewer.wox @@ -167,9 +167,23 @@ : - - - + + + + + + + + + + + + + + + + + diff --git a/UI/WebServerResources/GNUmakefile b/UI/WebServerResources/GNUmakefile index b2e166e74..36c2bab6f 100644 --- a/UI/WebServerResources/GNUmakefile +++ b/UI/WebServerResources/GNUmakefile @@ -2,7 +2,7 @@ include ../common.make -WEBSERVER_RESOURCE_FILES = $(shell ls *css *ico *js *.jpg *gif *png *html *txt) +WEBSERVER_RESOURCE_FILES = $(shell ls *css *ico *js *gif *png *html *txt) all :: diff --git a/UI/WebServerResources/UIxRecurrenceEditor.js b/UI/WebServerResources/UIxRecurrenceEditor.js index a30ef240a..71832056a 100644 --- a/UI/WebServerResources/UIxRecurrenceEditor.js +++ b/UI/WebServerResources/UIxRecurrenceEditor.js @@ -86,10 +86,20 @@ function initializeFormValues() { $("repeatType").value = repeatType; // Default values + var startTimeDate = parent$("startTime_date").value.asDate(); + $('yearlyDayField').value = startTimeDate.getDate(); + $('yearlyMonth1').value = startTimeDate.getMonth(); + $("weekDay"+startTimeDate.getDay()).addClassName("_selected"); + $("monthDay"+startTimeDate.getDate()).addClassName("_selected"); + $('recurrence_form').setRadioValue('dailyRadioButtonName', 0); - $('recurrence_form').setRadioValue('monthlyRadioButtonName', 0); + $('recurrence_form').setRadioValue('monthlyRadioButtonName', 1); $('recurrence_form').setRadioValue('yearlyRadioButtonName', 0); $('endDate_date').disabled = true; + $('dailyDaysField').value = "1"; + $('weeklyWeeksField').value = "1"; + $('monthlyMonthsField').value = "1"; + $('yearlyYearsField').value = "1"; if (repeatType == 0) { // Repeat daily @@ -101,6 +111,9 @@ function initializeFormValues() { $('weeklyWeeksField').value = parent$("repeat1").value; // log ("div: " + weekDiv); // log ("days: " + parent$("repeat2").value); + for (var i = 0; i < 7; i++) { + $("weekDay" + i).removeClassName("_selected"); + } var days = "" + parent$("repeat2").value; if (days.length > 0) { var daysArray = days.split(","); @@ -116,6 +129,10 @@ function initializeFormValues() { $('monthlyRepeat').value = parent$("repeat3").value; $('monthlyDay').value = parent$("repeat4").value; var days = "" + parent$("repeat5").value; + for (var i = 0; i < 31; i++) { + $("monthDay" + (i + 1)).removeClassName("_selected"); + } + if (days.length > 0) { var daysArray = days.split(","); daysArray.each(function(index) { @@ -253,37 +270,65 @@ function handleMonthlyRecurrence() { return validate; } +function validateYearlyRecurrence() { + var errors = ["Please specify a numerical value in the Year(s)" + + " field greater or equal to 1.", + "Please specify a numerical value in the month day" + + " field greater or equal to 1."]; + + var errorToShow = 0; + var fieldValue = "" + $('yearlyYearsField').value; + if (fieldValue.length > 0) { + // We check if the yearlyYearsField really contains an integer + var v = parseInt(fieldValue); + if (!isNaN(v) && v > 0) { + errorToShow = 1; + fieldValue = "" + $('yearlyDayField').value; + if (fieldValue.length > 0) { + // We check if the yearlyYearsField really contains an integer + var v = parseInt(fieldValue); + if (!isNaN(v) && v > 0) { + errorToShow = -1; + } + } + } + } + + if (errorToShow > -1) + window.alert(errors[errorToShow]); + + return (errorToShow == -1); +} + function handleYearlyRecurrence() { var validate = false; var radioValue = $('recurrence_form').getRadioValue('yearlyRadioButtonName'); - // FIXME - right now we do not support rules // such as Every Second Tuesday of February if (radioValue == 1) window.alert("This type of recurrence is currently unsupported."); else { - var showError = true; - - var fieldValue = "" + $('yearlyYearsField').value; - if (fieldValue.length > 0) { - // We check if the yearlyYearsField really contains an integer - var v = parseInt(fieldValue); - if (!isNaN(v) && v > 0) { - validate = true; - showError = false; - parent$("repeat1").value = fieldValue; - parent$("repeat2").value = radioValue; - parent$("repeat3").value = $('yearlyDayField').value; - parent$("repeat4").value = $('yearlyMonth1').value; - parent$("repeat5").value = $('yearlyRepeat').value; - parent$("repeat6").value = $('yearlyDay').value; - parent$("repeat7").value = $('yearlyMonth2').value; - } - } - - if (showError) - window.alert("Please specify a numerical value in the Year(s) field greater or equal to 1."); + if (validateYearlyRecurrence()) { + var fieldValue = "" + $('yearlyYearsField').value; + if (fieldValue.length > 0) { + // We check if the yearlyYearsField really contains an integer + var v = parseInt(fieldValue); + if (!isNaN(v) && v > 0) { + validate = true; + showError = false; + parent$("repeat1").value = fieldValue; + parent$("repeat2").value = radioValue; + parent$("repeat3").value = $('yearlyDayField').value; + parent$("repeat4").value = $('yearlyMonth1').value; + parent$("repeat5").value = $('yearlyRepeat').value; + parent$("repeat6").value = $('yearlyDay').value; + parent$("repeat7").value = $('yearlyMonth2').value; + } + } + } + else + validate = false; } return validate; diff --git a/UI/WebServerResources/generic.js b/UI/WebServerResources/generic.js index 7849981f6..b9bf21130 100644 --- a/UI/WebServerResources/generic.js +++ b/UI/WebServerResources/generic.js @@ -1461,6 +1461,7 @@ function configureSortableTableHeaders(table) { var headers = $(table).getElementsByClassName("sortableTableHeader"); for (var i = 0; i < headers.length; i++) { var header = $(headers[i]); + header.stopObserving("click", onHeaderClick); header.observe("click", onHeaderClick); } } diff --git a/UI/WebServerResources/lori-login.jpg b/UI/WebServerResources/lori-login.jpg deleted file mode 100644 index 7ab42d121..000000000 Binary files a/UI/WebServerResources/lori-login.jpg and /dev/null differ diff --git a/sogo.spec b/sogo.spec index 044f9af60..ef5b7b99b 100644 --- a/sogo.spec +++ b/sogo.spec @@ -97,9 +97,7 @@ rm -fr ${RPM_BUILD_ROOT} # ****************************** build ******************************** %build . /usr/GNUstep/System/Library/Makefiles/GNUstep.sh -./configure \ - --enable-strip \ - --disable-debug +./configure case %{_target_platform} in ppc64-*) @@ -222,8 +220,11 @@ if ! id sogo >& /dev/null; then /usr/sbin/adduser sogo > /dev/null 2>&1; fi /sbin/chkconfig --add sogod %preun -/sbin/chkconfig --del sogod -/sbin/service sogod stop > /dev/null 2>&1 +if [ "$1" == "0" ] +then + /sbin/chkconfig --del sogod + /sbin/service sogod stop > /dev/null 2>&1 +fi %postun if test "$1" = "0"