* v0.9.35
+ * README: updated with new default description
+
* SOGoUserHomePage.wox: in case user is not authorized to change the
internet access flag, the rendered text is different now
Defaults
========
+ SOGoDefaultLanguage - string - currently used for selecting the language of
+ the mail templates. Default is "French".
+
SOGoCrashOnSessionCreate - bool - crash the server if a session is created
=> useful for debugging
AD2FA8730883B9FE009A91E7 /* SOGoAptMailNotification.m */ = {isa = PBXFileReference; fileEncoding = 5; indentWidth = 2; lastKnownFileType = sourcecode.c.objc; path = SOGoAptMailNotification.m; sourceTree = "<group>"; tabWidth = 2; };
AD2FA8740883B9FE009A91E7 /* SOGoAptMailNotification.h */ = {isa = PBXFileReference; fileEncoding = 5; indentWidth = 2; lastKnownFileType = sourcecode.c.h; path = SOGoAptMailNotification.h; sourceTree = "<group>"; tabWidth = 2; };
AD2FA8DB0883CCF0009A91E7 /* SOGoAptMailInvitation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SOGoAptMailInvitation.m; sourceTree = "<group>"; };
- AD2FA8DC0883CD12009A91E7 /* SOGoAptMailInvitation.wo */ = {isa = PBXFileReference; lastKnownFileType = folder; path = SOGoAptMailInvitation.wo; sourceTree = "<group>"; };
AD2FA9C50883F922009A91E7 /* SOGoAptMailUpdate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SOGoAptMailUpdate.m; sourceTree = "<group>"; };
- AD2FA9C60883F92C009A91E7 /* SOGoAptMailUpdate.wo */ = {isa = PBXFileReference; lastKnownFileType = folder; path = SOGoAptMailUpdate.wo; sourceTree = "<group>"; };
AD2FAA4708840BB8009A91E7 /* common.make */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 5; path = common.make; sourceTree = "<group>"; };
AD2FAA81088417AB009A91E7 /* AgenorUserDefaults.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = AgenorUserDefaults.h; sourceTree = "<group>"; };
AD2FAA82088417AB009A91E7 /* AgenorUserDefaults.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = AgenorUserDefaults.m; sourceTree = "<group>"; };
AD3D63CE088D5EB000CBB51B /* calendar.css */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = calendar.css; sourceTree = "<group>"; };
AD3D63CF088D5EB000CBB51B /* UIxAppointmentEditor.js */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.javascript; path = UIxAppointmentEditor.js; sourceTree = "<group>"; };
AD3D63D0088D5EB000CBB51B /* UIxContactEditor.js */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.javascript; path = UIxContactEditor.js; sourceTree = "<group>"; };
+ AD3D643B088D725D00CBB51B /* SOGoContext.h */ = {isa = PBXFileReference; fileEncoding = 12; indentWidth = 2; lastKnownFileType = sourcecode.c.h; path = SOGoContext.h; sourceTree = "<group>"; tabWidth = 2; };
+ AD3D643C088D725D00CBB51B /* SOGoContext.m */ = {isa = PBXFileReference; fileEncoding = 12; indentWidth = 2; lastKnownFileType = sourcecode.c.objc; path = SOGoContext.m; sourceTree = "<group>"; tabWidth = 2; };
+ AD3D66D8088E7FAD00CBB51B /* SOGoAptMailEnglishDeletion.wo */ = {isa = PBXFileReference; lastKnownFileType = folder; path = SOGoAptMailEnglishDeletion.wo; sourceTree = "<group>"; };
+ AD3D66DC088E7FAD00CBB51B /* SOGoAptMailEnglishInvitation.wo */ = {isa = PBXFileReference; lastKnownFileType = folder; path = SOGoAptMailEnglishInvitation.wo; sourceTree = "<group>"; };
+ AD3D66E0088E7FAD00CBB51B /* SOGoAptMailEnglishRemoval.wo */ = {isa = PBXFileReference; lastKnownFileType = folder; path = SOGoAptMailEnglishRemoval.wo; sourceTree = "<group>"; };
+ AD3D66E4088E7FAD00CBB51B /* SOGoAptMailEnglishUpdate.wo */ = {isa = PBXFileReference; lastKnownFileType = folder; path = SOGoAptMailEnglishUpdate.wo; sourceTree = "<group>"; };
+ AD3D66E8088E7FAD00CBB51B /* SOGoAptMailFrenchDeletion.wo */ = {isa = PBXFileReference; lastKnownFileType = folder; path = SOGoAptMailFrenchDeletion.wo; sourceTree = "<group>"; };
+ AD3D66EC088E7FAD00CBB51B /* SOGoAptMailFrenchInvitation.wo */ = {isa = PBXFileReference; lastKnownFileType = folder; path = SOGoAptMailFrenchInvitation.wo; sourceTree = "<group>"; };
+ AD3D66F0088E7FAD00CBB51B /* SOGoAptMailFrenchRemoval.wo */ = {isa = PBXFileReference; lastKnownFileType = folder; path = SOGoAptMailFrenchRemoval.wo; sourceTree = "<group>"; };
+ AD3D66F4088E7FAD00CBB51B /* SOGoAptMailFrenchUpdate.wo */ = {isa = PBXFileReference; lastKnownFileType = folder; path = SOGoAptMailFrenchUpdate.wo; sourceTree = "<group>"; };
AD494C6206F5EA6600E51EC9 /* UIxContactSelector.m */ = {isa = PBXFileReference; fileEncoding = 5; indentWidth = 2; lastKnownFileType = sourcecode.c.objc; path = UIxContactSelector.m; sourceTree = "<group>"; };
AD494C8E06F606F900E51EC9 /* UIxContactsSelectionView.m */ = {isa = PBXFileReference; fileEncoding = 5; indentWidth = 2; lastKnownFileType = sourcecode.c.objc; path = UIxContactsSelectionView.m; sourceTree = "<group>"; };
AD494D1806F6EB3A00E51EC9 /* SOGoMailAccount.h */ = {isa = PBXFileReference; fileEncoding = 5; indentWidth = 2; lastKnownFileType = sourcecode.c.h; path = SOGoMailAccount.h; sourceTree = "<group>"; };
ADA63206071330AE0058C21C /* SOGoAppointment+UIx.m */ = {isa = PBXFileReference; fileEncoding = 5; indentWidth = 2; lastKnownFileType = sourcecode.c.objc; path = "SOGoAppointment+UIx.m"; sourceTree = "<group>"; };
ADAD40CA0769FFD000AAD24E /* UIxCalInlineAptView.m */ = {isa = PBXFileReference; fileEncoding = 5; indentWidth = 2; lastKnownFileType = sourcecode.c.objc; path = UIxCalInlineAptView.m; sourceTree = "<group>"; };
ADB742000887C90200AC849E /* SOGoAptMailRemoval.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SOGoAptMailRemoval.m; sourceTree = "<group>"; };
- ADB742040887C93100AC849E /* SOGoAptMailRemoval.wo */ = {isa = PBXFileReference; lastKnownFileType = folder; path = SOGoAptMailRemoval.wo; sourceTree = "<group>"; };
ADB7420B0887C94C00AC849E /* SOGoAptMailDeletion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SOGoAptMailDeletion.m; sourceTree = "<group>"; };
- ADB7420C0887C95A00AC849E /* SOGoAptMailDeletion.wo */ = {isa = PBXFileReference; lastKnownFileType = folder; path = SOGoAptMailDeletion.wo; sourceTree = "<group>"; };
ADB79CAD07D4BF1600CA782A /* ChangeLog */ = {isa = PBXFileReference; fileEncoding = 5; indentWidth = 8; lastKnownFileType = text; path = ChangeLog; sourceTree = "<group>"; tabWidth = 8; usesTabs = 1; };
ADB7A0FC07D6389500CA782A /* NSObject+AptComparison.h */ = {isa = PBXFileReference; fileEncoding = 5; indentWidth = 2; lastKnownFileType = sourcecode.c.h; path = "NSObject+AptComparison.h"; sourceTree = "<group>"; };
ADB7A0FD07D6389500CA782A /* NSObject+AptComparison.m */ = {isa = PBXFileReference; fileEncoding = 5; indentWidth = 2; lastKnownFileType = sourcecode.c.objc; path = "NSObject+AptComparison.m"; sourceTree = "<group>"; };
isa = PBXGroup;
children = (
AD2FA8DB0883CCF0009A91E7 /* SOGoAptMailInvitation.m */,
- AD2FA8DC0883CD12009A91E7 /* SOGoAptMailInvitation.wo */,
+ AD3D66DC088E7FAD00CBB51B /* SOGoAptMailEnglishInvitation.wo */,
+ AD3D66EC088E7FAD00CBB51B /* SOGoAptMailFrenchInvitation.wo */,
);
name = SOGoAptMailInvitation;
sourceTree = "<group>";
isa = PBXGroup;
children = (
AD2FA9C50883F922009A91E7 /* SOGoAptMailUpdate.m */,
- AD2FA9C60883F92C009A91E7 /* SOGoAptMailUpdate.wo */,
+ AD3D66E4088E7FAD00CBB51B /* SOGoAptMailEnglishUpdate.wo */,
+ AD3D66F4088E7FAD00CBB51B /* SOGoAptMailFrenchUpdate.wo */,
);
name = SOGoAptMailUpdate;
sourceTree = "<group>";
isa = PBXGroup;
children = (
ADB742000887C90200AC849E /* SOGoAptMailRemoval.m */,
- ADB742040887C93100AC849E /* SOGoAptMailRemoval.wo */,
+ AD3D66E0088E7FAD00CBB51B /* SOGoAptMailEnglishRemoval.wo */,
+ AD3D66F0088E7FAD00CBB51B /* SOGoAptMailFrenchRemoval.wo */,
);
name = SOGoAptMailRemoval;
sourceTree = "<group>";
isa = PBXGroup;
children = (
ADB7420B0887C94C00AC849E /* SOGoAptMailDeletion.m */,
- ADB7420C0887C95A00AC849E /* SOGoAptMailDeletion.wo */,
+ AD3D66D8088E7FAD00CBB51B /* SOGoAptMailEnglishDeletion.wo */,
+ AD3D66E8088E7FAD00CBB51B /* SOGoAptMailFrenchDeletion.wo */,
);
name = SOGoAptMailDeletion;
sourceTree = "<group>";
AD85C72907C4E8740036AC7A /* NSString+iCal.h */,
AD751DFF087E7EDF004EE381 /* WOContext+Agenor.h */,
AD751E00087E7EDF004EE381 /* WOContext+Agenor.m */,
+ AD3D643B088D725D00CBB51B /* SOGoContext.h */,
+ AD3D643C088D725D00CBB51B /* SOGoContext.m */,
);
name = Classes;
sourceTree = "<group>";
+2005-07-20 Marcus Mueller <znek@mulle-kybernetik.com>
+
+ * v0.9.48
+
+ * SOGoAptMailInvitation.m, SOGoAptMailUpdate.m, SOGoAptMailDeletion.m,
+ SOGoAptMailRemoval.m: updated to contain new classes for additional
+ languages
+
+ * SOGoAptMailInvitation.wo, SOGoAptMailUpdate.wo,
+ SOGoAptMailDeletion.wo, SOGoAptMailRemoval.wo: replaced with language
+ dependend counterparts
+
+ * SOGoAptMail{English,French}Invitation.wo,
+ SOGoAptMail{English,French}Update.wo,
+ SOGoAptMail{English,French}Deletion.wo,
+ SOGoAptMail{English,French}Removal.wo: new language dependend
+ templates. Please note that due to an unresolved bug we cannot use
+ the standard WO lookup mechanism here.
+
2005-07-15 Marcus Mueller <znek@mulle-kybernetik.com>
* v0.9.47
Appointments_PRINCIPAL_CLASS = SOGoAppointmentsProduct
+# Appointments_LANGUAGES = English French
+
Appointments_OBJC_FILES = \
Product.m \
\
Version \
product.plist \
-Appointments_COMPONENTS += \
- SOGoAptMailInvitation.wo \
- SOGoAptMailUpdate.wo \
- SOGoAptMailRemoval.wo \
- SOGoAptMailDeletion.wo \
+Appointments_COMPONENTS += \
+ SOGoAptMailEnglishInvitation.wo \
+ SOGoAptMailFrenchInvitation.wo \
+ SOGoAptMailEnglishUpdate.wo \
+ SOGoAptMailFrenchUpdate.wo \
+ SOGoAptMailEnglishRemoval.wo \
+ SOGoAptMailFrenchRemoval.wo \
+ SOGoAptMailEnglishDeletion.wo \
+ SOGoAptMailFrenchDeletion.wo \
-include GNUmakefile.preamble
include $(GNUSTEP_MAKEFILES)/wobundle.make
static SaxObjectDecoder *sax = nil;
static NGLogger *logger = nil;
static NSTimeZone *MET = nil;
+static NSString *mailTemplateDefaultLanguage = nil;
+ (void)initialize {
+ NSUserDefaults *ud;
NGLoggerManager *lm;
SaxXMLReaderFactory *factory;
static BOOL didInit = NO;
[parser setErrorHandler:sax];
MET = [[NSTimeZone timeZoneWithAbbreviation:@"MET"] retain];
+
+ ud = [NSUserDefaults standardUserDefaults];
+ mailTemplateDefaultLanguage = [[ud stringForKey:@"SOGoDefaultLanguage"]
+ retain];
+ if (!mailTemplateDefaultLanguage)
+ mailTemplateDefaultLanguage = @"French";
}
- (void)dealloc {
/* get WOApplication instance */
app = [WOApplication application];
- /* create page name */
- pageName = [NSString stringWithFormat:@"SOGoAptMail%@", _pageName];
-
/* generate dynamic message content */
count = [_attendees count];
recipient = [attendee rfc822Email];
}
+ /* create page name */
+ // TODO: select user's default language?
+ pageName = [NSString stringWithFormat:@"SOGoAptMail%@%@",
+ mailTemplateDefaultLanguage,
+ _pageName];
/* construct message content */
- p = [app pageWithName:pageName];
+ p = [app pageWithName:pageName inContext:[WOContext context]];
[p setNewApt:_newApt];
[p setOldApt:_oldApt];
[p setHomePageURL:[self homePageURLForPerson:attendee]];
#include "SOGoAptMailNotification.h"
-@interface SOGoAptMailDeletion : SOGoAptMailNotification
+@interface SOGoAptMailEnglishDeletion : SOGoAptMailNotification
{
-
}
+@end
+@implementation SOGoAptMailEnglishDeletion
@end
-@implementation SOGoAptMailDeletion
+@interface SOGoAptMailFrenchDeletion : SOGoAptMailNotification
+{
+}
+@end
+@implementation SOGoAptMailFrenchDeletion
@end
-<#IsSubject>Apt for the <#OldAptStartDate /> at <#OldAptStartTime /> changed</#IsSubject>
+<#IsSubject>*E* Apt for the <#OldAptStartDate /> at <#OldAptStartTime /> changed</#IsSubject>
<#IsBody>
This appointment, previously set for <#OldAptStartDate />
at <#OldAptStartTime /> is now scheduled for <#NewAptStartDate /> at <#NewAptStartTime />
--- /dev/null
+<#IsSubject>Appointment <#AptStartDate /> at <#AptStartTime /> has been canceled</#IsSubject>
+<#IsBody>
+The appointment at <#AptStartDate /> <#AptStartTime /> has been cancelled by <#Organizer />.
+</#IsBody>
\ No newline at end of file
--- /dev/null
+AptStartDate: WOString {
+ value = newStartDate;
+ dateformat = "%d/%m/%y";
+ escapeHTML = NO;
+}
+
+AptStartTime: WOString {
+ value = newStartDate;
+ dateformat = "%H:%M";
+ escapeHTML = NO;
+}
+
+Organizer: WOString {
+ value = newApt.organizer.cnWithoutQuotes;
+ escapeHTML = NO;
+}
+
+HasHomePageURL: WOConditional {
+ condition = homePageURL.length;
+}
+
+HomePageURL: WOString {
+ value = appointmentURL;
+ escapeHTML = NO;
+}
+
+IsSubject: WOConditional {
+ condition = isSubject;
+}
+
+IsBody: WOConditional {
+ condition = isSubject;
+ negate = YES;
+}
--- /dev/null
+<#IsSubject>Apt le <#AptStartDate /> at <#AptStartTime /></#IsSubject>
+<#IsBody>
+You're invited by <#Organizer /> to a meeting.
+<#HasHomePageURL>
+Please make a decision for this invitation at <#HomePageURL />.
+</#HasHomePageURL>
+</#IsBody>
\ No newline at end of file
--- /dev/null
+AptStartDate: WOString {
+ value = newStartDate;
+ dateformat = "%d/%m/%y";
+ escapeHTML = NO;
+}
+
+AptStartTime: WOString {
+ value = newStartDate;
+ dateformat = "%H:%M";
+ escapeHTML = NO;
+}
+
+Organizer: WOString {
+ value = newApt.organizer.cnWithoutQuotes;
+ escapeHTML = NO;
+}
+
+HasHomePageURL: WOConditional {
+ condition = homePageURL.length;
+}
+
+HomePageURL: WOString {
+ value = appointmentURL;
+ escapeHTML = NO;
+}
+
+IsSubject: WOConditional {
+ condition = isSubject;
+}
+
+IsBody: WOConditional {
+ condition = isSubject;
+ negate = YES;
+}
--- /dev/null
+<#IsSubject>Removed from appointment <#AptStartDate /> at <#AptStartTime /></#IsSubject>
+<#IsBody>
+You have been removed by <#Organizer /> from the appointment scheduled at <#AptStartDate /> <#AptStartTime />.
+</#IsBody>
\ No newline at end of file
--- /dev/null
+AptStartDate: WOString {
+ value = newStartDate;
+ dateformat = "%d/%m/%y";
+ escapeHTML = NO;
+}
+
+AptStartTime: WOString {
+ value = newStartDate;
+ dateformat = "%H:%M";
+ escapeHTML = NO;
+}
+
+Organizer: WOString {
+ value = newApt.organizer.cnWithoutQuotes;
+ escapeHTML = NO;
+}
+
+HasHomePageURL: WOConditional {
+ condition = homePageURL.length;
+}
+
+HomePageURL: WOString {
+ value = appointmentURL;
+ escapeHTML = NO;
+}
+
+IsSubject: WOConditional {
+ condition = isSubject;
+}
+
+IsBody: WOConditional {
+ condition = isSubject;
+ negate = YES;
+}
--- /dev/null
+<#IsSubject>*French* Apt le <#OldAptStartDate /> at <#OldAptStartTime /> changed</#IsSubject>
+<#IsBody>
+Le appointment, previously set for <#OldAptStartDate />
+at <#OldAptStartTime /> is now scheduled for <#NewAptStartDate /> at <#NewAptStartTime />
+<#HasHomePageURL>
+Please make a decision for these new settings at <#HomePageURL />.
+</#HasHomePageURL>
+</#IsBody>
\ No newline at end of file
--- /dev/null
+OldAptStartDate: WOString {
+ value = oldStartDate;
+ dateformat = "%d/%m/%y";
+ escapeHTML = NO;
+}
+
+OldAptStartTime: WOString {
+ value = oldStartDate;
+ dateformat = "%H:%M";
+ escapeHTML = NO;
+}
+
+NewAptStartDate: WOString {
+ value = newStartDate;
+ dateformat = "%d/%m/%y";
+ escapeHTML = NO;
+}
+
+NewAptStartTime: WOString {
+ value = newStartDate;
+ dateformat = "%H:%M";
+ escapeHTML = NO;
+}
+
+Organizer: WOString {
+ value = newApt.organizer.cnWithoutQuotes;
+ escapeHTML = NO;
+}
+
+HasHomePageURL: WOConditional {
+ condition = homePageURL.length;
+}
+
+HomePageURL: WOString {
+ value = appointmentURL;
+ escapeHTML = NO;
+}
+
+IsSubject: WOConditional {
+ condition = isSubject;
+}
+
+IsBody: WOConditional {
+ condition = isSubject;
+ negate = YES;
+}
#include "SOGoAptMailNotification.h"
-@interface SOGoAptMailInvitation : SOGoAptMailNotification
+@interface SOGoAptMailEnglishInvitation : SOGoAptMailNotification
{
-
}
+@end
+@implementation SOGoAptMailEnglishInvitation
@end
-@implementation SOGoAptMailInvitation
+@interface SOGoAptMailFrenchInvitation : SOGoAptMailNotification
+{
+}
+@end
+@implementation SOGoAptMailFrenchInvitation
@end
#ifndef __Appointments_SOGoAptMailNotification_H_
#define __Appointments_SOGoAptMailNotification_H_
-#include <NGObjWeb/NGObjWeb.h>
+#include <NGObjWeb/SoComponent.h>
-@class NSString;
+@class NSString, NSTimeZone, NSCalendarDate;
-@interface SOGoAptMailNotification : WOComponent
+/*
+ * NOTE: We inherit from SoComponent in order to get the correct
+ * resourceManager required for this product
+ */
+@interface SOGoAptMailNotification : SoComponent
{
id oldApt;
id newApt;
/* Generate Response */
- (NSString *)getSubject {
+ NSString *subject;
+
[self setIsSubject:YES];
- return [[[self generateResponse] contentAsString]
- stringByTrimmingCharactersInSet:wsSet];
+ subject = [[[self generateResponse] contentAsString]
+ stringByTrimmingCharactersInSet:wsSet];
+ if (!subject) {
+ [self errorWithFormat:@"Failed to properly generate subject! Please check "
+ @"template for component '%@'!",
+ [self name]];
+ subject = @"ERROR: missing subject!";
+ }
+ return subject;
}
- (NSString *)getBody {
#include "SOGoAptMailNotification.h"
-@interface SOGoAptMailRemoval : SOGoAptMailNotification
+@interface SOGoAptMailEnglishRemoval : SOGoAptMailNotification
{
-
}
+@end
+@implementation SOGoAptMailEnglishRemoval
@end
-@implementation SOGoAptMailRemoval
+@interface SOGoAptMailFrenchRemoval : SOGoAptMailNotification
+{
+}
+@end
+@implementation SOGoAptMailFrenchRemoval
@end
#include "SOGoAptMailNotification.h"
-@interface SOGoAptMailUpdate : SOGoAptMailNotification
+@interface SOGoAptMailEnglishUpdate : SOGoAptMailNotification
{
-
}
+@end
+@implementation SOGoAptMailEnglishUpdate
@end
-@implementation SOGoAptMailUpdate
+@interface SOGoAptMailFrenchUpdate : SOGoAptMailNotification
+{
+}
+@end
+@implementation SOGoAptMailFrenchUpdate
@end
# Version file
-SUBMINOR_VERSION:=47
+SUBMINOR_VERSION:=48
# v0.9.42 requires libSOGo v0.9.54
# v0.9.32 requires libGDLContentStore v4.5.26
+2005-07-20 Marcus Mueller <znek@mulle-kybernetik.com>
+
+ * UIxComponent.m: changed language lookup to meet the status quo
+ (v0.9.32)
+
2005-07-18 Helge Hess <helge.hess@opengroupware.org>
* UIxComponent.m: minor code reorgs (v0.9.31)
- (NSString *)labelForKey:(NSString *)_str {
WOResourceManager *rm;
NSArray *languages;
- WOContext *ctx;
NSString *label;
NSString *lKey, *lTable, *lVal;
NSRange r;
/* lookup languages */
- ctx = [self context];
- languages = [ctx hasSession]
- ? [[ctx session] languages]
- : [[ctx request] browserLanguages];
+ languages = [[self context] resourceLookupLanguages];
/* find resource manager */
# version file
-SUBMINOR_VERSION:=31
+SUBMINOR_VERSION:=32
# v0.9.18 requires NGExtensions v4.5.136