See ChangeLog

Monotone-Parent: 1fc6240dbb88ca9e470be6d2679ee8e3e10e4f4f
Monotone-Revision: b9443420fc607bc2c0d8c6a5cff48fda3c68f7e6

Monotone-Author: ludovic@Sophos.ca
Monotone-Date: 2008-11-26T16:26:32
Monotone-Branch: ca.inverse.sogo
This commit is contained in:
Ludovic Marcotte
2008-11-26 16:26:32 +00:00
parent eba307e5c0
commit 021c061d29
5 changed files with 55 additions and 4 deletions
+10
View File
@@ -1,3 +1,13 @@
2008-11-26 Ludovic Marcotte <lmarcotte@inverse.ca>
* SoObjects/SOGo/SOGoGCSFolder.m
We correctly wrap ACL additions around a
database transaction.
* Updated the code wrt acting on behalf of
someone else to speed up things and also to
honor the participation status of the one acting
on behalf of someone else.
2008-11-26 Ludovic Marcotte <lmarcotte@inverse.ca>
* SoObjects/SOGo/SOGoGCSFolder.m
@@ -345,6 +345,7 @@
[[newEvent parent] setMethod: @""];
ownerUser = [SOGoUser userWithLogin: owner roles: nil];
if ([newEvent userIsOrganizer: ownerUser])
{
oldEvent = [self component: NO secure: NO];
@@ -352,7 +353,7 @@
[self _handleUpdatedEvent: newEvent fromOldEvent: oldEvent];
else
{
attendees = [newEvent attendeesWithoutUser: [context activeUser]];
attendees = [newEvent attendeesWithoutUser: ownerUser];
if ([attendees count])
{
[self _handleAddedUsers: attendees fromEvent: newEvent];
+3 -1
View File
@@ -855,6 +855,7 @@ static NSArray *childRecordFields = nil;
folder = [self ocsFolder];
channel = [folder acquireAclChannel];
[[channel adaptorContext] beginTransaction];
userRoles = [roles objectEnumerator];
while ((currentRole = [userRoles nextObject]))
{
@@ -863,9 +864,10 @@ static NSArray *childRecordFields = nil;
@" VALUES ('/%@', '%@', '%@')",
[folder aclTableName],
objectPath, uid, currentRole];
[channel evaluateExpressionX: SQL];
[channel evaluateExpressionX: SQL];
}
[[channel adaptorContext] commitTransaction];
[folder releaseChannel: channel];
}
+25
View File
@@ -292,16 +292,41 @@
return result;
}
//
// This method needs to carefully handle the following cases :
//
// A- Alice creates an event in her calendar
// B- Alice creates an event in Bob's calendar (and invites herself or not)
// C- Alice moves an event to an other calendar
//
- (id <WOActionResults>) saveAction
{
SOGoAppointmentFolder *thisFolder;
SOGoAppointmentObject *co;
SoSecurityManager *sm;
NSException *ex;
NSString *aOwner;
// See A.
co = [self clientObject];
if (componentCalendar)
{
aOwner = [componentCalendar ownerInContext: context];
// See B.
if (![aOwner isEqualToString: [[context activeUser] login]])
{
co = [componentCalendar lookupName: [co nameInContainer]
inContext: context
acquire: NO];
}
}
// We save the component
[co saveComponent: event];
// See C.
if (componentCalendar)
{
sm = [SoSecurityManager sharedSecurityManager];
+15 -2
View File
@@ -1608,12 +1608,25 @@ RANGE(2);
andClientObject: (SOGoContentObject
<SOGoComponentOccurence> *) clientObject
{
NSString *toolbarFilename;
iCalPersonPartStat participationStatus;
NSString *toolbarFilename;
BOOL isOrganizer;
// We determine if we're the organizer of the component beeing modified.
// If we created an event on behalf of someone else -userIsOrganizer will
// return us YES. This is OK because we're in the SENT-BY. But, Alice
// should be able to accept/decline an invitation if she created the event
// in Bob's calendar and added herself in the attendee list.
isOrganizer = [component userIsOrganizer: ownerUser];
if (isOrganizer)
{
isOrganizer = ![ownerUser hasEmail: [[component organizer] sentBy]];
}
if ([[component attendees] count]
&& [component userIsParticipant: ownerUser]
&& ![component userIsOrganizer: ownerUser])
&& !isOrganizer)
{
participationStatus
= [[component findParticipant: ownerUser] participationStatus];