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>
|
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
|
* Tests/Integration/utilities.py (TestUtility.fetchUserInfo): same
|
||||||
as below.
|
as below.
|
||||||
|
|
||||||
|
|
|
@ -23,3 +23,40 @@ vtodo_class2 = "(Tarefa Confidencial)";
|
||||||
"Receipt: attendees removed from an event" = "Receipt: attendees removed from an event";
|
"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):";
|
"You have removed the following attendees(s):" = "You have removed the following attendees(s):";
|
||||||
"... from the following event:" = "... from the following event:";
|
"... 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";
|
"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):";
|
"You have removed the following attendees(s):" = "You have removed the following attendees(s):";
|
||||||
"... from the following event:" = "... from the following event:";
|
"... 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";
|
"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):";
|
"You have removed the following attendees(s):" = "You have removed the following attendees(s):";
|
||||||
"... from the following event:" = "... from the following event:";
|
"... 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";
|
"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):";
|
"You have removed the following attendees(s):" = "You have removed the following attendees(s):";
|
||||||
"... from the following event:" = "... from the following event:";
|
"... 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";
|
"Receipt: attendees removed from an event" = "Acc. de réception: invitations annulées";
|
||||||
"You have removed the following attendees(s):" = "Les utilisateurs suivants :";
|
"You have removed the following attendees(s):" = "Les utilisateurs suivants :";
|
||||||
"... from the following event:" = "... ne sont plus invités à cette réunion :";
|
"... 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_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_INCLUDE_DIRS += -I../../SOPE/
|
||||||
ADDITIONAL_LIB_DIRS += -L../../SOPE/GDLContentStore/obj/
|
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";
|
"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):";
|
"You have removed the following attendees(s):" = "You have removed the following attendees(s):";
|
||||||
"... from the following event:" = "... from the following event:";
|
"... 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";
|
"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):";
|
"You have removed the following attendees(s):" = "You have removed the following attendees(s):";
|
||||||
"... from the following event:" = "... from the following event:";
|
"... 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";
|
"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):";
|
"You have removed the following attendees(s):" = "You have removed the following attendees(s):";
|
||||||
"... from the following event:" = "... from the following event:";
|
"... 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";
|
"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):";
|
"You have removed the following attendees(s):" = "You have removed the following attendees(s):";
|
||||||
"... from the following event:" = "... from the following event:";
|
"... 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/WORequest+SOGo.h>
|
||||||
#import <SOGo/NSObject+DAV.h>
|
#import <SOGo/NSObject+DAV.h>
|
||||||
|
#import <SOGo/NSObject+Utilities.h>
|
||||||
#import <SOGo/SOGoParentFolder.h>
|
#import <SOGo/SOGoParentFolder.h>
|
||||||
#import <SOGo/SOGoPermissions.h>
|
#import <SOGo/SOGoPermissions.h>
|
||||||
#import <SOGo/SOGoUser.h>
|
#import <SOGo/SOGoUser.h>
|
||||||
|
@ -74,7 +75,7 @@
|
||||||
|
|
||||||
- (NSString *) defaultFolderName
|
- (NSString *) defaultFolderName
|
||||||
{
|
{
|
||||||
return [self labelForKey: @"Personal Calendar"];
|
return [self labelForKey: @"Personal Calendar" inContext: context];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSArray *) toManyRelationshipKeys
|
- (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
|
the terms of the GNU Lesser General Public License as published by the
|
||||||
Free Software Foundation; either version 2, or (at your option) any
|
Free Software Foundation; either version 2, or (at your option) any
|
||||||
later version.
|
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
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
|
||||||
License for more details.
|
License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
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
|
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
||||||
02111-1307, USA.
|
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
|
@end
|
||||||
|
|
||||||
@implementation SOGoAptMailEnglishDeletion
|
@implementation SOGoAptMailDeletion
|
||||||
@end
|
|
||||||
|
|
||||||
@interface SOGoAptMailBrazilianPortugueseDeletion : SOGoAptMailNotification
|
- (NSString *) getSubject
|
||||||
@end
|
{
|
||||||
|
NSString *subjectFormat;
|
||||||
|
|
||||||
@implementation SOGoAptMailBrazilianPortugueseDeletion
|
if (!values)
|
||||||
@end
|
[self setupValues];
|
||||||
|
|
||||||
@interface SOGoAptMailCzechDeletion : SOGoAptMailNotification
|
subjectFormat = [self labelForKey: @"Event Cancelled: \"%{Summary}\""
|
||||||
@end
|
inContext: context];
|
||||||
|
|
||||||
@implementation SOGoAptMailCzechDeletion
|
return [values keysWithFormat: subjectFormat];
|
||||||
@end
|
}
|
||||||
|
|
||||||
@interface SOGoAptMailDutchDeletion : SOGoAptMailNotification
|
- (NSString *) getBody
|
||||||
@end
|
{
|
||||||
|
NSString *bodyFormat;
|
||||||
|
|
||||||
@implementation SOGoAptMailDutchDeletion
|
if (!values)
|
||||||
@end
|
[self setupValues];
|
||||||
|
|
||||||
@interface SOGoAptMailFrenchDeletion : SOGoAptMailNotification
|
bodyFormat = [self labelForKey: @"%{Organizer} %{SentByText}has"
|
||||||
@end
|
@" cancelled this event: %{Summary}."
|
||||||
|
inContext: context];
|
||||||
|
|
||||||
@implementation SOGoAptMailFrenchDeletion
|
return [values keysWithFormat: bodyFormat];
|
||||||
@end
|
}
|
||||||
|
|
||||||
@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
|
@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
|
#ifndef SOGOAPTMAILICALREPLY_H
|
||||||
#define SOGOAPTMAILICALREPLY_H
|
#define SOGOAPTMAILICALREPLY_H
|
||||||
|
|
||||||
#import <NGObjWeb/SoComponent.h>
|
#import "SOGoAptMailNotification.h"
|
||||||
|
|
||||||
@class NSString;
|
@class NSString;
|
||||||
@class NSCalendarDate;
|
|
||||||
|
|
||||||
@class iCalPerson;
|
@class iCalPerson;
|
||||||
@class iCalEntityObject;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* NOTE: We inherit from SoComponent in order to get the correct
|
* NOTE: We inherit from SoComponent in order to get the correct
|
||||||
* resourceManager required for this product
|
* resourceManager required for this product
|
||||||
*/
|
*/
|
||||||
@interface SOGoAptMailICalReply : SoComponent
|
@interface SOGoAptMailICalReply : SOGoAptMailNotification
|
||||||
{
|
{
|
||||||
iCalEntityObject *apt;
|
|
||||||
iCalPerson *attendee;
|
iCalPerson *attendee;
|
||||||
NSString *homePageURL;
|
|
||||||
BOOL isSubject;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setApt: (iCalEntityObject *) newApt;
|
|
||||||
- (iCalEntityObject *) apt;
|
|
||||||
|
|
||||||
- (void) setAttendee: (iCalPerson *) newAttendee;
|
- (void) setAttendee: (iCalPerson *) newAttendee;
|
||||||
- (iCalPerson *) attendee;
|
- (iCalPerson *) attendee;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* SOGoAptMailICalReply - this file is part of SOGo
|
/* SOGoAptMailICalReply - this file is part of SOGo
|
||||||
*
|
*
|
||||||
* Copyright (C) 2007-2009 Inverse inc.
|
* Copyright (C) 2010 Inverse inc.
|
||||||
*
|
*
|
||||||
* Author: Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
* Author: Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||||
*
|
*
|
||||||
|
@ -20,51 +20,18 @@
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#import <Foundation/NSCharacterSet.h>
|
#import <SOGo/NSDictionary+Utilities.h>
|
||||||
#import <Foundation/NSCalendarDate.h>
|
#import <SOGo/NSObject+Utilities.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 "iCalPerson+SOGo.h"
|
#import "iCalPerson+SOGo.h"
|
||||||
#import "SOGoAptMailICalReply.h"
|
#import "SOGoAptMailICalReply.h"
|
||||||
|
|
||||||
@interface SOGoAptMailICalReply (PrivateAPI)
|
|
||||||
|
|
||||||
- (BOOL) isSubject;
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation SOGoAptMailICalReply
|
@implementation SOGoAptMailICalReply
|
||||||
|
|
||||||
static NSCharacterSet *wsSet = nil;
|
|
||||||
|
|
||||||
+ (void) initialize
|
|
||||||
{
|
|
||||||
static BOOL didInit = NO;
|
|
||||||
|
|
||||||
if (!didInit)
|
|
||||||
{
|
|
||||||
didInit = YES;
|
|
||||||
wsSet = [[NSCharacterSet whitespaceAndNewlineCharacterSet] retain];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id) init
|
- (id) init
|
||||||
{
|
{
|
||||||
if ((self = [super init]))
|
if ((self = [super init]))
|
||||||
{
|
{
|
||||||
apt = nil;
|
|
||||||
attendee = nil;
|
attendee = nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -73,21 +40,10 @@ static NSCharacterSet *wsSet = nil;
|
||||||
|
|
||||||
- (void) dealloc
|
- (void) dealloc
|
||||||
{
|
{
|
||||||
[apt release];
|
|
||||||
[attendee release];
|
[attendee release];
|
||||||
[super dealloc];
|
[super dealloc];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setApt: (iCalEntityObject *) newApt
|
|
||||||
{
|
|
||||||
ASSIGN (apt, newApt);
|
|
||||||
}
|
|
||||||
|
|
||||||
- (iCalEntityObject *) apt
|
|
||||||
{
|
|
||||||
return apt;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void) setAttendee: (iCalPerson *) newAttendee
|
- (void) setAttendee: (iCalPerson *) newAttendee
|
||||||
{
|
{
|
||||||
ASSIGN (attendee, newAttendee);
|
ASSIGN (attendee, newAttendee);
|
||||||
|
@ -110,158 +66,76 @@ static NSCharacterSet *wsSet = nil;
|
||||||
return [attendee rfc822Email];
|
return [attendee rfc822Email];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL) hasSentBy
|
- (void) setupValues
|
||||||
{
|
{
|
||||||
return [attendee hasSentBy];
|
NSDictionary *sentByValues;
|
||||||
}
|
NSString *sentBy, *sentByText;
|
||||||
|
|
||||||
- (NSString *) sentBy
|
[super setupValues];
|
||||||
{
|
|
||||||
return [attendee sentBy];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL) hasAccepted
|
[values setObject: [self attendeeName] forKey: @"Attendee"];
|
||||||
{
|
|
||||||
NSString *partStat;
|
|
||||||
|
|
||||||
partStat = [[attendee partStat] lowercaseString];
|
sentBy = [attendee sentBy];
|
||||||
|
if ([sentBy length])
|
||||||
return [partStat isEqualToString: @"accepted"];
|
{
|
||||||
}
|
sentByValues = [NSDictionary dictionaryWithObject: sentBy
|
||||||
|
forKey: @"SentBy"];
|
||||||
- (BOOL) hasDeclined
|
sentByText
|
||||||
{
|
= [sentByValues keysWithFormat: [self
|
||||||
NSString *partStat;
|
labelForKey: @"(sent by %{SentBy})"
|
||||||
|
inContext: context]];
|
||||||
partStat = [[attendee partStat] lowercaseString];
|
}
|
||||||
|
else
|
||||||
return [partStat isEqualToString: @"declined"];
|
sentByText = @"";
|
||||||
}
|
[values setObject: sentByText forKey: @"SentByText"];
|
||||||
|
|
||||||
- (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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Generate Response */
|
/* Generate Response */
|
||||||
|
|
||||||
- (NSString *) getSubject
|
- (NSString *) getSubject
|
||||||
{
|
{
|
||||||
NSString *subject;
|
NSString *subjectFormat;
|
||||||
|
|
||||||
isSubject = YES;
|
if (!values)
|
||||||
subject = [[[self generateResponse] contentAsString]
|
[self setupValues];
|
||||||
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"];
|
subjectFormat = [self labelForKey: @"Reply to invitation: \"%{Summary}\""
|
||||||
|
inContext: context];
|
||||||
|
|
||||||
|
return [values keysWithFormat: subjectFormat];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSString *) getBody
|
- (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
|
@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
|
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
|
the terms of the GNU Lesser General Public License as published by the
|
||||||
Free Software Foundation; either version 2, or (at your option) any
|
Free Software Foundation; either version 2, or (at your option) any
|
||||||
later version.
|
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
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
|
||||||
License for more details.
|
License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
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
|
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
||||||
02111-1307, USA.
|
02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#import <NGCards/iCalEvent.h>
|
||||||
|
|
||||||
|
#import <SOGo/NSDictionary+Utilities.h>
|
||||||
|
#import <SOGo/NSObject+Utilities.h>
|
||||||
|
|
||||||
|
#import "iCalPerson+SOGo.h"
|
||||||
|
|
||||||
#import "SOGoAptMailNotification.h"
|
#import "SOGoAptMailNotification.h"
|
||||||
|
|
||||||
@interface SOGoAptMailEnglishInvitation : SOGoAptMailNotification
|
@interface SOGoAptMailInvitation : SOGoAptMailNotification
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation SOGoAptMailEnglishInvitation
|
@implementation SOGoAptMailInvitation
|
||||||
@end
|
|
||||||
|
|
||||||
@interface SOGoAptMailBrazilianPortugueseInvitation : SOGoAptMailNotification
|
- (NSString *) getSubject
|
||||||
@end
|
{
|
||||||
|
NSString *subjectFormat;
|
||||||
|
|
||||||
@implementation SOGoAptMailBrazilianPortugueseInvitation
|
if (!values)
|
||||||
@end
|
[self setupValues];
|
||||||
|
|
||||||
@interface SOGoAptMailCzechInvitation : SOGoAptMailNotification
|
subjectFormat = [self labelForKey: @"Event Invitation: \"%{Summary}\""
|
||||||
@end
|
inContext: context];
|
||||||
|
|
||||||
@implementation SOGoAptMailCzechInvitation
|
return [values keysWithFormat: subjectFormat];
|
||||||
@end
|
}
|
||||||
|
|
||||||
@interface SOGoAptMailDutchInvitation : SOGoAptMailNotification
|
- (NSString *) getBody
|
||||||
@end
|
{
|
||||||
|
NSString *bodyFormat;
|
||||||
|
|
||||||
@implementation SOGoAptMailDutchInvitation
|
if (!values)
|
||||||
@end
|
[self setupValues];
|
||||||
|
|
||||||
@interface SOGoAptMailFrenchInvitation : SOGoAptMailNotification
|
bodyFormat = [self labelForKey: @"%{Organizer} %{SentByText}has invited you to %{Summary}."
|
||||||
@end
|
inContext: context];
|
||||||
|
|
||||||
@implementation SOGoAptMailFrenchInvitation
|
return [values keysWithFormat: bodyFormat];
|
||||||
@end
|
}
|
||||||
|
|
||||||
@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
|
@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>
|
#include <NGObjWeb/SoComponent.h>
|
||||||
|
|
||||||
@class NSString, NSTimeZone, NSCalendarDate;
|
@class NSCalendarDate;
|
||||||
@class iCalEntityObject;
|
@class NSMutableDictionary;
|
||||||
|
@class NSString;
|
||||||
|
@class NSTimeZone;
|
||||||
|
@class iCalEvent;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* NOTE: We inherit from SoComponent in order to get the correct
|
* NOTE: We inherit from SoComponent in order to get the correct
|
||||||
|
@ -34,27 +37,30 @@
|
||||||
*/
|
*/
|
||||||
@interface SOGoAptMailNotification : SoComponent
|
@interface SOGoAptMailNotification : SoComponent
|
||||||
{
|
{
|
||||||
iCalEntityObject *apt;
|
iCalEvent *apt;
|
||||||
iCalEntityObject *previousApt;
|
iCalEvent *previousApt;
|
||||||
NSString *homePageURL;
|
NSString *homePageURL;
|
||||||
NSTimeZone *viewTZ;
|
NSTimeZone *viewTZ;
|
||||||
NSCalendarDate *oldStartDate;
|
NSCalendarDate *oldStartDate;
|
||||||
NSCalendarDate *newStartDate;
|
NSCalendarDate *newStartDate;
|
||||||
BOOL isSubject;
|
BOOL isSubject;
|
||||||
NSString *organizerName;
|
NSString *organizerName;
|
||||||
|
NSMutableDictionary *values;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (iCalEntityObject *) apt;
|
- (void) setupValues;
|
||||||
- (void) setApt: (iCalEntityObject *) theApt;
|
|
||||||
|
|
||||||
- (iCalEntityObject *) previousApt;
|
- (iCalEvent *) apt;
|
||||||
- (void) setPreviousApt: (iCalEntityObject *) theApt;
|
- (void) setApt: (iCalEvent *) theApt;
|
||||||
|
|
||||||
|
- (iCalEvent *) previousApt;
|
||||||
|
- (void) setPreviousApt: (iCalEvent *) theApt;
|
||||||
|
|
||||||
- (void) setOrganizerName: (NSString *) theString;
|
- (void) setOrganizerName: (NSString *) theString;
|
||||||
- (NSString *) organizerName;
|
- (NSString *) organizerName;
|
||||||
|
|
||||||
- (BOOL) hasSentBy;
|
- (NSCalendarDate *) oldStartDate;
|
||||||
- (NSString *) sentBy;
|
- (NSCalendarDate *) newStartDate;
|
||||||
|
|
||||||
- (NSString *) getSubject;
|
- (NSString *) getSubject;
|
||||||
- (NSString *) getBody;
|
- (NSString *) getBody;
|
||||||
|
|
|
@ -27,33 +27,24 @@
|
||||||
#import <NGObjWeb/WOActionResults.h>
|
#import <NGObjWeb/WOActionResults.h>
|
||||||
#import <NGObjWeb/WOResponse.h>
|
#import <NGObjWeb/WOResponse.h>
|
||||||
#import <NGExtensions/NSObject+Logs.h>
|
#import <NGExtensions/NSObject+Logs.h>
|
||||||
#import <NGCards/iCalEntityObject.h>
|
#import <NGCards/iCalEvent.h>
|
||||||
#import <NGCards/iCalPerson.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 "iCalPerson+SOGo.h"
|
||||||
#import "SOGoAptMailNotification.h"
|
#import "SOGoAptMailNotification.h"
|
||||||
|
|
||||||
@interface SOGoAptMailNotification (PrivateAPI)
|
|
||||||
|
|
||||||
- (BOOL) isSubject;
|
|
||||||
- (void) setIsSubject: (BOOL) newIsSubject;
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation SOGoAptMailNotification
|
@implementation SOGoAptMailNotification
|
||||||
|
|
||||||
static NSCharacterSet *wsSet = nil;
|
|
||||||
static NSTimeZone *UTC = nil;
|
static NSTimeZone *UTC = nil;
|
||||||
|
|
||||||
+ (void) initialize
|
+ (void) initialize
|
||||||
{
|
{
|
||||||
if (!wsSet)
|
if (!UTC)
|
||||||
{
|
UTC = [[NSTimeZone timeZoneWithAbbreviation: @"UTC"] retain];
|
||||||
wsSet = [[NSCharacterSet whitespaceAndNewlineCharacterSet] retain];
|
|
||||||
UTC = [[NSTimeZone timeZoneWithAbbreviation: @"UTC"] retain];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id) init
|
- (id) init
|
||||||
|
@ -61,6 +52,7 @@ static NSTimeZone *UTC = nil;
|
||||||
if ((self = [super init]))
|
if ((self = [super init]))
|
||||||
{
|
{
|
||||||
apt = nil;
|
apt = nil;
|
||||||
|
values = nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
|
@ -68,6 +60,7 @@ static NSTimeZone *UTC = nil;
|
||||||
|
|
||||||
- (void) dealloc
|
- (void) dealloc
|
||||||
{
|
{
|
||||||
|
[values release];
|
||||||
[apt release];
|
[apt release];
|
||||||
[previousApt release];
|
[previousApt release];
|
||||||
[organizerName release];
|
[organizerName release];
|
||||||
|
@ -77,24 +70,24 @@ static NSTimeZone *UTC = nil;
|
||||||
[super dealloc];
|
[super dealloc];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (iCalEntityObject *) apt
|
- (iCalEvent *) apt
|
||||||
{
|
{
|
||||||
return apt;
|
return apt;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setApt: (iCalEntityObject *) theApt
|
- (void) setApt: (iCalEvent *) theApt
|
||||||
{
|
{
|
||||||
ASSIGN(apt, theApt);
|
ASSIGN (apt, theApt);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (iCalEntityObject *) previousApt
|
- (iCalEvent *) previousApt
|
||||||
{
|
{
|
||||||
return previousApt;
|
return previousApt;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setPreviousApt: (iCalEntityObject *) theApt
|
- (void) setPreviousApt: (iCalEvent *) theApt
|
||||||
{
|
{
|
||||||
ASSIGN(previousApt, theApt);
|
ASSIGN (previousApt, theApt);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL) hasNewLocation
|
- (BOOL) hasNewLocation
|
||||||
|
@ -109,42 +102,32 @@ static NSTimeZone *UTC = nil;
|
||||||
|
|
||||||
- (NSTimeZone *) viewTZ
|
- (NSTimeZone *) viewTZ
|
||||||
{
|
{
|
||||||
if (self->viewTZ) return self->viewTZ;
|
if (viewTZ) return viewTZ;
|
||||||
return UTC;
|
return UTC;
|
||||||
}
|
}
|
||||||
- (void) setViewTZ: (NSTimeZone *) _viewTZ
|
- (void) setViewTZ: (NSTimeZone *) _viewTZ
|
||||||
{
|
{
|
||||||
ASSIGN(self->viewTZ, _viewTZ);
|
ASSIGN (viewTZ, _viewTZ);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSCalendarDate *) oldStartDate
|
- (NSCalendarDate *) oldStartDate
|
||||||
{
|
{
|
||||||
if (!self->oldStartDate)
|
if (!oldStartDate)
|
||||||
{
|
{
|
||||||
ASSIGN(self->oldStartDate, [[self previousApt] startDate]);
|
ASSIGN (oldStartDate, [[self previousApt] startDate]);
|
||||||
[self->oldStartDate setTimeZone: [self viewTZ]];
|
[oldStartDate setTimeZone: [self viewTZ]];
|
||||||
}
|
}
|
||||||
return self->oldStartDate;
|
return oldStartDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSCalendarDate *) newStartDate
|
- (NSCalendarDate *) newStartDate
|
||||||
{
|
{
|
||||||
if (!self->newStartDate)
|
if (!newStartDate)
|
||||||
{
|
{
|
||||||
ASSIGN(self->newStartDate, [[self apt] startDate]);
|
ASSIGN (newStartDate, [[self apt] startDate]);
|
||||||
[self->newStartDate setTimeZone:[self viewTZ]];
|
[newStartDate setTimeZone:[self viewTZ]];
|
||||||
}
|
}
|
||||||
return self->newStartDate;
|
return newStartDate;
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL) isSubject
|
|
||||||
{
|
|
||||||
return isSubject;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void) setIsSubject: (BOOL) newIsSubject
|
|
||||||
{
|
|
||||||
isSubject = newIsSubject;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSString *) summary
|
- (NSString *) summary
|
||||||
|
@ -154,7 +137,7 @@ static NSTimeZone *UTC = nil;
|
||||||
|
|
||||||
- (void) setOrganizerName: (NSString *) theString
|
- (void) setOrganizerName: (NSString *) theString
|
||||||
{
|
{
|
||||||
ASSIGN(organizerName, theString);
|
ASSIGN (organizerName, theString);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSString *) organizerName
|
- (NSString *) organizerName
|
||||||
|
@ -162,47 +145,49 @@ static NSTimeZone *UTC = nil;
|
||||||
return organizerName;
|
return organizerName;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL) hasSentBy
|
|
||||||
{
|
|
||||||
return [[apt organizer] hasSentBy];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSString *) sentBy
|
|
||||||
{
|
|
||||||
return [[apt organizer] sentBy];
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Helpers */
|
/* Helpers */
|
||||||
|
|
||||||
/* Generate Response */
|
/* Generate Response */
|
||||||
|
|
||||||
- (NSString *) getSubject
|
- (NSString *) getSubject
|
||||||
{
|
{
|
||||||
NSString *subject;
|
[self subclassResponsibility: _cmd];
|
||||||
|
|
||||||
[self setIsSubject: YES];
|
return nil;
|
||||||
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"];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSString *) getBody
|
- (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
|
@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
|
the terms of the GNU Lesser General Public License as published by the
|
||||||
Free Software Foundation; either version 2, or (at your option) any
|
Free Software Foundation; either version 2, or (at your option) any
|
||||||
later version.
|
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
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
|
||||||
License for more details.
|
License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
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
|
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
||||||
02111-1307, USA.
|
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
|
@end
|
||||||
|
|
||||||
@implementation SOGoAptMailEnglishUpdate
|
@implementation SOGoAptMailUpdate
|
||||||
@end
|
|
||||||
|
- (NSString *) valueForProperty: (NSString *) property
|
||||||
@interface SOGoAptMailRussianUpdate : SOGoAptMailNotification
|
{
|
||||||
@end
|
static NSDictionary *valueTypes = nil;
|
||||||
|
SOGoDateFormatter *dateFormatter;
|
||||||
@implementation SOGoAptMailRussianUpdate
|
NSString *valueType;
|
||||||
@end
|
id value;
|
||||||
|
|
||||||
@interface SOGoAptMailBrazilianPortugueseUpdate : SOGoAptMailNotification
|
if (!valueTypes)
|
||||||
@end
|
{
|
||||||
|
valueTypes = [NSDictionary dictionaryWithObjectsAndKeys:
|
||||||
@implementation SOGoAptMailBrazilianPortugueseUpdate
|
@"date", @"startDate",
|
||||||
@end
|
@"date", @"endDate",
|
||||||
|
@"date", @"due",
|
||||||
@interface SOGoAptMailCzechUpdate : SOGoAptMailNotification
|
@"text", @"location",
|
||||||
@end
|
@"text", @"summary",
|
||||||
|
@"text", @"comment",
|
||||||
@implementation SOGoAptMailCzechUpdate
|
nil];
|
||||||
@end
|
[valueTypes retain];
|
||||||
|
}
|
||||||
@interface SOGoAptMailDutchUpdate : SOGoAptMailNotification
|
|
||||||
@end
|
valueType = [valueTypes objectForKey: property];
|
||||||
|
if (valueType)
|
||||||
@implementation SOGoAptMailDutchUpdate
|
{
|
||||||
@end
|
value = [(iCalEvent *) apt propertyValue: property];
|
||||||
|
if ([valueType isEqualToString: @"date"])
|
||||||
@interface SOGoAptMailFrenchUpdate : SOGoAptMailNotification
|
{
|
||||||
@end
|
dateFormatter = [[context activeUser]
|
||||||
|
dateFormatterInContext: context];
|
||||||
@implementation SOGoAptMailFrenchUpdate
|
value = [dateFormatter formattedDateAndTime: value];
|
||||||
@end
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
@interface SOGoAptMailGermanUpdate : SOGoAptMailNotification
|
value = nil;
|
||||||
@end
|
|
||||||
|
return value;
|
||||||
@implementation SOGoAptMailGermanUpdate
|
}
|
||||||
@end
|
|
||||||
|
- (void) _setupBodyContent
|
||||||
|
{
|
||||||
@interface SOGoAptMailHungarianUpdate : SOGoAptMailNotification
|
NSArray *updatedProperties;
|
||||||
@end
|
NSMutableString *bodyContent;
|
||||||
|
NSString *property, *label, *value;
|
||||||
@implementation SOGoAptMailHungarianUpdate
|
int count, max;
|
||||||
@end
|
|
||||||
|
updatedProperties = [[iCalEventChanges changesFromEvent: previousApt
|
||||||
|
toEvent: apt]
|
||||||
@interface SOGoAptMailItalianUpdate : SOGoAptMailNotification
|
updatedProperties];
|
||||||
@end
|
bodyContent = [NSMutableString new];
|
||||||
|
max = [updatedProperties count];
|
||||||
@implementation SOGoAptMailItalianUpdate
|
for (count = 0; count < max; count++)
|
||||||
@end
|
{
|
||||||
|
property = [updatedProperties objectAtIndex: count];
|
||||||
@interface SOGoAptMailSpanishUpdate : SOGoAptMailNotification
|
value = [self valueForProperty: property];
|
||||||
@end
|
/* Unhandled properties will return nil */
|
||||||
|
if (value)
|
||||||
@implementation SOGoAptMailSpanishUpdate
|
{
|
||||||
@end
|
label = [self labelForKey: [NSString stringWithFormat: @"%@_label",
|
||||||
|
property]
|
||||||
@interface SOGoAptMailSwedishUpdate : SOGoAptMailNotification
|
inContext: context];
|
||||||
@end
|
[bodyContent appendFormat: @" %@ %@\n", label, value];
|
||||||
|
}
|
||||||
@implementation SOGoAptMailSwedishUpdate
|
}
|
||||||
@end
|
[values setObject: bodyContent forKey: @"_bodyContent"];
|
||||||
|
[bodyContent release];
|
||||||
@interface SOGoAptMailWelshUpdate : SOGoAptMailNotification
|
}
|
||||||
@end
|
|
||||||
|
- (void) _setupBodyValues
|
||||||
@implementation SOGoAptMailWelshUpdate
|
{
|
||||||
|
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
|
@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