Monotone-Parent: f4861ebaae0a55ed464809d54f5ecd4f0bef9913
Monotone-Revision: d23a6bb43fc70fa7f45420eb293780b9dcfbd02c Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-04-09T18:45:14 Monotone-Branch: ca.inverse.sogomaint-2.0.2
parent
7a072049ab
commit
0fc3588ff3
15
ChangeLog
15
ChangeLog
|
@ -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,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;
|
||||
}
|
|
@ -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>
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 /> è stato modificato </#IsSubject>
|
||||
<#IsBody>
|
||||
Questo appuntamento<#HasSentBy> (sent by <#sentBy/>)</#HasSentBy>, fissato precedentemete in data <#OldAptStartDate /><#HasOldLocation> (<#OldAptLocation />)</#HasOldLocation><#IsNotOldAllDay> alle ore <#OldAptStartTime /></#IsNotOldAllDay> è 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;
|
||||
}
|
|
@ -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
Loading…
Reference in New Issue