mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-10-18 09:48:12 +00:00
Monotone-Parent: 1ccd34fd9ea99e675935d745db7e70d19716428a
Monotone-Revision: c40151185171e3ba8a257569b8ab5ec86930d393 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-05-05T14:40:53 Monotone-Branch: ca.inverse.sogo
This commit is contained in:
1 parent
f7799b9cf8
commit
2bf4b7cf8b
42 files changed
+625
-279
No files matched your search
@@ -460,8 +460,9 @@ validate_endbeforestart = "A data que você informou ocorre antes da data ini
|
||||
= "Você tem certeza que quer apagar o calendário \"%{0}\"?";
|
||||
|
||||
/* Legend */
|
||||
"Required participant" = "Participante Requerido";
|
||||
"Optional participant" = "Participante Opcional";
|
||||
"Participant" = "Participante";
|
||||
"Optional Participant" = "Participante Opcional";
|
||||
"Non Participant" = "Não Participante";
|
||||
"Chair" = "Cadeira";
|
||||
|
||||
"Needs action" = "Ações necessárias";
|
||||
|
||||
@@ -460,8 +460,9 @@ validate_endbeforestart = "Zadané datum konce je před začátkem události.
|
||||
= "Opravdu chcete smazat kalendář \"%{0}\"?";
|
||||
|
||||
/* Legend */
|
||||
"Required participant" = "Vyžadovaný účastník";
|
||||
"Optional participant" = "Nepovinný účastník";
|
||||
"Participant" = "Účastník";
|
||||
"Optional Participant" = "Nepovinný účastník";
|
||||
"Non Participant" = "Non Participant";
|
||||
"Chair" = "Židle";
|
||||
|
||||
"Needs action" = "Vyžaduje akci";
|
||||
|
||||
@@ -460,8 +460,9 @@ validate_endbeforestart = "Het begin vindt plaats vóór het einde.";
|
||||
= "Weet u zeker dat u de agenda \"%{0}\" wilt verwijderen?";
|
||||
|
||||
/* Legend */
|
||||
"Required participant" = "Vereiste deelnemer";
|
||||
"Optional participant" = "Gewenste deelnemer";
|
||||
"Participant" = "Deelnemer";
|
||||
"Optional Participant" = "Gewenste deelnemer";
|
||||
"Non Participant" = "Non Participant";
|
||||
"Chair" = "Voorzitter";
|
||||
|
||||
"Needs action" = "Actie vereist";
|
||||
|
||||
@@ -246,10 +246,10 @@
|
||||
|
||||
/* Appointments (participation state) */
|
||||
|
||||
"partStat_NEEDS-ACTION" = "Needs action";
|
||||
"partStat_NEEDS-ACTION" = "I will confirm later";
|
||||
"partStat_ACCEPTED" = "I will attend";
|
||||
"partStat_DECLINED" = "I will not attend";
|
||||
"partStat_TENTATIVE" = "I will confirm later";
|
||||
"partStat_TENTATIVE" = "I might attend";
|
||||
"partStat_DELEGATED" = "I delegate";
|
||||
"partStat_OTHER" = "Other";
|
||||
|
||||
@@ -460,8 +460,9 @@ validate_endbeforestart = "The end date that you entered occurs before the st
|
||||
= "Are you sure you want to delete the calendar \"%{0}\"?";
|
||||
|
||||
/* Legend */
|
||||
"Required participant" = "Required participant";
|
||||
"Optional participant" = "Optional participant";
|
||||
"Participant" = "Participant";
|
||||
"Optional Participant" = "Optional Participant";
|
||||
"Non Participant" = "Non Participant";
|
||||
"Chair" = "Chair";
|
||||
|
||||
"Needs action" = "Needs action";
|
||||
|
||||
@@ -246,10 +246,10 @@
|
||||
|
||||
/* Appointments (participation state) */
|
||||
|
||||
"partStat_NEEDS-ACTION" = "Décision attendue";
|
||||
"partStat_NEEDS-ACTION" = "Je confirmerai plus tard";
|
||||
"partStat_ACCEPTED" = "Je participerai";
|
||||
"partStat_DECLINED" = "Je ne participerai pas";
|
||||
"partStat_TENTATIVE" = "Je confirmerai plus tard";
|
||||
"partStat_TENTATIVE" = "Je participerai peut-être";
|
||||
"partStat_DELEGATED" = "Je délègue";
|
||||
"partStat_OTHER" = "???";
|
||||
|
||||
@@ -460,9 +460,10 @@ validate_endbeforestart = "La date de fin est avant la date de début.";
|
||||
= "Voulez-vous vraiment supprimer l'agenda «%{0}»?";
|
||||
|
||||
/* Legend */
|
||||
"Required participant" = "Participant obligatoire";
|
||||
"Optional participant" = "Participant facultatif";
|
||||
"Chair" = "Chaise";
|
||||
"Participant" = "Invité";
|
||||
"Optional Participant" = "Invité optionnel";
|
||||
"Non Participant" = "Non-invité";
|
||||
"Chair" = "Président";
|
||||
|
||||
"Needs action" = "En attente";
|
||||
"Accepted" = "Accepté";
|
||||
|
||||
@@ -460,8 +460,9 @@ validate_endbeforestart = "Ihr Beginn ist nach dem Ende";
|
||||
= "Wollen Sie diesen Kalender wirklich löschen \"%{0}\"?";
|
||||
|
||||
/* Legend */
|
||||
"Required participant" = "notwendiger Teilnehmer";
|
||||
"Optional participant" = "optionaler Teilnehmer";
|
||||
"Participant" = "Teilnehmer";
|
||||
"Optional Participant" = "optionaler Teilnehmer";
|
||||
"Non Participant" = "Non Participant";
|
||||
"Chair" = "Vorsitz";
|
||||
|
||||
"Needs action" = "Benötigt Eingriff";
|
||||
|
||||
@@ -460,8 +460,9 @@ validate_endbeforestart = "A megadott befejező dátum korábbi, mint a kezd
|
||||
= "Biztosan törli ezt a naptárat: \"%{0}\"?";
|
||||
|
||||
/* Legend */
|
||||
"Required participant" = "Kötelező résztvevő";
|
||||
"Optional participant" = "Nem kötelező résztvevő";
|
||||
"Participant" = "Kötelező résztvevő";
|
||||
"Optional Participant" = "Nem kötelező résztvevő";
|
||||
"Non Participant" = "Non Participant";
|
||||
"Chair" = "Szék";
|
||||
|
||||
"Needs action" = "Foglalkozni kell vele";
|
||||
|
||||
@@ -460,8 +460,9 @@ validate_endbeforestart = "La data finale specificata è precedente alla data
|
||||
= "Sei sicuro di voler cancellare il calendario \"%{0}\"?";
|
||||
|
||||
/* Legend */
|
||||
"Required participant" = "Richiede partecipanti";
|
||||
"Optional participant" = "Partecipanti opzionali";
|
||||
"Participant" = "Partecipanti";
|
||||
"Optional Participant" = "Partecipanti opzionali";
|
||||
"Non Participant" = "Non Partecipanti";
|
||||
"Chair" = "Sedia";
|
||||
|
||||
"Needs action" = "Richiede un'azione";
|
||||
|
||||
@@ -460,8 +460,9 @@ validate_endbeforestart = "The end date that you entered occurs before the st
|
||||
= "Вы уверены что хотите удалить календарь \"%{0}\"?";
|
||||
|
||||
/* Legend */
|
||||
"Required participant" = "Required participant";
|
||||
"Optional participant" = "Optional participant";
|
||||
"Participant" = "Participant";
|
||||
"Optional Participant" = "Optional Participant";
|
||||
"Non Participant" = "Non Participant";
|
||||
"Chair" = "Chair";
|
||||
|
||||
"Needs action" = "Needs action";
|
||||
|
||||
@@ -460,8 +460,9 @@ validate_endbeforestart = "Su fecha/hora de comienzo es posterio a la de fina
|
||||
= "¿Está seguro/a que desea borrar el calendario \"%{0}\"?";
|
||||
|
||||
/* Legend */
|
||||
"Required participant" = "Asistente obligatorio";
|
||||
"Optional participant" = "Asistentes opcionales";
|
||||
"Participant" = "Asistente";
|
||||
"Optional Participant" = "Asistentes opcionales";
|
||||
"Non Participant" = "Non Particpant";
|
||||
"Chair" = "Presidente";
|
||||
|
||||
"Needs action" = "Requiere intervención";
|
||||
|
||||
@@ -460,8 +460,9 @@ validate_endbeforestart = "Angivet slutdatumet inträffar före angivet start
|
||||
= "Är du säker på att du vill ta bort kalendern \"%{0}\"?";
|
||||
|
||||
/* Legend */
|
||||
"Required participant" = "Deltagande krävs";
|
||||
"Optional participant" = "Deltagande valfritt";
|
||||
"Participant" = "Deltagande krävs";
|
||||
"Optional Participant" = "Deltagande valfritt";
|
||||
"Non Participant" = "Non Participant";
|
||||
"Chair" = "Stol";
|
||||
|
||||
"Needs action" = "Behöver åtgärd";
|
||||
|
||||
@@ -522,22 +522,32 @@
|
||||
[event setTransparency: (isTransparent? @"TRANSPARENT" : @"OPAQUE")];
|
||||
}
|
||||
|
||||
// TODO: add tentatively
|
||||
- (id) _statusChangeAction: (NSString *) newStatus
|
||||
{
|
||||
[[self clientObject] changeParticipationStatus: newStatus
|
||||
withDelegate: nil];
|
||||
|
||||
return [self responseWith204];
|
||||
}
|
||||
|
||||
- (id) acceptAction
|
||||
{
|
||||
[[self clientObject] changeParticipationStatus: @"ACCEPTED"
|
||||
withDelegate: nil];
|
||||
|
||||
return self;
|
||||
return [self _statusChangeAction: @"ACCEPTED"];
|
||||
}
|
||||
|
||||
- (id) declineAction
|
||||
{
|
||||
[[self clientObject] changeParticipationStatus: @"DECLINED"
|
||||
withDelegate: nil];
|
||||
return [self _statusChangeAction: @"DECLINED"];
|
||||
}
|
||||
|
||||
return self;
|
||||
- (id) needsActionAction
|
||||
{
|
||||
return [self _statusChangeAction: @"NEEDS-ACTION"];
|
||||
}
|
||||
|
||||
- (id) tentativeAction
|
||||
{
|
||||
return [self _statusChangeAction: @"TENTATIVE"];
|
||||
}
|
||||
|
||||
- (id) delegateAction
|
||||
@@ -584,7 +594,7 @@
|
||||
reason: @"missing 'to' parameter"];
|
||||
|
||||
if (!response)
|
||||
response = [self responseWithStatus: 200];
|
||||
response = [self responseWith204];
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
@@ -54,7 +54,6 @@
|
||||
#import <Appointments/SOGoAppointmentObject.h>
|
||||
#import <Appointments/SOGoAppointmentOccurence.h>
|
||||
#import <Appointments/SOGoTaskObject.h>
|
||||
#import <SOGo/iCalEntityObject+Utilities.h>
|
||||
#import <SOGo/NSArray+Utilities.h>
|
||||
#import <SOGo/NSDictionary+BSJSONAdditions.h>
|
||||
#import <SOGo/NSDictionary+Utilities.h>
|
||||
@@ -268,6 +267,8 @@ iRANGE(2);
|
||||
|
||||
[currentAttendeeData setObject: [[currentAttendee partStat] lowercaseString]
|
||||
forKey: @"partstat"];
|
||||
[currentAttendeeData setObject: [[currentAttendee role] lowercaseString]
|
||||
forKey: @"role"];
|
||||
|
||||
if ([[currentAttendee delegatedTo] length])
|
||||
[currentAttendeeData setObject: [[currentAttendee delegatedTo] rfc822Email]
|
||||
@@ -587,7 +588,7 @@ iRANGE(2);
|
||||
um = [SOGoUserManager sharedUserManager];
|
||||
owner = [componentCalendar ownerInContext: context];
|
||||
ownerEmail = [um getEmailForUID: owner];
|
||||
ASSIGN (ownerAsAttendee, [component findParticipantWithEmail: (id)ownerEmail]);
|
||||
ASSIGN (ownerAsAttendee, [component findAttendeeWithEmail: (id)ownerEmail]);
|
||||
}
|
||||
}
|
||||
// /* cycles */
|
||||
@@ -990,14 +991,26 @@ iRANGE(2);
|
||||
{
|
||||
NSString *word;
|
||||
|
||||
if ([item intValue] == iCalPersonPartStatAccepted)
|
||||
word = @"ACCEPTED";
|
||||
else if ([item intValue] == iCalPersonPartStatDeclined)
|
||||
word = @"DECLINED";
|
||||
else if ([item intValue] == iCalPersonPartStatDelegated)
|
||||
word = @"DELEGATED";
|
||||
else
|
||||
word = @"UNKNOWN";
|
||||
switch ([item intValue])
|
||||
{
|
||||
case iCalPersonPartStatAccepted:
|
||||
word = @"ACCEPTED";
|
||||
break;
|
||||
case iCalPersonPartStatDeclined:
|
||||
word = @"DECLINED";
|
||||
break;
|
||||
case iCalPersonPartStatNeedsAction:
|
||||
word = @"NEEDS-ACTION";
|
||||
break;
|
||||
case iCalPersonPartStatTentative:
|
||||
word = @"TENTATIVE";
|
||||
break;
|
||||
case iCalPersonPartStatDelegated:
|
||||
word = @"DELEGATED";
|
||||
break;
|
||||
default:
|
||||
word = @"UNKNOWN";
|
||||
}
|
||||
|
||||
return [self labelForKey: [NSString stringWithFormat: @"partStat_%@", word]];
|
||||
}
|
||||
@@ -1005,8 +1018,10 @@ iRANGE(2);
|
||||
- (NSArray *) replyList
|
||||
{
|
||||
return [NSArray arrayWithObjects:
|
||||
[NSNumber numberWithInt: iCalPersonPartStatAccepted],
|
||||
[NSNumber numberWithInt: iCalPersonPartStatAccepted],
|
||||
[NSNumber numberWithInt: iCalPersonPartStatDeclined],
|
||||
[NSNumber numberWithInt: iCalPersonPartStatNeedsAction],
|
||||
[NSNumber numberWithInt: iCalPersonPartStatTentative],
|
||||
[NSNumber numberWithInt: iCalPersonPartStatDelegated],
|
||||
nil];
|
||||
}
|
||||
@@ -1508,7 +1523,7 @@ RANGE(2);
|
||||
unsigned int count, max;
|
||||
NSString *currentEmail;
|
||||
iCalPerson *currentAttendee;
|
||||
NSString *json;
|
||||
NSString *json, *role, *partstat;
|
||||
NSDictionary *attendeesData;
|
||||
NSArray *attendees;
|
||||
NSDictionary *currentData;
|
||||
@@ -1529,17 +1544,33 @@ RANGE(2);
|
||||
{
|
||||
currentData = [attendees objectAtIndex: count];
|
||||
currentEmail = [currentData objectForKey: @"email"];
|
||||
currentAttendee = [component findParticipantWithEmail: currentEmail];
|
||||
role = [[currentData objectForKey: @"role"] uppercaseString];
|
||||
if (!role)
|
||||
role = @"REQ-PARTICIPANT";
|
||||
if ([role isEqualToString: @"NON-PARTICIPANT"])
|
||||
partstat = @"";
|
||||
else
|
||||
{
|
||||
partstat = [[currentData objectForKey: @"partstat"]
|
||||
uppercaseString];
|
||||
if (!partstat)
|
||||
partstat = @"NEEDS-ACTION";
|
||||
}
|
||||
currentAttendee = [component findAttendeeWithEmail: currentEmail];
|
||||
if (!currentAttendee)
|
||||
{
|
||||
currentAttendee = [iCalPerson elementWithTag: @"attendee"];
|
||||
[currentAttendee setCn: [currentData objectForKey: @"name"]];
|
||||
[currentAttendee setEmail: currentEmail];
|
||||
[currentAttendee setRole: @"REQ-PARTICIPANT"];
|
||||
[currentAttendee setRsvp: @"TRUE"];
|
||||
[currentAttendee
|
||||
setParticipationStatus: iCalPersonPartStatNeedsAction];
|
||||
// [currentAttendee
|
||||
// setParticipationStatus: iCalPersonPartStatNeedsAction];
|
||||
}
|
||||
[currentAttendee
|
||||
setRsvp: ([role isEqualToString: @"NON-PARTICIPANT"]
|
||||
? @"FALSE"
|
||||
: @"TRUE")];
|
||||
[currentAttendee setRole: role];
|
||||
[currentAttendee setPartStat: partstat];
|
||||
[newAttendees addObject: currentAttendee];
|
||||
}
|
||||
[component setAttendees: newAttendees];
|
||||
@@ -1965,8 +1996,7 @@ RANGE(2);
|
||||
isOrganizer = ![ownerUser hasEmail: [[component organizer] sentBy]];
|
||||
|
||||
if ([componentCalendar isKindOfClass: [SOGoWebAppointmentFolder class]]
|
||||
|| ([[component attendees] count]
|
||||
&& [component userIsParticipant: ownerUser]
|
||||
|| ([component userIsAttendee: ownerUser]
|
||||
&& !isOrganizer
|
||||
// Lightning does not manage participation status within tasks,
|
||||
// so we also ignore the participation status of tasks in the
|
||||
@@ -1991,14 +2021,12 @@ RANGE(2);
|
||||
{
|
||||
SoSecurityManager *sm;
|
||||
NSString *toolbarFilename, *adminToolbar;
|
||||
SOGoUser *currentUser;
|
||||
|
||||
if ([clientObject isKindOfClass: [SOGoAppointmentObject class]])
|
||||
adminToolbar = @"SOGoAppointmentObject.toolbar";
|
||||
else
|
||||
adminToolbar = @"SOGoTaskObject.toolbar";
|
||||
|
||||
currentUser = [context activeUser];
|
||||
sm = [SoSecurityManager sharedSecurityManager];
|
||||
|
||||
if (![sm validatePermission: SOGoCalendarPerm_ModifyComponent
|
||||
@@ -2035,36 +2063,45 @@ RANGE(2);
|
||||
|
||||
|
||||
- (int) ownerIsAttendee: (SOGoUser *) ownerUser
|
||||
andClientObject: (SOGoContentObject
|
||||
<SOGoComponentOccurence> *) clientObject
|
||||
andClientObject: (SOGoContentObject
|
||||
<SOGoComponentOccurence> *) clientObject
|
||||
{
|
||||
BOOL isOrganizer;
|
||||
int rc = 0;
|
||||
iCalPerson *ownerAttendee;
|
||||
int rc;
|
||||
|
||||
rc = 0;
|
||||
|
||||
isOrganizer = [component userIsOrganizer: ownerUser];
|
||||
if (isOrganizer)
|
||||
isOrganizer = ![ownerUser hasEmail: [[component organizer] sentBy]];
|
||||
|
||||
if ([[component attendees] count]
|
||||
&& [component userIsParticipant: ownerUser]
|
||||
&& !isOrganizer
|
||||
&& ![[component tag] isEqualToString: @"VTODO"])
|
||||
rc = 1;
|
||||
if (!isOrganizer && ![[component tag] isEqualToString: @"VTODO"])
|
||||
{
|
||||
ownerAttendee = [component userAsAttendee: ownerUser];
|
||||
if (ownerAttendee)
|
||||
{
|
||||
if ([[ownerAttendee rsvp] isEqualToString: @"true"])
|
||||
rc = 1;
|
||||
else
|
||||
rc = 2;
|
||||
}
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
- (int) delegateIsAttendee: (SOGoUser *) ownerUser
|
||||
andClientObject: (SOGoContentObject
|
||||
<SOGoComponentOccurence> *) clientObject
|
||||
andClientObject: (SOGoContentObject
|
||||
<SOGoComponentOccurence> *) clientObject
|
||||
{
|
||||
SoSecurityManager *sm;
|
||||
SOGoUser *currentUser;
|
||||
int rc = 0;
|
||||
iCalPerson *ownerAttendee;
|
||||
int rc;
|
||||
|
||||
rc = 0;
|
||||
|
||||
currentUser = [context activeUser];
|
||||
sm = [SoSecurityManager sharedSecurityManager];
|
||||
|
||||
if (![sm validatePermission: SOGoCalendarPerm_ModifyComponent
|
||||
onObject: clientObject
|
||||
inContext: context])
|
||||
@@ -2072,11 +2109,15 @@ RANGE(2);
|
||||
andClientObject: clientObject];
|
||||
else if (![sm validatePermission: SOGoCalendarPerm_RespondToComponent
|
||||
onObject: clientObject
|
||||
inContext: context]
|
||||
&& [[component attendees] count]
|
||||
&& [component userIsParticipant: ownerUser]
|
||||
&& ![component userIsOrganizer: ownerUser])
|
||||
rc = 1;
|
||||
inContext: context])
|
||||
{
|
||||
ownerAttendee = [component userAsAttendee: ownerUser];
|
||||
if ([[ownerAttendee rsvp] isEqualToString: @"true"]
|
||||
&& ![component userIsOrganizer: ownerUser])
|
||||
rc = 1;
|
||||
else
|
||||
rc = 2;
|
||||
}
|
||||
else
|
||||
rc = 2; // not invited, just RO
|
||||
|
||||
@@ -2090,9 +2131,8 @@ RANGE(2);
|
||||
int rc;
|
||||
|
||||
clientObject = [self clientObject];
|
||||
ownerUser = [SOGoUser userWithLogin: [clientObject ownerInContext: context]
|
||||
roles: nil];
|
||||
|
||||
ownerUser
|
||||
= [SOGoUser userWithLogin: [clientObject ownerInContext: context]];
|
||||
if ([componentCalendar isKindOfClass: [SOGoWebAppointmentFolder class]])
|
||||
rc = 2;
|
||||
else
|
||||
@@ -2113,9 +2153,54 @@ RANGE(2);
|
||||
return [self getEventRWType] != 0;
|
||||
}
|
||||
|
||||
- (BOOL) userIsAttendee
|
||||
- (BOOL) userHasRSVP
|
||||
{
|
||||
return [self getEventRWType] == 1;
|
||||
return ([self getEventRWType] == 1);
|
||||
}
|
||||
|
||||
- (NSString *) currentAttendeeClasses
|
||||
{
|
||||
NSMutableArray *classes;
|
||||
iCalPerson *ownerAttendee;
|
||||
SOGoUser *ownerUser;
|
||||
NSString *role, *partStat;
|
||||
SOGoCalendarComponent *co;
|
||||
|
||||
classes = [NSMutableArray arrayWithCapacity: 5];
|
||||
|
||||
/* rsvp class */
|
||||
if (![[attendee rsvp] isEqualToString: @"true"])
|
||||
[classes addObject: @"not-rsvp"];
|
||||
|
||||
/* partstat class */
|
||||
partStat = [[attendee partStat] lowercaseString];
|
||||
if (![partStat length])
|
||||
partStat = @"no-partstat";
|
||||
[classes addObject: partStat];
|
||||
|
||||
/* role class */
|
||||
role = [[attendee role] lowercaseString];
|
||||
if (![partStat length])
|
||||
role = @"no-role";
|
||||
[classes addObject: role];
|
||||
|
||||
/* attendee class */
|
||||
if ([[attendee delegatedFrom] length] > 0)
|
||||
[classes addObject: @"delegate"];
|
||||
|
||||
/* current attendee class */
|
||||
co = [self clientObject];
|
||||
ownerUser = [SOGoUser userWithLogin: [co ownerInContext: context]];
|
||||
ownerAttendee = [component userAsAttendee: ownerUser];
|
||||
if (attendee == ownerAttendee)
|
||||
[classes addObject: @"attendeeUser"];
|
||||
|
||||
return [classes componentsJoinedByString: @" "];
|
||||
}
|
||||
|
||||
- (NSString *) ownerLogin
|
||||
{
|
||||
return [[self clientObject] ownerInContext: context];
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -462,6 +462,7 @@ validate_endbeforestart = "Mae'r dyddiad gorffen sydd wedi'i roi yn digwydd c
|
||||
/* Legend */
|
||||
"Required participant" = "Cyfranogwr gofynnol";
|
||||
"Optional participant" = "Cyfranogwr opsiynol";
|
||||
"Non Participant" = "Non Participant";
|
||||
"Chair" = "Cadair";
|
||||
|
||||
"Needs action" = "Angen gweithred";
|
||||
|
||||
@@ -235,6 +235,16 @@
|
||||
pageName = "UIxAppointmentEditor";
|
||||
actionName = "delegate";
|
||||
};
|
||||
tentative = {
|
||||
protectedBy = "RespondToComponent";
|
||||
pageName = "UIxAppointmentEditor";
|
||||
actionName = "tentative";
|
||||
};
|
||||
needsaction = {
|
||||
protectedBy = "RespondToComponent";
|
||||
pageName = "UIxAppointmentEditor";
|
||||
actionName = "needsAction";
|
||||
};
|
||||
adjust = {
|
||||
protectedBy = "ModifyComponent";
|
||||
actionClass = "UIxAppointmentActions";
|
||||
|
||||
Reference in new issue
Block a user