Monotone-Parent: f4861ebaae0a55ed464809d54f5ecd4f0bef9913

Monotone-Revision: d23a6bb43fc70fa7f45420eb293780b9dcfbd02c

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2010-04-09T18:45:14
Monotone-Branch: ca.inverse.sogo
This commit is contained in:
Wolfgang Sourdeau
2010-04-09 18:45:14 +00:00
parent 7a072049ab
commit 0fc3588ff3
121 changed files with 912 additions and 2557 deletions
+15
View File
@@ -1,5 +1,20 @@
2010-04-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* SoObjects/Appointments/SOGoAptMailUpdate.m,
SoObjects/Appointments/SOGoAptMailInvitation.m,
SoObjects/Appointments/SOGoAptMailICalReply.m,
SoObjects/Appointments/SOGoAptMailDeletion.m: revamped to make use
of language dictionaries rather than language-specific classes.
This hugely simplifies the code and ease the job of implementing
languages for SOGo.
* SoObjects/SOGo/SOGoObject.m (-labelForKey:) removed method,
obsoleted by the new one below.
* SoObjects/SOGo/NSObject+Utilities.m (-labelForKey:inContext:):
new method that enables the querying of module based language
dictionaries from non SoComponent instances.
* Tests/Integration/utilities.py (TestUtility.fetchUserInfo): same
as below.
@@ -23,3 +23,40 @@ vtodo_class2 = "(Tarefa Confidencial)";
"Receipt: attendees removed from an event" = "Receipt: attendees removed from an event";
"You have removed the following attendees(s):" = "You have removed the following attendees(s):";
"... from the following event:" = "... from the following event:";
/* IMIP messages */
"startDate_label" = "Start:";
"endDate_label" = "End:";
"due_label" = "Due Date:";
"location_label" = "Location:";
"summary_label" = "Summary:";
"comment_label" = "Comment:";
/* Invitation */
"Event Invitation: \"%{Summary}\"" = "Event Invitation: \"%{Summary}\"";
"(sent by %{SentBy}) " = "(enviado por %{SentBy}) ";
"%{Organizer} %{SentByText}has invited you to %{Summary}." = "%{Organizer} %{SentByText}has invited you to %{Summary}.";
/* Deletion */
"Event Cancelled: \"%{Summary}\"" = "Event Cancelled: \"%{Summary}\"";
"%{Organizer} %{SentByText}has cancelled this event: %{Summary}."
= "%{Organizer} %{SentByText}has cancelled this event: %{Summary}.";
/* Update */
"The appointment \"%{Summary}\" for the %{OldStartDate} at %{OldStartTime} has changed"
= "The appointment \"%{Summary}\" for the %{OldStartDate} at %{OldStartTime} has changed";
"The following parameters have changed in the \"%{Summary}\" meeting:"
= "The following parameters have changed in the \"%{Summary}\" meeting:";
"Please accept or decline those changes."
= "Please accept or decline those changes.";
/* Reply */
"Reply to invitation: \"%{Summary}\"" = "Resposta a Evento de Convite: \"%{Summary}\"";
"%{Attendee} %{SentByText}has accepted your event invitation."
= "%{Attendee} %{SentByText}foi aceitado seu convite ao evento.";
"%{Attendee} %{SentByText}has declined your event invitation."
= "%{Attendee} %{SentByText}foi declinado seu convite ao evento.";
"%{Attendee} %{SentByText}has delegated the invitation to %{Delegate}."
= "%{Attendee} %{SentByText}has delegated the invitation to %{Delegate}.";
"%{Attendee} %{SentByText}has not yet decided upon your event invitation."
= "%{Attendee} %{SentByText}foi ainda não decidiu seu convite ao evento.";
@@ -23,3 +23,40 @@ vtodo_class2 = "(Skrytý úkol)";
"Receipt: attendees removed from an event" = "Receipt: attendees removed from an event";
"You have removed the following attendees(s):" = "You have removed the following attendees(s):";
"... from the following event:" = "... from the following event:";
/* IMIP messages */
"startDate_label" = "Start:";
"endDate_label" = "End:";
"due_label" = "Due Date:";
"location_label" = "Location:";
"summary_label" = "Summary:";
"comment_label" = "Comment:";
/* Invitation */
"Event Invitation: \"%{Summary}\"" = "Event Invitation: \"%{Summary}\"";
"(sent by %{SentBy}) " = "(sent by %{SentBy}) ";
"%{Organizer} %{SentByText}has invited you to %{Summary}." = "%{Organizer} %{SentByText}has invited you to %{Summary}.";
/* Deletion */
"Event Cancelled: \"%{Summary}\"" = "Event Cancelled: \"%{Summary}\"";
"%{Organizer} %{SentByText}has cancelled this event: %{Summary}."
= "%{Organizer} %{SentByText}has cancelled this event: %{Summary}.";
/* Update */
"The appointment \"%{Summary}\" for the %{OldStartDate} at %{OldStartTime} has changed"
= "The appointment \"%{Summary}\" for the %{OldStartDate} at %{OldStartTime} has changed";
"The following parameters have changed in the \"%{Summary}\" meeting:"
= "The following parameters have changed in the \"%{Summary}\" meeting:";
"Please accept or decline those changes."
= "Please accept or decline those changes.";
/* Reply */
"Reply to invitation: \"%{Summary}\"" = "Reply to invitation: \"%{Summary}\"";
"%{Attendee} %{SentByText}has accepted your event invitation."
= "%{Attendee} %{SentByText}has accepted your event invitation.";
"%{Attendee} %{SentByText}has declined your event invitation."
= "%{Attendee} %{SentByText}has declined your event invitation.";
"%{Attendee} %{SentByText}has delegated the invitation to %{Delegate}."
= "%{Attendee} %{SentByText}has delegated the invitation to %{Delegate}.";
"%{Attendee} %{SentByText}has not yet decided upon your event invitation."
= "%{Attendee} %{SentByText}has not yet decided upon your event invitation.";
@@ -23,3 +23,40 @@ vtodo_class2 = "(Vertrouwelijke taak)";
"Receipt: attendees removed from an event" = "Receipt: attendees removed from an event";
"You have removed the following attendees(s):" = "You have removed the following attendees(s):";
"... from the following event:" = "... from the following event:";
/* IMIP messages */
"startDate_label" = "Start:";
"endDate_label" = "End:";
"due_label" = "Due Date:";
"location_label" = "Location:";
"summary_label" = "Summary:";
"comment_label" = "Comment:";
/* Invitation */
"Event Invitation: \"%{Summary}\"" = "Event Invitation: \"%{Summary}\"";
"(sent by %{SentBy}) " = "(sent by %{SentBy}) ";
"%{Organizer} %{SentByText}has invited you to %{Summary}." = "%{Organizer} %{SentByText}has invited you to %{Summary}.";
/* Deletion */
"Event Cancelled: \"%{Summary}\"" = "Event Cancelled: \"%{Summary}\"";
"%{Organizer} %{SentByText}has cancelled this event: %{Summary}."
= "%{Organizer} %{SentByText}has cancelled this event: %{Summary}.";
/* Update */
"The appointment \"%{Summary}\" for the %{OldStartDate} at %{OldStartTime} has changed"
= "The appointment \"%{Summary}\" for the %{OldStartDate} at %{OldStartTime} has changed";
"The following parameters have changed in the \"%{Summary}\" meeting:"
= "The following parameters have changed in the \"%{Summary}\" meeting:";
"Please accept or decline those changes."
= "Please accept or decline those changes.";
/* Reply */
"Reply to invitation: \"%{Summary}\"" = "Antwoord voor de gebeurtenisuitnodiging: \"%{Summary}\"";
"%{Attendee} %{SentByText}has accepted your event invitation."
= "%{Attendee} %{SentByText}heeft uw uitnodiging voor de gebeurtenis geaccepteerd.";
"%{Attendee} %{SentByText}has declined your event invitation."
= "%{Attendee} %{SentByText}heeft uw uitnodiging voor de gebeurtenis geweigerd.";
"%{Attendee} %{SentByText}has delegated the invitation to %{Delegate}."
= "%{Attendee} %{SentByText}has delegated the invitation to %{Delegate}.";
"%{Attendee} %{SentByText}has not yet decided upon your event invitation."
= "%{Attendee} %{SentByText}has not yet decided upon your event invitation.";
@@ -23,3 +23,40 @@ vtodo_class2 = "(Confidential task)";
"Receipt: attendees removed from an event" = "Receipt: attendees removed from an event";
"You have removed the following attendees(s):" = "You have removed the following attendees(s):";
"... from the following event:" = "... from the following event:";
/* IMIP messages */
"startDate_label" = "Start:";
"endDate_label" = "End:";
"due_label" = "Due Date:";
"location_label" = "Location:";
"summary_label" = "Summary:";
"comment_label" = "Comment:";
/* Invitation */
"Event Invitation: \"%{Summary}\"" = "Event Invitation: \"%{Summary}\"";
"(sent by %{SentBy}) " = "(sent by %{SentBy}) ";
"%{Organizer} %{SentByText}has invited you to %{Summary}." = "%{Organizer} %{SentByText}has invited you to %{Summary}.";
/* Deletion */
"Event Cancelled: \"%{Summary}\"" = "Event Cancelled: \"%{Summary}\"";
"%{Organizer} %{SentByText}has cancelled this event: %{Summary}."
= "%{Organizer} %{SentByText}has cancelled this event: %{Summary}.";
/* Update */
"The appointment \"%{Summary}\" for the %{OldStartDate} at %{OldStartTime} has changed"
= "The appointment \"%{Summary}\" for the %{OldStartDate} at %{OldStartTime} has changed";
"The following parameters have changed in the \"%{Summary}\" meeting:"
= "The following parameters have changed in the \"%{Summary}\" meeting:";
"Please accept or decline those changes."
= "Please accept or decline those changes.";
/* Reply */
"Reply to invitation: \"%{Summary}\"" = "Reply to invitation: \"%{Summary}\"";
"%{Attendee} %{SentByText}has accepted your event invitation."
= "%{Attendee} %{SentByText}has accepted your event invitation.";
"%{Attendee} %{SentByText}has declined your event invitation."
= "%{Attendee} %{SentByText}has declined your event invitation.";
"%{Attendee} %{SentByText}has delegated the invitation to %{Delegate}."
= "%{Attendee} %{SentByText}has delegated the invitation to %{Delegate}.";
"%{Attendee} %{SentByText}has not yet decided upon your event invitation."
= "%{Attendee} %{SentByText}has not yet decided upon your event invitation.";
@@ -23,3 +23,41 @@ vtodo_class2 = "(Tâche confidentielle)";
"Receipt: attendees removed from an event" = "Acc. de réception: invitations annulées";
"You have removed the following attendees(s):" = "Les utilisateurs suivants :";
"... from the following event:" = "... ne sont plus invités à cette réunion :";
/* IMIP messages */
"startDate_label" = "Du :";
"endDate_label" = "au :";
"due_label" = "Fin prévue :";
"location_label" = "Lieu :";
"summary_label" = "Titre :";
"comment_label" = "Description :";
/* Invitation */
"Event Invitation: \"%{Summary}\"" = "Invitation à la réunion : \"%{Summary}\"";
"(sent by %{SentBy}) " = "(envoyé par %{SentBy}) ";
"%{Organizer} %{SentByText}has invited you to %{Summary}."
= "%{Organizer} %{SentByText}vous a invité à la réunion « %{Summary} ».";
/* Deletion */
"Event Cancelled: \"%{Summary}\"" = "Réunion annulée : « %{Summary} »";
"%{Organizer} %{SentByText}has cancelled this event: %{Summary}."
= "%{Organizer} %{SentByText}a annulé cette réunion : « %{Summary} »";
/* Update */
"The appointment \"%{Summary}\" for the %{OldStartDate} at %{OldStartTime} has changed"
= "La réunion « %{Summary} » de %{OldStartDate} à %{OldStartTime} a été modifiée";
"The following parameters have changed in the \"%{Summary}\" meeting:"
= "Les paramètres suivants ont été modifiés pour la réunion « %{Summary} » :";
"Please accept or decline those changes."
= "Veuillez reconfirmer ou annuler votre présence.";
/* Reply */
"Reply to invitation: \"%{Summary}\"" = "Réponse à l'invitation : « %{Summary} »";
"%{Attendee} %{SentByText}has accepted your event invitation."
= "%{Attendee} %{SentByText}a accepté votre invitation.";
"%{Attendee} %{SentByText}has declined your event invitation."
= "%{Attendee} %{SentByText}a décliné votre invitation.";
"%{Attendee} %{SentByText}has delegated the invitation to %{Delegate}."
= "%{Attendee} %{SentByText}a délégué votre invitation à %{Delegate}.";
"%{Attendee} %{SentByText}has not yet decided upon your event invitation."
= "%{Attendee} %{SentByText}choisir de reporter sa décision par rapport à votre invitation.";
-48
View File
@@ -48,54 +48,6 @@ Appointments_LANGUAGES = BrazilianPortuguese Czech Dutch English French German H
Appointments_LOCALIZED_RESOURCE_FILES = Localizable.strings
Appointments_COMPONENTS += \
SOGoAptMailBrazilianPortugueseInvitation.wo \
SOGoAptMailBrazilianPortugueseICalReply.wo \
SOGoAptMailBrazilianPortugueseDeletion.wo \
SOGoAptMailBrazilianPortugueseUpdate.wo \
SOGoAptMailCzechInvitation.wo \
SOGoAptMailCzechICalReply.wo \
SOGoAptMailCzechDeletion.wo \
SOGoAptMailCzechUpdate.wo \
SOGoAptMailDutchInvitation.wo \
SOGoAptMailDutchICalReply.wo \
SOGoAptMailDutchDeletion.wo \
SOGoAptMailDutchUpdate.wo \
SOGoAptMailEnglishInvitation.wo \
SOGoAptMailEnglishDeletion.wo \
SOGoAptMailEnglishUpdate.wo \
SOGoAptMailFrenchInvitation.wo \
SOGoAptMailFrenchICalReply.wo \
SOGoAptMailFrenchDeletion.wo \
SOGoAptMailFrenchUpdate.wo \
SOGoAptMailGermanInvitation.wo \
SOGoAptMailGermanICalReply.wo \
SOGoAptMailGermanDeletion.wo \
SOGoAptMailGermanUpdate.wo \
SOGoAptMailHungarianInvitation.wo \
SOGoAptMailHungarianICalReply.wo \
SOGoAptMailHungarianDeletion.wo \
SOGoAptMailHungarianUpdate.wo \
SOGoAptMailItalianInvitation.wo \
SOGoAptMailItalianICalReply.wo \
SOGoAptMailItalianDeletion.wo \
SOGoAptMailItalianUpdate.wo \
SOGoAptMailRussianInvitation.wo \
SOGoAptMailRussianICalReply.wo \
SOGoAptMailRussianDeletion.wo \
SOGoAptMailRussianUpdate.wo \
SOGoAptMailSpanishInvitation.wo \
SOGoAptMailSpanishICalReply.wo \
SOGoAptMailSpanishDeletion.wo \
SOGoAptMailSpanishUpdate.wo \
SOGoAptMailSwedishInvitation.wo \
SOGoAptMailSwedishDeletion.wo \
SOGoAptMailSwedishUpdate.wo \
SOGoAptMailWelshInvitation.wo \
SOGoAptMailWelshICalReply.wo \
SOGoAptMailWelshDeletion.wo \
SOGoAptMailWelshUpdate.wo
ADDITIONAL_INCLUDE_DIRS += -I../../SOPE/
ADDITIONAL_LIB_DIRS += -L../../SOPE/GDLContentStore/obj/
@@ -23,3 +23,40 @@ vtodo_class2 = "(Vertrauliche Aufgabe)";
"Receipt: attendees removed from an event" = "Receipt: attendees removed from an event";
"You have removed the following attendees(s):" = "You have removed the following attendees(s):";
"... from the following event:" = "... from the following event:";
/* IMIP messages */
"startDate_label" = "Start:";
"endDate_label" = "End:";
"due_label" = "Due Date:";
"location_label" = "Location:";
"summary_label" = "Summary:";
"comment_label" = "Comment:";
/* Invitation */
"Event Invitation: \"%{Summary}\"" = "Event Invitation: \"%{Summary}\"";
"(sent by %{SentBy}) " = "(sent by %{SentBy}) ";
"%{Organizer} %{SentByText}has invited you to %{Summary}." = "%{Organizer} %{SentByText}has invited you to %{Summary}.";
/* Deletion */
"Event Cancelled: \"%{Summary}\"" = "Event Cancelled: \"%{Summary}\"";
"%{Organizer} %{SentByText}has cancelled this event: %{Summary}."
= "%{Organizer} %{SentByText}has cancelled this event: %{Summary}.";
/* Update */
"The appointment \"%{Summary}\" for the %{OldStartDate} at %{OldStartTime} has changed"
= "The appointment \"%{Summary}\" for the %{OldStartDate} at %{OldStartTime} has changed";
"The following parameters have changed in the \"%{Summary}\" meeting:"
= "The following parameters have changed in the \"%{Summary}\" meeting:";
"Please accept or decline those changes."
= "Please accept or decline those changes.";
/* Reply */
"Reply to invitation: \"%{Summary}\"" = "Antwort Termineinladung: %{Summary}";
"%{Attendee} %{SentByText}has accepted your event invitation."
= "%{Attendee} %{SentByText}hat Ihre Termineinladung akzeptiert.";
"%{Attendee} %{SentByText}has declined your event invitation."
= "%{Attendee} %{SentByText}hat Ihre Termineinladung abgelehnt.";
"%{Attendee} %{SentByText}has delegated the invitation to %{Delegate}."
= "%{Attendee} %{SentByText}has delegated the invitation to %{Delegate}.";
"%{Attendee} %{SentByText}has not yet decided upon your event invitation."
= "%{Attendee} %{SentByText}hat noch nicht über Ihre Termineinladung entschieden.";
@@ -23,3 +23,40 @@ vtodo_class2 = "(Bizalmas feladat)";
"Receipt: attendees removed from an event" = "Receipt: attendees removed from an event";
"You have removed the following attendees(s):" = "You have removed the following attendees(s):";
"... from the following event:" = "... from the following event:";
/* IMIP messages */
"startDate_label" = "Start:";
"endDate_label" = "End:";
"due_label" = "Due Date:";
"location_label" = "Location:";
"summary_label" = "Summary:";
"comment_label" = "Comment:";
/* Invitation */
"Event Invitation: \"%{Summary}\"" = "Event Invitation: \"%{Summary}\"";
"(sent by %{SentBy}) " = "(%{SentBy} által elküldve) ";
"%{Organizer} %{SentByText}has invited you to %{Summary}." = "%{Organizer} %{SentByText}has invited you to %{Summary}.";
/* Deletion */
"Event Cancelled: \"%{Summary}\"" = "Event Cancelled: \"%{Summary}\"";
"%{Organizer} %{SentByText}has cancelled this event: %{Summary}."
= "%{Organizer} %{SentByText}has cancelled this event: %{Summary}.";
/* Update */
"The appointment \"%{Summary}\" for the %{OldStartDate} at %{OldStartTime} has changed"
= "The appointment \"%{Summary}\" for the %{OldStartDate} at %{OldStartTime} has changed";
"The following parameters have changed in the \"%{Summary}\" meeting:"
= "The following parameters have changed in the \"%{Summary}\" meeting:";
"Please accept or decline those changes."
= "Please accept or decline those changes.";
/* Reply */
"Reply to invitation: \"%{Summary}\"" = "Válasz a meghívásra: %{Summary}";
"%{Attendee} %{SentByText}has accepted your event invitation."
= "%{Attendee} %{SentByText}elfogadta a meghívását.";
"%{Attendee} %{SentByText}has declined your event invitation."
= "%{Attendee} %{SentByText}visszautasította a meghívását.";
"%{Attendee} %{SentByText}has delegated the invitation to %{Delegate}."
= "%{Attendee} %{SentByText}has delegated the invitation to %{Delegate}.";
"%{Attendee} %{SentByText}has not yet decided upon your event invitation."
= "%{Attendee} %{SentByText}még meggondolja a meghívását.";
@@ -23,3 +23,40 @@ vtodo_class2 = "(Attività confidenziale)";
"Receipt: attendees removed from an event" = "Receipt: attendees removed from an event";
"You have removed the following attendees(s):" = "You have removed the following attendees(s):";
"... from the following event:" = "... from the following event:";
/* IMIP messages */
"startDate_label" = "Start:";
"endDate_label" = "End:";
"due_label" = "Due Date:";
"location_label" = "Location:";
"summary_label" = "Summary:";
"comment_label" = "Comment:";
/* Invitation */
"Event Invitation: \"%{Summary}\"" = "Event Invitation: \"%{Summary}\"";
"(sent by %{SentBy}) " = "(sent by %{SentBy}) ";
"%{Organizer} %{SentByText}has invited you to %{Summary}." = "%{Organizer} %{SentByText}has invited you to %{Summary}.";
/* Deletion */
"Event Cancelled: \"%{Summary}\"" = "Event Cancelled: \"%{Summary}\"";
"%{Organizer} %{SentByText}has cancelled this event: %{Summary}."
= "%{Organizer} %{SentByText}has cancelled this event: %{Summary}.";
/* Update */
"The appointment \"%{Summary}\" for the %{OldStartDate} at %{OldStartTime} has changed"
= "The appointment \"%{Summary}\" for the %{OldStartDate} at %{OldStartTime} has changed";
"The following parameters have changed in the \"%{Summary}\" meeting:"
= "The following parameters have changed in the \"%{Summary}\" meeting:";
"Please accept or decline those changes."
= "Please accept or decline those changes.";
/* Reply */
"Reply to invitation: \"%{Summary}\"" = "Re: Appuntemento : \"%{Summary}\"";
"%{Attendee} %{SentByText}has accepted your event invitation."
= "%{Attendee} %{SentByText}ha accepttato l'invito al proprio evento.";
"%{Attendee} %{SentByText}has declined your event invitation."
= "%{Attendee} %{SentByText}ha declinato l'invito al proprio evento.";
"%{Attendee} %{SentByText}has delegated the invitation to %{Delegate}."
= "%{Attendee} %{SentByText}has delegated the invitation to %{Delegate}.";
"%{Attendee} %{SentByText}has not yet decided upon your event invitation."
= "%{Attendee} %{SentByText}has not yet decided upon your event invitation.";
@@ -23,3 +23,40 @@ vtodo_class2 = "(Confidential task)";
"Receipt: attendees removed from an event" = "Receipt: attendees removed from an event";
"You have removed the following attendees(s):" = "You have removed the following attendees(s):";
"... from the following event:" = "... from the following event:";
/* IMIP messages */
"startDate_label" = "Start:";
"endDate_label" = "End:";
"due_label" = "Due Date:";
"location_label" = "Location:";
"summary_label" = "Summary:";
"comment_label" = "Comment:";
/* Invitation */
"Event Invitation: \"%{Summary}\"" = "Event Invitation: \"%{Summary}\"";
"(sent by %{SentBy}) " = "(послал %{SentBy}) ";
"%{Organizer} %{SentByText}has invited you to %{Summary}." = "%{Organizer} %{SentByText}has invited you to %{Summary}.";
/* Deletion */
"Event Cancelled: \"%{Summary}\"" = "Event Cancelled: \"%{Summary}\"";
"%{Organizer} %{SentByText}has cancelled this event: %{Summary}."
= "%{Organizer} %{SentByText}has cancelled this event: %{Summary}.";
/* Update */
"The appointment \"%{Summary}\" for the %{OldStartDate} at %{OldStartTime} has changed"
= "The appointment \"%{Summary}\" for the %{OldStartDate} at %{OldStartTime} has changed";
"The following parameters have changed in the \"%{Summary}\" meeting:"
= "The following parameters have changed in the \"%{Summary}\" meeting:";
"Please accept or decline those changes."
= "Please accept or decline those changes.";
/* Reply */
"Reply to invitation: \"%{Summary}\"" = "Ответ на приглашение: \"%{Summary}\"";
"%{Attendee} %{SentByText}has accepted your event invitation."
= "%{Attendee} %{SentByText}согласился участвовать в запланированном мероприятии.";
"%{Attendee} %{SentByText}has declined your event invitation."
= "%{Attendee} %{SentByText}отказался участвовать в запланированном мероприятии.";
"%{Attendee} %{SentByText}has delegated the invitation to %{Delegate}."
= "%{Attendee} %{SentByText}has delegated the invitation to %{Delegate}.";
"%{Attendee} %{SentByText}has not yet decided upon your event invitation."
= "%{Attendee} %{SentByText}не определился с желанием участвовать в запланированном мероприятии.";
@@ -38,6 +38,7 @@
#import <SOGo/WORequest+SOGo.h>
#import <SOGo/NSObject+DAV.h>
#import <SOGo/NSObject+Utilities.h>
#import <SOGo/SOGoParentFolder.h>
#import <SOGo/SOGoPermissions.h>
#import <SOGo/SOGoUser.h>
@@ -74,7 +75,7 @@
- (NSString *) defaultFolderName
{
return [self labelForKey: @"Personal Calendar"];
return [self labelForKey: @"Personal Calendar" inContext: context];
}
- (NSArray *) toManyRelationshipKeys
@@ -1,2 +0,0 @@
<#IsSubject>Evento Cancelado: <#summary/></#IsSubject>
<#IsBody><#organizer/> <#HasSentBy>(enviado por <#sentBy/>) </#HasSentBy>cancelou este evento: <#summary/>.</#IsBody>
@@ -1,27 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,2 +0,0 @@
<#IsSubject>Resposta a Evento de Convite: <#summary/></#IsSubject>
<#IsBody><#attendee/><#HasSentBy> (enviado por <#sentBy/>)</#HasSentBy> foi <#HasAccepted>aceitado</#HasAccepted><#HasDeclined>declinado</#HasDeclined><#HasNotAcceptedNotDeclined>ainda não decidiu</#HasNotAcceptedNotDeclined> seu convite ao evento.</#IsBody>
@@ -1,39 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
attendee: WOString {
value = attendeeName;
escapeHTML = NO;
}
HasAccepted: WOConditional {
condition = hasAccepted;
}
HasDeclined: WOConditional {
condition = hasDeclined;
}
HasNotAcceptedNotDeclined: WOConditional {
condition = hasNotAcceptedNotDeclined;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,2 +0,0 @@
<#IsSubject>Convite a Evento: <#summary/></#IsSubject>
<#IsBody><#organizer/> <#HasSentBy>(enviado por <#sentBy/>) </#HasSentBy>convidou você para <#summary/>.</#IsBody>
@@ -1,27 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,5 +0,0 @@
<#IsSubject>O apontamento "<#Summary />" para <#OldAptStartDate /> as <#OldAptStartTime /> foi modificado</#IsSubject>
<#IsBody>
O apontamento<#HasSentBy> (enviado por <#sentBy/>)</#HasSentBy>, previamente confirmado para <#OldAptStartDate /><#IsNotOldAllDay> as <#OldAptStartTime /></#IsNotOldAllDay><#HasOldLocation> (<#OldAptLocation />)</#HasOldLocation> está agendado agora para <#NewAptStartDate /><#IsNotNewAllDay> as <#NewAptStartTime /></#IsNotNewAllDay><#HasNewLocation> (<#NewAptLocation />)</#HasNewLocation>.
Por favor, decida sobre esta nova modificação.
</#IsBody>
@@ -1,79 +0,0 @@
OldAptStartDate: WOString {
value = oldStartDate;
dateformat = "%d/%m/%y";
escapeHTML = NO;
}
OldAptStartTime: WOString {
value = oldStartDate;
dateformat = "%H:%M";
escapeHTML = NO;
}
IsNotOldAllDay: WOConditional {
condition = previousApt.isAllDay;
negate = YES;
}
NewAptStartDate: WOString {
value = newStartDate;
dateformat = "%d/%m/%y";
escapeHTML = NO;
}
NewAptStartTime: WOString {
value = newStartDate;
dateformat = "%H:%M";
escapeHTML = NO;
}
IsNotNewAllDay: WOConditional {
condition = apt.isAllDay;
negate = YES;
}
Organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
OldAptLocation: WOString {
value = previousApt.location;
escapeHTML = NO;
}
NewAptLocation: WOString {
value = apt.location;
escapeHTML = NO;
}
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
Summary: WOString {
value = summary;
escapeHTML = NO;
}
HasNewLocation: WOConditional {
condition = hasNewLocation;
}
HasOldLocation: WOConditional {
condition = hasOldLocation;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,2 +0,0 @@
<#IsSubject>Událost zrušena: <#summary/></#IsSubject>
<#IsBody><#organizer/><#HasSentBy> (zaslal/a <#sentBy/>) </#HasSentBy>zrušil/a tuto událost: <#summary/>.</#IsBody>
@@ -1,27 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,2 +0,0 @@
<#IsSubject>Odpověď na pozvánku k události: <#summary/></#IsSubject>
<#IsBody><#attendee/><#HasSentBy> (zaslal/a <#sentBy/>) </#HasSentBy><#HasAccepted> přijal/a</#HasAccepted><#HasDeclined> odmítl/a</#HasDeclined><#HasNotAcceptedNotDeclined> zatím nerozhodl/a o</#HasNotAcceptedNotDeclined> Vaši pozvánku/ce.</#IsBody>
@@ -1,39 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
attendee: WOString {
value = attendeeName;
escapeHTML = NO;
}
HasAccepted: WOConditional {
condition = hasAccepted;
}
HasDeclined: WOConditional {
condition = hasDeclined;
}
HasNotAcceptedNotDeclined: WOConditional {
condition = hasNotAcceptedNotDeclined;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,2 +0,0 @@
<#IsSubject>Pozvánka na událost: <#summary/></#IsSubject>
<#IsBody><#organizer/><#HasSentBy> (zaslal/a <#sentBy/>)</#HasSentBy> Vás pozval na <#summary/>.</#IsBody>
@@ -1,27 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,4 +0,0 @@
<#IsSubject>Schůzka "<#Summary />" na <#OldAptStartDate /> v <#OldAptStartTime /> byla změněna</#IsSubject>
<#IsBody>Tato schůzka<#HasSentBy> (zaslal/a <#sentBy/>)</#HasSentBy>, předtím ujednána na <#OldAptStartDate /><#IsNotOldAllDay> v <#OldAptStartTime /></#IsNotOldAllDay><#HasOldLocation> (<#OldAptLocation />)</#HasOldLocation> je nyní přesunuta na <#NewAptStartDate /><#IsNotNewAllDay> v <#NewAptStartTime /></#IsNotNewAllDay><#HasNewLocation> (<#NewAptLocation />)</#HasNewLocation>.
Rozhodněte prosím o tomto novém nastavení.
</#IsBody>
@@ -1,79 +0,0 @@
OldAptStartDate: WOString {
value = oldStartDate;
dateformat = "%d/%m/%y";
escapeHTML = NO;
}
OldAptStartTime: WOString {
value = oldStartDate;
dateformat = "%H:%M";
escapeHTML = NO;
}
IsNotOldAllDay: WOConditional {
condition = previousApt.isAllDay;
negate = YES;
}
NewAptStartDate: WOString {
value = newStartDate;
dateformat = "%d/%m/%y";
escapeHTML = NO;
}
NewAptStartTime: WOString {
value = newStartDate;
dateformat = "%H:%M";
escapeHTML = NO;
}
IsNotNewAllDay: WOConditional {
condition = apt.isAllDay;
negate = YES;
}
Organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
OldAptLocation: WOString {
value = previousApt.location;
escapeHTML = NO;
}
NewAptLocation: WOString {
value = apt.location;
escapeHTML = NO;
}
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
Summary: WOString {
value = summary;
escapeHTML = NO;
}
HasNewLocation: WOConditional {
condition = hasNewLocation;
}
HasOldLocation: WOConditional {
condition = hasOldLocation;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
+30 -65
View File
@@ -1,94 +1,59 @@
/*
Copyright (C) 2000-2005 SKYRIX Software AG
Copyright (C) 2010 Inverse
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.
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 SOGo; see the file COPYING. If not, write to the
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
*/
#include "SOGoAptMailNotification.h"
#import <SOGo/NSDictionary+Utilities.h>
#import <SOGo/NSObject+Utilities.h>
@interface SOGoAptMailEnglishDeletion : SOGoAptMailNotification
#import "SOGoAptMailNotification.h"
@interface SOGoAptMailDeletion : SOGoAptMailNotification
@end
@implementation SOGoAptMailEnglishDeletion
@end
@implementation SOGoAptMailDeletion
@interface SOGoAptMailBrazilianPortugueseDeletion : SOGoAptMailNotification
@end
- (NSString *) getSubject
{
NSString *subjectFormat;
@implementation SOGoAptMailBrazilianPortugueseDeletion
@end
if (!values)
[self setupValues];
@interface SOGoAptMailCzechDeletion : SOGoAptMailNotification
@end
subjectFormat = [self labelForKey: @"Event Cancelled: \"%{Summary}\""
inContext: context];
@implementation SOGoAptMailCzechDeletion
@end
return [values keysWithFormat: subjectFormat];
}
@interface SOGoAptMailDutchDeletion : SOGoAptMailNotification
@end
- (NSString *) getBody
{
NSString *bodyFormat;
@implementation SOGoAptMailDutchDeletion
@end
if (!values)
[self setupValues];
@interface SOGoAptMailFrenchDeletion : SOGoAptMailNotification
@end
bodyFormat = [self labelForKey: @"%{Organizer} %{SentByText}has"
@" cancelled this event: %{Summary}."
inContext: context];
@implementation SOGoAptMailFrenchDeletion
@end
return [values keysWithFormat: bodyFormat];
}
@interface SOGoAptMailGermanDeletion : SOGoAptMailNotification
@end
@implementation SOGoAptMailGermanDeletion
@end
@interface SOGoAptMailHungarianDeletion : SOGoAptMailNotification
@end
@implementation SOGoAptMailHungarianDeletion
@end
@interface SOGoAptMailItalianDeletion : SOGoAptMailNotification
@end
@implementation SOGoAptMailItalianDeletion
@end
@interface SOGoAptMailRussianDeletion : SOGoAptMailNotification
@end
@implementation SOGoAptMailRussianDeletion
@end
@interface SOGoAptMailSpanishDeletion : SOGoAptMailNotification
@end
@implementation SOGoAptMailSpanishDeletion
@end
@interface SOGoAptMailSwedishDeletion : SOGoAptMailNotification
@end
@implementation SOGoAptMailSwedishDeletion
@end
@interface SOGoAptMailWelshDeletion : SOGoAptMailNotification
@end
@implementation SOGoAptMailWelshDeletion
@end
@@ -1,2 +0,0 @@
<#IsSubject>Gebeurtenis geannuleerd: <#summary/></#IsSubject>
<#IsBody><#organizer/> <#HasSentBy>(sent by <#sentBy/>) </#HasSentBy>heeft deze gebeurtenis geannuleerd: « <#summary/> ».</#IsBody>
@@ -1,27 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,2 +0,0 @@
<#IsSubject>Antwoord voor de gebeurtenisuitnodiging: <#summary/></#IsSubject>
<#IsBody><#organizer/><#HasSentBy> (sent by <#sentBy/>)</#HasSentBy> heeft uw uitnodiging voor de gebeurtenis <#HasAccepted>geaccepteerd</#HasAccepted><#HasDeclined>geweigerd</#HasDeclined><#HasNotAcceptedNotDeclined>not yet decided upon</#HasNotAcceptedNotDeclined>.</#IsBody>
@@ -1,39 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
attendee: WOString {
value = attendeeName;
escapeHTML = NO;
}
HasAccepted: WOConditional {
condition = hasAccepted;
}
HasDeclined: WOConditional {
condition = hasDeclined;
}
HasNotAcceptedNotDeclined: WOConditional {
condition = hasNotAcceptedNotDeclined;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,2 +0,0 @@
<#IsSubject>Uitnodiging voor gebeurtenis: <#summary/></#IsSubject>
<#IsBody><#organizer/> <#HasSentBy>(sent by <#sentBy/>) </#HasSentBy>heeft u uitgenodigd voor <#summary/>.</#IsBody>
@@ -1,27 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,5 +0,0 @@
<#IsSubject>The appointment "<#Summary />" for the <#OldAptStartDate /> at <#OldAptStartTime /> has changed</#IsSubject>
<#IsBody>
This appointment<#HasSentBy> (sent by <#sentBy/>)</#HasSentBy>, previously set for <#OldAptStartDate /><#IsNotOldAllDay> at <#OldAptStartTime /></#IsNotOldAllDay><#HasOldLocation> (<#OldAptLocation />)</#HasOldLocation> is now scheduled for <#NewAptStartDate /><#IsNotNewAllDay> at <#NewAptStartTime /></#IsNotNewAllDay><#HasNewLocation> (<#NewAptLocation />)</#HasNewLocation>.
Please make a decision for these new settings.
</#IsBody>
@@ -1,79 +0,0 @@
OldAptStartDate: WOString {
value = oldStartDate;
dateformat = "%d/%m/%y";
escapeHTML = NO;
}
OldAptStartTime: WOString {
value = oldStartDate;
dateformat = "%H:%M";
escapeHTML = NO;
}
IsNotOldAllDay: WOConditional {
condition = previousApt.isAllDay;
negate = YES;
}
NewAptStartDate: WOString {
value = newStartDate;
dateformat = "%d/%m/%y";
escapeHTML = NO;
}
NewAptStartTime: WOString {
value = newStartDate;
dateformat = "%H:%M";
escapeHTML = NO;
}
IsNotNewAllDay: WOConditional {
condition = apt.isAllDay;
negate = YES;
}
Organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
OldAptLocation: WOString {
value = previousApt.location;
escapeHTML = NO;
}
NewAptLocation: WOString {
value = apt.location;
escapeHTML = NO;
}
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
Summary: WOString {
value = summary;
escapeHTML = NO;
}
HasNewLocation: WOConditional {
condition = hasNewLocation;
}
HasOldLocation: WOConditional {
condition = hasOldLocation;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,2 +0,0 @@
<#IsSubject>Event Cancelled: <#summary/></#IsSubject>
<#IsBody><#organizer/> <#HasSentBy>(sent by <#sentBy/>) </#HasSentBy>has cancelled this event: <#summary/>.</#IsBody>
@@ -1,27 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,2 +0,0 @@
<#IsSubject>Event Invitation: <#summary/></#IsSubject>
<#IsBody><#organizer/> <#HasSentBy>(sent by <#sentBy/>) </#HasSentBy>has invited you to <#summary/>.</#IsBody>
@@ -1,27 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,5 +0,0 @@
<#IsSubject>The appointment "<#Summary />" for the <#OldAptStartDate /> at <#OldAptStartTime /> has changed</#IsSubject>
<#IsBody>
This appointment<#HasSentBy> (sent by <#sentBy/>)</#HasSentBy>, previously set for <#OldAptStartDate /><#IsNotOldAllDay> at <#OldAptStartTime /></#IsNotOldAllDay><#HasOldLocation> (<#OldAptLocation />)</#HasOldLocation> is now scheduled for <#NewAptStartDate /><#IsNotNewAllDay> at <#NewAptStartTime /></#IsNotNewAllDay><#HasNewLocation> (<#NewAptLocation />)</#HasNewLocation>.
Please make a decision for these new settings.
</#IsBody>
@@ -1,79 +0,0 @@
OldAptStartDate: WOString {
value = oldStartDate;
dateformat = "%d/%m/%y";
escapeHTML = NO;
}
OldAptStartTime: WOString {
value = oldStartDate;
dateformat = "%H:%M";
escapeHTML = NO;
}
IsNotOldAllDay: WOConditional {
condition = previousApt.isAllDay;
negate = YES;
}
NewAptStartDate: WOString {
value = newStartDate;
dateformat = "%d/%m/%y";
escapeHTML = NO;
}
NewAptStartTime: WOString {
value = newStartDate;
dateformat = "%H:%M";
escapeHTML = NO;
}
IsNotNewAllDay: WOConditional {
condition = apt.isAllDay;
negate = YES;
}
Organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
OldAptLocation: WOString {
value = previousApt.location;
escapeHTML = NO;
}
NewAptLocation: WOString {
value = apt.location;
escapeHTML = NO;
}
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
Summary: WOString {
value = summary;
escapeHTML = NO;
}
HasNewLocation: WOConditional {
condition = hasNewLocation;
}
HasOldLocation: WOConditional {
condition = hasOldLocation;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,2 +0,0 @@
<#IsSubject>Événement annulé : « <#summary/> »</#IsSubject>
<#IsBody><#organizer/> <#HasSentBy>(envoyé par <#sentBy/>) </#HasSentBy>a annulé cet événement : « <#summary/> ».</#IsBody>
@@ -1,27 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,2 +0,0 @@
<#IsSubject>Réponse à l'invitation : «<#summary/>»</#IsSubject>
<#IsBody><#attendee/><#HasSentBy> (envoyé par <#sentBy/>)</#HasSentBy> a <#HasAccepted>accepté</#HasAccepted><#HasDeclined>refusé</#HasDeclined><#HasNotAcceptedNotDeclined>choisi de reporter sa décision par rapport à</#HasNotAcceptedNotDeclined> votre invitation.</#IsBody>
@@ -1,39 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
attendee: WOString {
value = attendeeName;
escapeHTML = NO;
}
HasAccepted: WOConditional {
condition = hasAccepted;
}
HasDeclined: WOConditional {
condition = hasDeclined;
}
HasNotAcceptedNotDeclined: WOConditional {
condition = hasNotAcceptedNotDeclined;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,2 +0,0 @@
<#IsSubject>Invitation : <#summary/></#IsSubject>
<#IsBody><#organizer/> <#HasSentBy>(envoyé par <#sentBy/>) </#HasSentBy>vous a invité à « <#summary/> ».</#IsBody>
@@ -1,27 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,5 +0,0 @@
<#IsSubject>Le rendez-vous "<#Summary />" du <#OldAptStartDate /> à <#OldAptStartTime /> est modifié</#IsSubject>
<#IsBody>
La réunion<#HasSentBy> (envoyé par <#sentBy/>)</#HasSentBy> qui devait se dérouler le <#OldAptStartDate /><#IsNotOldAllDay> à <#OldAptStartTime /></#IsNotOldAllDay><#HasOldLocation> (<#OldAptLocation />)</#HasOldLocation> est maintenant prévue le <#NewAptStartDate /><#IsNotNewAllDay> à <#NewAptStartTime /></#IsNotNewAllDay><#HasNewLocation> (<#NewAptLocation />)</#HasNewLocation>.
Vous êtes invité à accepter ou refuser de participer à la réunion pour cette nouvelle date.
</#IsBody>
@@ -1,79 +0,0 @@
OldAptStartDate: WOString {
value = oldStartDate;
dateformat = "%d/%m/%y";
escapeHTML = NO;
}
OldAptStartTime: WOString {
value = oldStartDate;
dateformat = "%H:%M";
escapeHTML = NO;
}
IsNotOldAllDay: WOConditional {
condition = previousApt.isAllDay;
negate = YES;
}
NewAptStartDate: WOString {
value = newStartDate;
dateformat = "%d/%m/%y";
escapeHTML = NO;
}
NewAptStartTime: WOString {
value = newStartDate;
dateformat = "%H:%M";
escapeHTML = NO;
}
IsNotNewAllDay: WOConditional {
condition = apt.isAllDay;
negate = YES;
}
Organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
OldAptLocation: WOString {
value = previousApt.location;
escapeHTML = NO;
}
NewAptLocation: WOString {
value = apt.location;
escapeHTML = NO;
}
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
Summary: WOString {
value = summary;
escapeHTML = NO;
}
HasNewLocation: WOConditional {
condition = hasNewLocation;
}
HasOldLocation: WOConditional {
condition = hasOldLocation;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,2 +0,0 @@
<#IsSubject>Termin abgesagt: <#summary/></#IsSubject>
<#IsBody><#organizer/> <#HasSentBy>(sent by <#sentBy/>) </#HasSentBy>hat diesen Termin abgesagt: <#summary/></#IsBody>
@@ -1,27 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,2 +0,0 @@
<#IsSubject>Antwort Termineinladung: <#summary/></#IsSubject>
<#IsBody><#attendee/><#HasSentBy> (sent by <#sentBy/>)</#HasSentBy> hat <#HasAccepted>Ihre Termineinladung akzeptiert</#HasAccepted><#HasDeclined>Ihre Termineinladung abgelehnt</#HasDeclined><#HasNotAcceptedNotDeclined>noch nicht über Ihre Termineinladung entschieden</#HasNotAcceptedNotDeclined></#IsBody>.
@@ -1,39 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
attendee: WOString {
value = attendeeName;
escapeHTML = NO;
}
HasAccepted: WOConditional {
condition = hasAccepted;
}
HasDeclined: WOConditional {
condition = hasDeclined;
}
HasNotAcceptedNotDeclined: WOConditional {
condition = hasNotAcceptedNotDeclined;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,2 +0,0 @@
<#IsSubject>Termineinladung: <#summary/></#IsSubject>
<#IsBody><#organizer/> <#HasSentBy>(sent by <#sentBy/>) </#HasSentBy>hat Sie zu <#summary/> eingeladen.</#IsBody>
@@ -1,27 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,5 +0,0 @@
<#IsSubject>Der Termin "<#Summary />" am <#OldAptStartDate /> um <#OldAptStartTime /> hat sich geändert</#IsSubject>
<#IsBody>
Dieser Termin <#HasSentBy>(sent by <#sentBy/>)</#HasSentBy>, ursprünglich geplant am <#OldAptStartDate /><#IsNotOldAllDay> um <#OldAptStartTime /></#IsNotOldAllDay><#HasOldLocation> (<#OldAptLocation />)</#HasOldLocation>, ist nun verschoben auf den <#NewAptStartDate /><#IsNotNewAllDay> um <#NewAptStartTime /></#IsNotNewAllDay><#HasNewLocation> (<#NewAptLocation />)</#HasNewLocation>.
Bitte treffen Sie eine Entscheidung über diese Änderung.
</#IsBody>
@@ -1,79 +0,0 @@
OldAptStartDate: WOString {
value = oldStartDate;
dateformat = "%d/%m/%y";
escapeHTML = NO;
}
OldAptStartTime: WOString {
value = oldStartDate;
dateformat = "%H:%M";
escapeHTML = NO;
}
IsNotOldAllDay: WOConditional {
condition = previousApt.isAllDay;
negate = YES;
}
NewAptStartDate: WOString {
value = newStartDate;
dateformat = "%d/%m/%y";
escapeHTML = NO;
}
NewAptStartTime: WOString {
value = newStartDate;
dateformat = "%H:%M";
escapeHTML = NO;
}
IsNotNewAllDay: WOConditional {
condition = apt.isAllDay;
negate = YES;
}
Organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
OldAptLocation: WOString {
value = previousApt.location;
escapeHTML = NO;
}
NewAptLocation: WOString {
value = apt.location;
escapeHTML = NO;
}
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
Summary: WOString {
value = summary;
escapeHTML = NO;
}
HasNewLocation: WOConditional {
condition = hasNewLocation;
}
HasOldLocation: WOConditional {
condition = hasOldLocation;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,2 +0,0 @@
<#IsSubject>Találkozó törölve: <#summary/></#IsSubject>
<#IsBody><#organizer/> <#HasSentBy>(<#sentBy/> által elküldve) </#HasSentBy>törölte ezt a találkozót: <#summary/>.</#IsBody>
@@ -1,2 +0,0 @@
<#IsSubject>Válasz a meghívásra: <#summary/></#IsSubject>
<#IsBody><#attendee/><#HasSentBy> (<#sentBy/> által elküldve)</#HasSentBy> <#HasAccepted>elfogadta</#HasAccepted><#HasDeclined>visszautasította</#HasDeclined><#HasNotAcceptedNotDeclined>még meggondolja</#HasNotAcceptedNotDeclined> a meghívását.</#IsBody>
@@ -1,2 +0,0 @@
<#IsSubject>Meghívás találkozóra: <#summary/></#IsSubject>
<#IsBody><#organizer/> <#HasSentBy>(<#sentBy/> által elküldve) </#HasSentBy>meghívta önt erre a találkozóra: <#summary/>.</#IsBody>
@@ -1,5 +0,0 @@
<#IsSubject>A "<#Summary />" találkozó a(z) <#OldAptStartDate /> időpontban <#OldAptStartTime /> megváltozott</#IsSubject>
<#IsBody>
A találkozó<#HasSentBy> (<#sentBy/> által elküldve)</#HasSentBy>, amelyet korábban a(z) <#OldAptStartDate /> időpontra tervezetek<#IsNotOldAllDay> <#OldAptStartTime /></#IsNotOldAllDay><#HasOldLocation> (<#OldAptLocation />)</#HasOldLocation> most a <#NewAptStartDate /><#IsNotNewAllDay> <#NewAptStartTime /> időpontra lett ütemezve.</#IsNotNewAllDay><#HasNewLocation> (<#NewAptLocation />)</#HasNewLocation>.
Kérem döntsön az új időpontról.
</#IsBody>
+2 -10
View File
@@ -23,29 +23,21 @@
#ifndef SOGOAPTMAILICALREPLY_H
#define SOGOAPTMAILICALREPLY_H
#import <NGObjWeb/SoComponent.h>
#import "SOGoAptMailNotification.h"
@class NSString;
@class NSCalendarDate;
@class iCalPerson;
@class iCalEntityObject;
/*
* NOTE: We inherit from SoComponent in order to get the correct
* resourceManager required for this product
*/
@interface SOGoAptMailICalReply : SoComponent
@interface SOGoAptMailICalReply : SOGoAptMailNotification
{
iCalEntityObject *apt;
iCalPerson *attendee;
NSString *homePageURL;
BOOL isSubject;
}
- (void) setApt: (iCalEntityObject *) newApt;
- (iCalEntityObject *) apt;
- (void) setAttendee: (iCalPerson *) newAttendee;
- (iCalPerson *) attendee;
+54 -180
View File
@@ -1,6 +1,6 @@
/* SOGoAptMailICalReply - this file is part of SOGo
*
* Copyright (C) 2007-2009 Inverse inc.
* Copyright (C) 2010 Inverse inc.
*
* Author: Wolfgang Sourdeau <wsourdeau@inverse.ca>
*
@@ -20,51 +20,18 @@
* Boston, MA 02111-1307, USA.
*/
#import <Foundation/NSCharacterSet.h>
#import <Foundation/NSCalendarDate.h>
#import <Foundation/NSTimeZone.h>
#import <NGObjWeb/WOActionResults.h>
#import <NGObjWeb/WOResponse.h>
#import <NGObjWeb/WOContext+SoObjects.h>
#import <NGExtensions/NSObject+Logs.h>
#import <NGCards/iCalEntityObject.h>
#import <NGCards/iCalPerson.h>
#import <SOGo/NSString+Utilities.h>
#import <SOGo/SOGoUser.h>
#import <SOGo/SOGoUserDefaults.h>
#import <SOGo/NSDictionary+Utilities.h>
#import <SOGo/NSObject+Utilities.h>
#import "iCalPerson+SOGo.h"
#import "SOGoAptMailICalReply.h"
@interface SOGoAptMailICalReply (PrivateAPI)
- (BOOL) isSubject;
@end
@implementation SOGoAptMailICalReply
static NSCharacterSet *wsSet = nil;
+ (void) initialize
{
static BOOL didInit = NO;
if (!didInit)
{
didInit = YES;
wsSet = [[NSCharacterSet whitespaceAndNewlineCharacterSet] retain];
}
}
- (id) init
{
if ((self = [super init]))
{
apt = nil;
attendee = nil;
}
@@ -73,21 +40,10 @@ static NSCharacterSet *wsSet = nil;
- (void) dealloc
{
[apt release];
[attendee release];
[super dealloc];
}
- (void) setApt: (iCalEntityObject *) newApt
{
ASSIGN (apt, newApt);
}
- (iCalEntityObject *) apt
{
return apt;
}
- (void) setAttendee: (iCalPerson *) newAttendee
{
ASSIGN (attendee, newAttendee);
@@ -110,158 +66,76 @@ static NSCharacterSet *wsSet = nil;
return [attendee rfc822Email];
}
- (BOOL) hasSentBy
- (void) setupValues
{
return [attendee hasSentBy];
}
NSDictionary *sentByValues;
NSString *sentBy, *sentByText;
- (NSString *) sentBy
{
return [attendee sentBy];
}
[super setupValues];
- (BOOL) hasAccepted
{
NSString *partStat;
[values setObject: [self attendeeName] forKey: @"Attendee"];
partStat = [[attendee partStat] lowercaseString];
return [partStat isEqualToString: @"accepted"];
}
- (BOOL) hasDeclined
{
NSString *partStat;
partStat = [[attendee partStat] lowercaseString];
return [partStat isEqualToString: @"declined"];
}
- (BOOL) hasNotAcceptedNotDeclined
{
return !([self hasAccepted] || [self hasDeclined]);
}
- (NSCalendarDate *) startDate
{
NSCalendarDate *date;
SOGoUser *user;
NSTimeZone *tz;
date = [apt startDate];
user = [[self context] activeUser];
tz = [[user userDefaults] timeZone];
[date setTimeZone: tz];
return date;
}
- (NSString *) summary
{
return [apt summary];
}
- (BOOL) isSubject
{
return isSubject;
sentBy = [attendee sentBy];
if ([sentBy length])
{
sentByValues = [NSDictionary dictionaryWithObject: sentBy
forKey: @"SentBy"];
sentByText
= [sentByValues keysWithFormat: [self
labelForKey: @"(sent by %{SentBy})"
inContext: context]];
}
else
sentByText = @"";
[values setObject: sentByText forKey: @"SentByText"];
}
/* Generate Response */
- (NSString *) getSubject
{
NSString *subject;
NSString *subjectFormat;
isSubject = YES;
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!";
}
if (!values)
[self setupValues];
return [subject asQPSubjectString: @"utf-8"];
subjectFormat = [self labelForKey: @"Reply to invitation: \"%{Summary}\""
inContext: context];
return [values keysWithFormat: subjectFormat];
}
- (NSString *) getBody
{
NSString *body;
NSString *bodyFormat;
NSString *partStat, *delegate;
isSubject = NO;
if (!values)
[self setupValues];
body = [[self generateResponse] contentAsString];
partStat = [[attendee partStat] lowercaseString];
if ([partStat isEqualToString: @"accepted"])
bodyFormat = @"%{Attendee} %{SentByText}has accepted your event invitation.";
else if ([partStat isEqualToString: @"declined"])
bodyFormat = @"%{Attendee} %{SentByText}has declined your event invitation.";
else if ([partStat isEqualToString: @"delegated"])
{
bodyFormat = @"%{Attendee} %{SentByText}has delegated the invitation"
@" to %{Delegate}.";
delegate = [attendee delegatedTo];
if ([delegate length] > 7)
{
delegate = [delegate substringFromIndex: 7];
if ([delegate characterAtIndex: 0] == '"' && [delegate hasSuffix: @"\""])
delegate = [delegate substringWithRange: NSMakeRange(1, [delegate length]-2)];
[values setObject: delegate forKey: @"Delegate"];
}
}
else
bodyFormat = @"%{Attendee} %{SentByText}has not yet decided upon your event invitation.";
return [body stringByTrimmingCharactersInSet: wsSet];
return [values keysWithFormat: [self labelForKey: bodyFormat inContext: context]];
}
@end
@interface SOGoAptMailEnglishICalReply : SOGoAptMailICalReply
@end
@implementation SOGoAptMailEnglishICalReply
@end
@interface SOGoAptMailBrazilianPortugueseICalReply : SOGoAptMailICalReply
@end
@implementation SOGoAptMailBrazilianPortugueseICalReply
@end
@interface SOGoAptMailCzechICalReply : SOGoAptMailICalReply
@end
@implementation SOGoAptMailCzechICalReply
@end
@interface SOGoAptMailFrenchICalReply : SOGoAptMailICalReply
@end
@implementation SOGoAptMailFrenchICalReply
@end
@interface SOGoAptMailGermanICalReply : SOGoAptMailICalReply
@end
@implementation SOGoAptMailGermanICalReply
@end
@interface SOGoAptMailHungarianICalReply : SOGoAptMailICalReply
@end
@implementation SOGoAptMailHungarianICalReply
@end
@interface SOGoAptMailItalianICalReply : SOGoAptMailICalReply
@end
@implementation SOGoAptMailItalianICalReply
@end
@interface SOGoAptMailRussianICalReply : SOGoAptMailICalReply
@end
@implementation SOGoAptMailRussianICalReply
@end
@interface SOGoAptMailSpanishICalReply : SOGoAptMailICalReply
@end
@implementation SOGoAptMailSpanishICalReply
@end
@interface SOGoAptMailSwedishICalReply : SOGoAptMailICalReply
@end
@implementation SOGoAptMailSwedishICalReply
@end
@interface SOGoAptMailWelshICalReply : SOGoAptMailICalReply
@end
@implementation SOGoAptMailWelshICalReply
@end
+34 -66
View File
@@ -1,94 +1,62 @@
/*
Copyright (C) 2000-2005 SKYRIX Software AG
This file is part of OpenGroupware.org.
OGo is free software; you can redistribute it and/or modify it under
Copyright (C) 2010 Inverse
This file is part of SOGo
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.
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 SOGo; see the file COPYING. If not, write to the
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
*/
#import <NGCards/iCalEvent.h>
#import <SOGo/NSDictionary+Utilities.h>
#import <SOGo/NSObject+Utilities.h>
#import "iCalPerson+SOGo.h"
#import "SOGoAptMailNotification.h"
@interface SOGoAptMailEnglishInvitation : SOGoAptMailNotification
@interface SOGoAptMailInvitation : SOGoAptMailNotification
@end
@implementation SOGoAptMailEnglishInvitation
@end
@implementation SOGoAptMailInvitation
@interface SOGoAptMailBrazilianPortugueseInvitation : SOGoAptMailNotification
@end
- (NSString *) getSubject
{
NSString *subjectFormat;
@implementation SOGoAptMailBrazilianPortugueseInvitation
@end
if (!values)
[self setupValues];
@interface SOGoAptMailCzechInvitation : SOGoAptMailNotification
@end
subjectFormat = [self labelForKey: @"Event Invitation: \"%{Summary}\""
inContext: context];
@implementation SOGoAptMailCzechInvitation
@end
return [values keysWithFormat: subjectFormat];
}
@interface SOGoAptMailDutchInvitation : SOGoAptMailNotification
@end
- (NSString *) getBody
{
NSString *bodyFormat;
@implementation SOGoAptMailDutchInvitation
@end
if (!values)
[self setupValues];
@interface SOGoAptMailFrenchInvitation : SOGoAptMailNotification
@end
bodyFormat = [self labelForKey: @"%{Organizer} %{SentByText}has invited you to %{Summary}."
inContext: context];
@implementation SOGoAptMailFrenchInvitation
@end
return [values keysWithFormat: bodyFormat];
}
@interface SOGoAptMailGermanInvitation : SOGoAptMailNotification
@end
@implementation SOGoAptMailGermanInvitation
@end
@interface SOGoAptMailHungarianInvitation : SOGoAptMailNotification
@end
@implementation SOGoAptMailHungarianInvitation
@end
@interface SOGoAptMailItalianInvitation : SOGoAptMailNotification
@end
@implementation SOGoAptMailItalianInvitation
@end
@interface SOGoAptMailRussianInvitation : SOGoAptMailNotification
@end
@implementation SOGoAptMailRussianInvitation
@end
@interface SOGoAptMailSpanishInvitation : SOGoAptMailNotification
@end
@implementation SOGoAptMailSpanishInvitation
@end
@interface SOGoAptMailSwedishInvitation : SOGoAptMailNotification
@end
@implementation SOGoAptMailSwedishInvitation
@end
@interface SOGoAptMailWelshInvitation : SOGoAptMailNotification
@end
@implementation SOGoAptMailWelshInvitation
@end
@@ -1,2 +0,0 @@
<#IsSubject>Evento cancellato : " <#summary/> "</#IsSubject>
<#IsBody><#organizer/> <#HasSentBy>(sent by <#sentBy/>) </#HasSentBy>ha cancellato questo elemento: " <#summary/> ".</#IsBody>
@@ -1,27 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,2 +0,0 @@
<#IsSubject>Re: Appuntemento : "<#summary/>"</#IsSubject>
<#IsBody><#attendee/><#HasSentBy> (sent by <#sentBy/>)</#HasSentBy> ha <#HasAccepted>accettato</#HasAccepted><#HasDeclined>declinato</#HasDeclined><#HasNotAcceptedNotDeclined>not yet decided upon</#HasNotAcceptedNotDeclined> l'invito al proprio evento.</#IsBody>
@@ -1,39 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
attendee: WOString {
value = attendeeName;
escapeHTML = NO;
}
HasAccepted: WOConditional {
condition = hasAccepted;
}
HasDeclined: WOConditional {
condition = hasDeclined;
}
HasNotAcceptedNotDeclined: WOConditional {
condition = hasNotAcceptedNotDeclined;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,2 +0,0 @@
<#IsSubject>Invito evento: <#summary/></#IsSubject>
<#IsBody>Si è stati invitati da <#organizer/> <#HasSentBy>(sent by <#sentBy/>) </#HasSentBy>a <#summary/>.</#IsBody>
@@ -1,27 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,5 +0,0 @@
<#IsSubject>L'appuntamento "<#Summary />" fissato in data <#OldAptStartDate /> alle ore <#OldAptStartTime /> &egrave; stato modificato </#IsSubject>
<#IsBody>
Questo appuntamento<#HasSentBy> (sent by <#sentBy/>)</#HasSentBy>, fissato precedentemete in data <#OldAptStartDate /><#HasOldLocation> (<#OldAptLocation />)</#HasOldLocation><#IsNotOldAllDay> alle ore <#OldAptStartTime /></#IsNotOldAllDay> &egrave; ora programmato il <#NewAptStartDate /><#IsNotNewAllDay> alle ore <#NewAptStartTime/></#IsNotNewAllDay><#HasNewLocation> (<#NewAptLocation />)</#HasNewLocation>.
Per confermare o disdire.
</#IsBody>
@@ -1,79 +0,0 @@
OldAptStartDate: WOString {
value = oldStartDate;
dateformat = "%d/%m/%y";
escapeHTML = NO;
}
OldAptStartTime: WOString {
value = oldStartDate;
dateformat = "%H:%M";
escapeHTML = NO;
}
IsNotOldAllDay: WOConditional {
condition = previousApt.isAllDay;
negate = YES;
}
NewAptStartDate: WOString {
value = newStartDate;
dateformat = "%d/%m/%y";
escapeHTML = NO;
}
NewAptStartTime: WOString {
value = newStartDate;
dateformat = "%H:%M";
escapeHTML = NO;
}
IsNotNewAllDay: WOConditional {
condition = apt.isAllDay;
negate = YES;
}
Organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
OldAptLocation: WOString {
value = previousApt.location;
escapeHTML = NO;
}
NewAptLocation: WOString {
value = apt.location;
escapeHTML = NO;
}
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
Summary: WOString {
value = summary;
escapeHTML = NO;
}
HasNewLocation: WOConditional {
condition = hasNewLocation;
}
HasOldLocation: WOConditional {
condition = hasOldLocation;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -25,8 +25,11 @@
#include <NGObjWeb/SoComponent.h>
@class NSString, NSTimeZone, NSCalendarDate;
@class iCalEntityObject;
@class NSCalendarDate;
@class NSMutableDictionary;
@class NSString;
@class NSTimeZone;
@class iCalEvent;
/*
* NOTE: We inherit from SoComponent in order to get the correct
@@ -34,27 +37,30 @@
*/
@interface SOGoAptMailNotification : SoComponent
{
iCalEntityObject *apt;
iCalEntityObject *previousApt;
iCalEvent *apt;
iCalEvent *previousApt;
NSString *homePageURL;
NSTimeZone *viewTZ;
NSCalendarDate *oldStartDate;
NSCalendarDate *newStartDate;
BOOL isSubject;
NSString *organizerName;
NSMutableDictionary *values;
}
- (iCalEntityObject *) apt;
- (void) setApt: (iCalEntityObject *) theApt;
- (void) setupValues;
- (iCalEntityObject *) previousApt;
- (void) setPreviousApt: (iCalEntityObject *) theApt;
- (iCalEvent *) apt;
- (void) setApt: (iCalEvent *) theApt;
- (iCalEvent *) previousApt;
- (void) setPreviousApt: (iCalEvent *) theApt;
- (void) setOrganizerName: (NSString *) theString;
- (NSString *) organizerName;
- (BOOL) hasSentBy;
- (NSString *) sentBy;
- (NSCalendarDate *) oldStartDate;
- (NSCalendarDate *) newStartDate;
- (NSString *) getSubject;
- (NSString *) getBody;
@@ -27,33 +27,24 @@
#import <NGObjWeb/WOActionResults.h>
#import <NGObjWeb/WOResponse.h>
#import <NGExtensions/NSObject+Logs.h>
#import <NGCards/iCalEntityObject.h>
#import <NGCards/iCalEvent.h>
#import <NGCards/iCalPerson.h>
#import <SoObjects/SOGo/NSString+Utilities.h>
#import <SOGo/NSDictionary+Utilities.h>
#import <SOGo/NSObject+Utilities.h>
#import <SOGo/NSString+Utilities.h>
#import "iCalPerson+SOGo.h"
#import "SOGoAptMailNotification.h"
@interface SOGoAptMailNotification (PrivateAPI)
- (BOOL) isSubject;
- (void) setIsSubject: (BOOL) newIsSubject;
@end
@implementation SOGoAptMailNotification
static NSCharacterSet *wsSet = nil;
static NSTimeZone *UTC = nil;
+ (void) initialize
{
if (!wsSet)
{
wsSet = [[NSCharacterSet whitespaceAndNewlineCharacterSet] retain];
UTC = [[NSTimeZone timeZoneWithAbbreviation: @"UTC"] retain];
}
if (!UTC)
UTC = [[NSTimeZone timeZoneWithAbbreviation: @"UTC"] retain];
}
- (id) init
@@ -61,6 +52,7 @@ static NSTimeZone *UTC = nil;
if ((self = [super init]))
{
apt = nil;
values = nil;
}
return self;
@@ -68,6 +60,7 @@ static NSTimeZone *UTC = nil;
- (void) dealloc
{
[values release];
[apt release];
[previousApt release];
[organizerName release];
@@ -77,24 +70,24 @@ static NSTimeZone *UTC = nil;
[super dealloc];
}
- (iCalEntityObject *) apt
- (iCalEvent *) apt
{
return apt;
}
- (void) setApt: (iCalEntityObject *) theApt
- (void) setApt: (iCalEvent *) theApt
{
ASSIGN(apt, theApt);
ASSIGN (apt, theApt);
}
- (iCalEntityObject *) previousApt
- (iCalEvent *) previousApt
{
return previousApt;
}
- (void) setPreviousApt: (iCalEntityObject *) theApt
- (void) setPreviousApt: (iCalEvent *) theApt
{
ASSIGN(previousApt, theApt);
ASSIGN (previousApt, theApt);
}
- (BOOL) hasNewLocation
@@ -109,42 +102,32 @@ static NSTimeZone *UTC = nil;
- (NSTimeZone *) viewTZ
{
if (self->viewTZ) return self->viewTZ;
if (viewTZ) return viewTZ;
return UTC;
}
- (void) setViewTZ: (NSTimeZone *) _viewTZ
{
ASSIGN(self->viewTZ, _viewTZ);
ASSIGN (viewTZ, _viewTZ);
}
- (NSCalendarDate *) oldStartDate
{
if (!self->oldStartDate)
if (!oldStartDate)
{
ASSIGN(self->oldStartDate, [[self previousApt] startDate]);
[self->oldStartDate setTimeZone: [self viewTZ]];
ASSIGN (oldStartDate, [[self previousApt] startDate]);
[oldStartDate setTimeZone: [self viewTZ]];
}
return self->oldStartDate;
return oldStartDate;
}
- (NSCalendarDate *) newStartDate
{
if (!self->newStartDate)
if (!newStartDate)
{
ASSIGN(self->newStartDate, [[self apt] startDate]);
[self->newStartDate setTimeZone:[self viewTZ]];
ASSIGN (newStartDate, [[self apt] startDate]);
[newStartDate setTimeZone:[self viewTZ]];
}
return self->newStartDate;
}
- (BOOL) isSubject
{
return isSubject;
}
- (void) setIsSubject: (BOOL) newIsSubject
{
isSubject = newIsSubject;
return newStartDate;
}
- (NSString *) summary
@@ -154,7 +137,7 @@ static NSTimeZone *UTC = nil;
- (void) setOrganizerName: (NSString *) theString
{
ASSIGN(organizerName, theString);
ASSIGN (organizerName, theString);
}
- (NSString *) organizerName
@@ -162,47 +145,49 @@ static NSTimeZone *UTC = nil;
return organizerName;
}
- (BOOL) hasSentBy
{
return [[apt organizer] hasSentBy];
}
- (NSString *) sentBy
{
return [[apt organizer] sentBy];
}
/* Helpers */
/* Generate Response */
- (NSString *) getSubject
{
NSString *subject;
[self subclassResponsibility: _cmd];
[self setIsSubject: YES];
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 asQPSubjectString: @"utf-8"];
return nil;
}
- (NSString *) getBody
{
NSString *body;
[self subclassResponsibility: _cmd];
[self setIsSubject:NO];
return nil;
}
body = [[self generateResponse] contentAsString];
- (void) setupValues
{
NSDictionary *sentByValues;
NSString *sentBy, *sentByText;
return [body stringByTrimmingCharactersInSet: wsSet];
values = [NSMutableDictionary new];
[values setObject: [self summary] forKey: @"Summary"];
if (organizerName)
{
[values setObject: organizerName forKey: @"Organizer"];
sentBy = [[apt organizer] sentBy];
if ([sentBy length])
{
sentByValues = [NSDictionary dictionaryWithObject: sentBy
forKey: @"SentBy"];
sentByText
= [sentByValues keysWithFormat: [self
labelForKey: @"(sent by %{SentBy})"
inContext: context]];
}
else
sentByText = @"";
[values setObject: sentByText forKey: @"SentByText"];
}
}
@end
@@ -1,2 +0,0 @@
<#IsSubject>Событие отменено: <#summary/></#IsSubject>
<#IsBody><#organizer/> <#HasSentBy>(отправил <#sentBy/>) </#HasSentBy>отменил это событие: <#summary/>.</#IsBody>
@@ -1,27 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,2 +0,0 @@
<#IsSubject>Ответ на приглашение: <#summary/></#IsSubject>
<#IsBody><#attendee/><#HasSentBy> (послал <#sentBy/>)</#HasSentBy> <#HasAccepted>согласился</#HasAccepted><#HasDeclined>отказался</#HasDeclined><#HasNotAcceptedNotDeclined>не определился с желанием</#HasNotAcceptedNotDeclined> участвовать в запланированном мероприятии.</#IsBody>
@@ -1,39 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
attendee: WOString {
value = attendeeName;
escapeHTML = NO;
}
HasAccepted: WOConditional {
condition = hasAccepted;
}
HasDeclined: WOConditional {
condition = hasDeclined;
}
HasNotAcceptedNotDeclined: WOConditional {
condition = hasNotAcceptedNotDeclined;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,2 +0,0 @@
<#IsSubject>Приглашение на мероприятие: <#summary/></#IsSubject>
<#IsBody><#organizer/> <#HasSentBy>(послал <#sentBy/>) </#HasSentBy>приглашает Вас на мероприятие <#summary/>.</#IsBody>
@@ -1,27 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,5 +0,0 @@
<#IsSubject>Изменено мероприятие "<#Summary />", запланированное на <#OldAptStartDate /> <#OldAptStartTime />.</#IsSubject>
<#IsBody>
Это мероприятие<#HasSentBy> (пригласил <#sentBy/>)</#HasSentBy>, ранее было запланировано на <#OldAptStartDate /><#IsNotOldAllDay> в <#OldAptStartTime /></#IsNotOldAllDay><#HasOldLocation> (<#OldAptLocation />)</#HasOldLocation> теперь запланировано на <#NewAptStartDate /><#IsNotNewAllDay> в <#NewAptStartTime /></#IsNotNewAllDay><#HasNewLocation> (<#NewAptLocation />)</#HasNewLocation>.
Пожалуйста примите решение об участии в мероприятии в новое время и/или в новом месте.
</#IsBody>
@@ -1,79 +0,0 @@
OldAptStartDate: WOString {
value = oldStartDate;
dateformat = "%d/%m/%y";
escapeHTML = NO;
}
OldAptStartTime: WOString {
value = oldStartDate;
dateformat = "%H:%M";
escapeHTML = NO;
}
IsNotOldAllDay: WOConditional {
condition = previousApt.isAllDay;
negate = YES;
}
NewAptStartDate: WOString {
value = newStartDate;
dateformat = "%d/%m/%y";
escapeHTML = NO;
}
NewAptStartTime: WOString {
value = newStartDate;
dateformat = "%H:%M";
escapeHTML = NO;
}
IsNotNewAllDay: WOConditional {
condition = apt.isAllDay;
negate = YES;
}
Organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
OldAptLocation: WOString {
value = previousApt.location;
escapeHTML = NO;
}
NewAptLocation: WOString {
value = apt.location;
escapeHTML = NO;
}
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
Summary: WOString {
value = summary;
escapeHTML = NO;
}
HasNewLocation: WOConditional {
condition = hasNewLocation;
}
HasOldLocation: WOConditional {
condition = hasOldLocation;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,2 +0,0 @@
<#IsSubject>Evento cancelado: <#summary/></#IsSubject>
<#IsBody><#organizer/> <#HasSentBy>(sent by <#sentBy/>) </#HasSentBy>ha cancelado este evento: « <#summary/> ».</#IsBody>
@@ -1,27 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,2 +0,0 @@
<#IsSubject>Respuesta a la invitación al evento: <#summary/></#IsSubject>
<#IsBody><#attendee/><#HasSentBy> (sent by <#sentBy/>)</#HasSentBy> ha <#HasAccepted>aceptado</#HasAccepted><#HasDelined>rechazado</#HasDeclined><#HasNotAcceptedNotDeclined>not yet decided upon</#HasNotAcceptedNotDeclined> su invitación al evento.</#IsBody>
@@ -1,39 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
attendee: WOString {
value = attendeeName;
escapeHTML = NO;
}
HasAccepted: WOConditional {
condition = hasAccepted;
}
HasDeclined: WOConditional {
condition = hasDeclined;
}
HasNotAcceptedNotDeclined: WOConditional {
condition = hasNotAcceptedNotDeclined;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,2 +0,0 @@
<#IsSubject>Invitación a evento: <#summary/></#IsSubject>
<#IsBody><#organizer/> <#HasSentBy>(sent by <#sentBy/>) </#HasSentBy>le ha invitado a <#summary/>.</#IsBody>
@@ -1,27 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,5 +0,0 @@
<#IsSubject>The appointment "<#Summary />" for the <#OldAptStartDate /> at <#OldAptStartTime /> has changed</#IsSubject>
<#IsBody>
This appointment<#HasSentBy> (sent by <#sentBy/>)</#HasSentBy>, previously set for <#OldAptStartDate /><#IsNotOldAllDay> at <#OldAptStartTime /></#IsNotOldAllDay><#HasOldLocation> (<#OldAptLocation />)</#HasOldLocation> is now scheduled for <#NewAptStartDate /><#IsNotNewAllDay> at <#NewAptStartTime /></#IsNotNewAllDay><#HasNewLocation> (<#NewAptLocation />)</#HasNewLocation>.
Please make a decision for these new settings.
</#IsBody>
@@ -1,79 +0,0 @@
OldAptStartDate: WOString {
value = oldStartDate;
dateformat = "%d/%m/%y";
escapeHTML = NO;
}
OldAptStartTime: WOString {
value = oldStartDate;
dateformat = "%H:%M";
escapeHTML = NO;
}
IsNotOldAllDay: WOConditional {
condition = previousApt.isAllDay;
negate = YES;
}
NewAptStartDate: WOString {
value = newStartDate;
dateformat = "%d/%m/%y";
escapeHTML = NO;
}
NewAptStartTime: WOString {
value = newStartDate;
dateformat = "%H:%M";
escapeHTML = NO;
}
IsNotNewAllDay: WOConditional {
condition = apt.isAllDay;
negate = YES;
}
Organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
OldAptLocation: WOString {
value = previousApt.location;
escapeHTML = NO;
}
NewAptLocation: WOString {
value = apt.location;
escapeHTML = NO;
}
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
Summary: WOString {
value = summary;
escapeHTML = NO;
}
HasNewLocation: WOConditional {
condition = hasNewLocation;
}
HasOldLocation: WOConditional {
condition = hasOldLocation;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,2 +0,0 @@
<#IsSubject>Händelse inställd: <#summary/></#IsSubject>
<#IsBody><#organizer/> <#HasSentBy>(sent by <#sentBy/>) </#HasSentBy>har ställt in denna händelse: <#summary/>.</#IsBody>
@@ -1,27 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,2 +0,0 @@
<#IsSubject>Händelseinbjudan: <#summary/></#IsSubject>
<#IsBody><#organizer/> <#HasSentBy>(sänt genom <#sentBy/>) </#HasSentBy>har bjudit in dig till <#summary/>.</#IsBody>
@@ -1,27 +0,0 @@
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
summary: WOString {
value = summary;
escapeHTML = NO;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
@@ -1,5 +0,0 @@
<#IsSubject>Mötet "<#Summary />" den <#OldAptStartDate /> kl <#OldAptStartTime /> har ändrats</#IsSubject>
<#IsBody>
Mötet<#HasSentBy> (sänt genom <#sentBy/>)</#HasSentBy>, tidigare bokat den <#OldAptStartDate /><#IsNotOldAllDay> kl <#OldAptStartTime /></#IsNotOldAllDay><#HasOldLocation> (<#OldAptLocation />)</#HasOldLocation> är nu ändrat att hållas <#NewAptStartDate /><#IsNotNewAllDay> kl <#NewAptStartTime /></#IsNotNewAllDay><#HasNewLocation> (<#NewAptLocation />)</#HasNewLocation>.
Var vänlig och svara på denna ändring.
</#IsBody>
@@ -1,79 +0,0 @@
OldAptStartDate: WOString {
value = oldStartDate;
dateformat = "%d/%m/%y";
escapeHTML = NO;
}
OldAptStartTime: WOString {
value = oldStartDate;
dateformat = "%H:%M";
escapeHTML = NO;
}
IsNotOldAllDay: WOConditional {
condition = previousApt.isAllDay;
negate = YES;
}
NewAptStartDate: WOString {
value = newStartDate;
dateformat = "%d/%m/%y";
escapeHTML = NO;
}
NewAptStartTime: WOString {
value = newStartDate;
dateformat = "%H:%M";
escapeHTML = NO;
}
IsNotNewAllDay: WOConditional {
condition = apt.isAllDay;
negate = YES;
}
Organizer: WOString {
value = organizerName;
escapeHTML = NO;
}
OldAptLocation: WOString {
value = previousApt.location;
escapeHTML = NO;
}
NewAptLocation: WOString {
value = apt.location;
escapeHTML = NO;
}
IsSubject: WOConditional {
condition = isSubject;
}
IsBody: WOConditional {
condition = isSubject;
negate = YES;
}
Summary: WOString {
value = summary;
escapeHTML = NO;
}
HasNewLocation: WOConditional {
condition = hasNewLocation;
}
HasOldLocation: WOConditional {
condition = hasOldLocation;
}
HasSentBy: WOConditional {
condition = hasSentBy;
}
sentBy: WOString {
value = sentBy;
escapeHTML = NO;
}
+152 -77
View File
@@ -1,97 +1,172 @@
/*
Copyright (C) 2000-2005 SKYRIX Software AG
Copyright (C) 2010 Inverse
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.
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 SOGo; see the file COPYING. If not, write to the
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
*/
#include "SOGoAptMailNotification.h"
#import <NGObjWeb/WOContext+SoObjects.h>
#import <NGCards/iCalEvent.h>
#import <NGCards/iCalEventChanges.h>
#import <SOGo/NSDictionary+Utilities.h>
#import <SOGo/NSObject+Utilities.h>
#import <SOGo/SOGoDateFormatter.h>
#import <SOGo/SOGoUser.h>
#import "SOGoAptMailNotification.h"
@interface SOGoAptMailUpdate : SOGoAptMailNotification
{
NSMutableDictionary *values;
}
@interface SOGoAptMailEnglishUpdate : SOGoAptMailNotification
@end
@implementation SOGoAptMailEnglishUpdate
@end
@interface SOGoAptMailRussianUpdate : SOGoAptMailNotification
@end
@implementation SOGoAptMailRussianUpdate
@end
@interface SOGoAptMailBrazilianPortugueseUpdate : SOGoAptMailNotification
@end
@implementation SOGoAptMailBrazilianPortugueseUpdate
@end
@interface SOGoAptMailCzechUpdate : SOGoAptMailNotification
@end
@implementation SOGoAptMailCzechUpdate
@end
@interface SOGoAptMailDutchUpdate : SOGoAptMailNotification
@end
@implementation SOGoAptMailDutchUpdate
@end
@interface SOGoAptMailFrenchUpdate : SOGoAptMailNotification
@end
@implementation SOGoAptMailFrenchUpdate
@end
@interface SOGoAptMailGermanUpdate : SOGoAptMailNotification
@end
@implementation SOGoAptMailGermanUpdate
@end
@interface SOGoAptMailHungarianUpdate : SOGoAptMailNotification
@end
@implementation SOGoAptMailHungarianUpdate
@end
@interface SOGoAptMailItalianUpdate : SOGoAptMailNotification
@end
@implementation SOGoAptMailItalianUpdate
@end
@interface SOGoAptMailSpanishUpdate : SOGoAptMailNotification
@end
@implementation SOGoAptMailSpanishUpdate
@end
@interface SOGoAptMailSwedishUpdate : SOGoAptMailNotification
@end
@implementation SOGoAptMailSwedishUpdate
@end
@interface SOGoAptMailWelshUpdate : SOGoAptMailNotification
@end
@implementation SOGoAptMailWelshUpdate
@implementation SOGoAptMailUpdate
- (NSString *) valueForProperty: (NSString *) property
{
static NSDictionary *valueTypes = nil;
SOGoDateFormatter *dateFormatter;
NSString *valueType;
id value;
if (!valueTypes)
{
valueTypes = [NSDictionary dictionaryWithObjectsAndKeys:
@"date", @"startDate",
@"date", @"endDate",
@"date", @"due",
@"text", @"location",
@"text", @"summary",
@"text", @"comment",
nil];
[valueTypes retain];
}
valueType = [valueTypes objectForKey: property];
if (valueType)
{
value = [(iCalEvent *) apt propertyValue: property];
if ([valueType isEqualToString: @"date"])
{
dateFormatter = [[context activeUser]
dateFormatterInContext: context];
value = [dateFormatter formattedDateAndTime: value];
}
}
else
value = nil;
return value;
}
- (void) _setupBodyContent
{
NSArray *updatedProperties;
NSMutableString *bodyContent;
NSString *property, *label, *value;
int count, max;
updatedProperties = [[iCalEventChanges changesFromEvent: previousApt
toEvent: apt]
updatedProperties];
bodyContent = [NSMutableString new];
max = [updatedProperties count];
for (count = 0; count < max; count++)
{
property = [updatedProperties objectAtIndex: count];
value = [self valueForProperty: property];
/* Unhandled properties will return nil */
if (value)
{
label = [self labelForKey: [NSString stringWithFormat: @"%@_label",
property]
inContext: context];
[bodyContent appendFormat: @" %@ %@\n", label, value];
}
}
[values setObject: bodyContent forKey: @"_bodyContent"];
[bodyContent release];
}
- (void) _setupBodyValues
{
NSString *bodyText;
bodyText = [self labelForKey: @"The following parameters have changed"
@" in the \"%{Summary}\" meeting:"
inContext: context];
[values setObject: [values keysWithFormat: bodyText]
forKey: @"_bodyStart"];
[self _setupBodyContent];
[values setObject: [self labelForKey: @"Please accept"
@" or decline those changes."
inContext: context]
forKey: @"_bodyEnd"];
}
- (void) setupValues
{
NSCalendarDate *date;
SOGoDateFormatter *dateFormatter;
[super setupValues];
dateFormatter = [[context activeUser] dateFormatterInContext: context];
date = [self oldStartDate];
[values setObject: [dateFormatter shortFormattedDate: date]
forKey: @"OldStartDate"];
[values setObject: [dateFormatter formattedTime: date]
forKey: @"OldStartTime"];
date = [self newStartDate];
[values setObject: [dateFormatter shortFormattedDate: date]
forKey: @"StartDate"];
[values setObject: [dateFormatter formattedTime: date]
forKey: @"StartTime"];
[self _setupBodyValues];
}
- (NSString *) getSubject
{
NSString *subjectFormat;
if (!values)
[self setupValues];
subjectFormat = [self labelForKey: @"The appointment \"%{Summary}\" for the"
@" %{OldStartDate} at"
@" %{OldStartTime} has changed"
inContext: context];
return [values keysWithFormat: subjectFormat];
}
- (NSString *) getBody
{
if (!values)
[self setupValues];
return [values keysWithFormat:
@"%{_bodyStart}\n%{_bodyContent}\n%{_bodyEnd}\n"];
}
@end
@@ -1 +0,0 @@
<#IsSubject>Digwyddiad wedi'i ganslo: <#summary/></#IsSubject> <#IsBody><#organizer/> <#HasSentBy>(anfonwyd gan <#sentBy/>)</#HasSentBy> wedi canslo'r digwyddiad hwn: <#summary/>.</#IsBody>

Some files were not shown because too many files have changed in this diff Show More