]> err.no Git - scalable-opengroupware.org/commitdiff
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1007 d1b88da0-ebda-0310...
authorwolfgang <wolfgang@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Thu, 4 Jan 2007 14:42:10 +0000 (14:42 +0000)
committerwolfgang <wolfgang@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Thu, 4 Jan 2007 14:42:10 +0000 (14:42 +0000)
ChangeLog
SoObjects/Appointments/SOGoAppointmentFolder.h
SoObjects/Appointments/SOGoAppointmentFolder.m
UI/Scheduler/UIxCalMainView.m
UI/Scheduler/UIxCalView.h
UI/Scheduler/UIxCalView.m

index e22af63203ac37669171c0daecbed9bbf5705365..8763230a1090645332b14a6d88549ef5b61aff98 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2007-01-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/Appointments/SOGoAppointmentFolder.m
+       ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
+       moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
+       ([SOGoAppointmentFolder
+       -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
+       lookupCalendarFolderForUID: method, which doesn't do security
+       checks.
+
 2007-01-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
 
        * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
index 4d609ab2300223c755c679e9878d2c2e283aadba..48eac1d0bc3b813d10df4fb288632534943f6728 100644 (file)
@@ -87,6 +87,7 @@
 - (id) lookupHomeFolderForUID: (NSString *) _uid
                     inContext: (id) _ctx;
 
+- (SOGoAppointmentFolder *) lookupCalendarFolderForUID: (NSString *) uid;
 - (NSArray *) lookupCalendarFoldersForUIDs: (NSArray *) _uids
                                  inContext: (id) _ctx;
 - (NSArray *) lookupFreeBusyObjectsForUIDs: (NSArray *) _uids
index 3fe48dbad2b21b5c760f0fa9f3c109d8737babb5..3d39ef3ad2f9f9ea076126d1954754836a201a70 100644 (file)
@@ -903,6 +903,24 @@ static NSNumber   *sharedYes = nil;
   return result;
 }
 
+- (SOGoAppointmentFolder *) lookupCalendarFolderForUID: (NSString *) uid
+{
+  SOGoFolder *upperContainer;
+  SOGoUserFolder *userFolder;
+  SOGoAppointmentFolder *calendarFolder;
+
+  upperContainer = [[self container] container];
+  userFolder = [SOGoUserFolder objectWithName: uid
+                               inContainer: upperContainer];
+  calendarFolder = [SOGoAppointmentFolder objectWithName: @"Calendar"
+                                          inContainer: userFolder];
+  [calendarFolder
+    setOCSPath: [NSString stringWithFormat: @"/Users/%@/Calendar", uid]];
+  [calendarFolder setOwner: uid];
+
+  return calendarFolder;
+}
+
 - (NSArray *) lookupCalendarFoldersForUIDs: (NSArray *) _uids
                                  inContext: (id)_ctx
 {
@@ -917,12 +935,7 @@ static NSNumber   *sharedYes = nil;
   while ((uid = [e nextObject])) {
     id folder;
     
-    folder = [self lookupHomeFolderForUID:uid inContext:nil];
-    if ([folder isNotNull]) {
-      folder = [folder lookupName:@"Calendar" inContext:nil acquire:NO];
-      if ([folder isKindOfClass:[NSException class]])
-       folder = nil;
-    }
+    folder = [self lookupCalendarFolderForUID: uid];
     if (![folder isNotNull])
       [self logWithFormat:@"Note: did not find folder for uid: '%@'", uid];
     
index 35eef41344d44410fcc1cfc2c1c9f6bdef98fca1..fc2bcad5ff58cb579e992911c75764d2e375956f 100644 (file)
 #import <Foundation/NSUserDefaults.h>
 #import <Foundation/NSValue.h>
 
+#import <NGObjWeb/SoSecurityManager.h>
 #import <NGObjWeb/WOResponse.h>
 
+#import <SOGo/SOGoPermissions.h>
 #import <SOGo/SOGoUser.h>
 
 #import "UIxCalMainView.h"
@@ -128,40 +130,59 @@ static NSMutableArray *yearMenuItems = nil;
   return response;
 }
 
-- (id <WOActionResults>) checkRightsAction
+- (NSString *) _rightsForUIDs: (NSString *) uids
 {
-  WOResponse *response;
-  NSUserDefaults *ud;
-  NSString *uids, *uid;
+  NSEnumerator *ids;
+  NSString *uid;
   NSMutableString *rights;
-  NSArray *ids;
-  unsigned int count, max;
+  SOGoAppointmentFolder *refFolder, *currentFolder;
+  SoSecurityManager *securityManager;
   BOOL result;
 
-  ud = [[context activeUser] userDefaults];
-  uids = [ud stringForKey: @"calendaruids"];
+  securityManager = [SoSecurityManager sharedSecurityManager];
+  refFolder = [self clientObject];
 
-  response = [context response];
-  [response setStatus: 200];
-  [response setHeader: @"text/plain; charset=\"utf-8\""
-            forKey: @"content-type"];
   rights = [NSMutableString string];
   if ([uids length] > 0)
     {
-      ids = [uids componentsSeparatedByString: @","];
-      max = [ids count];
-      for (count = 0; count < max; count++)
+      ids = [[uids componentsSeparatedByString: @","] objectEnumerator];
+      uid = [ids nextObject];
+      while (uid)
         {
-          uid = [ids objectAtIndex: count];
-          if ([uid hasPrefix: @"-"])
-            uid = [uid substringFromIndex: 1];
-          result = ([self calendarFolderForUID: uid] != nil);
-          if (count == 0)
+          currentFolder
+            = [refFolder
+                lookupCalendarFolderForUID: (([uid hasPrefix: @"-"])
+                                             ? [uid substringFromIndex: 1]
+                                             : uid)];
+          result = (![securityManager validatePermission: SoPerm_AccessContentsInformation
+                                      onObject: currentFolder
+                                      inContext: context]);
+          if ([rights length] == 0)
             [rights appendFormat: @"%d", result];
           else
             [rights appendFormat: @",%d", result];
+          uid = [ids nextObject];
         }
     }
+
+  return rights;
+}
+
+- (id <WOActionResults>) checkRightsAction
+{
+  WOResponse *response;
+  NSUserDefaults *ud;
+  NSString *uids, *rights;
+
+  ud = [[context activeUser] userDefaults];
+  uids = [ud stringForKey: @"calendaruids"];
+
+  response = [context response];
+  [response setStatus: 200];
+  [response setHeader: @"text/plain; charset=\"utf-8\""
+            forKey: @"content-type"];
+
+  rights = [self _rightsForUIDs: uids];
   [response appendContentString: rights];
 
   return response;
index 4195bb2b8c6de4a3dd190ae9ce9d068ee5fbe0fe..9446c0ade67aafd84e8bee3344c24adcc1e176cc 100644 (file)
 /* calendarUIDs */
 
 - (NSString *)formattedCalendarUIDs;
-- (SOGoAppointmentFolder *) calendarFolderForUID: (NSString *) uid;
 
 /* CSS related */
 
index 9a0c74d4ec5ff9c466cdbd2f89a1204445ef4c92..48fda46f7cfac5e04cb14d0e678b8e4830e19f59 100644 (file)
@@ -440,30 +440,6 @@ static BOOL shouldDisplayWeekend = NO;
   return [[self startDate] tomorrow];
 }
 
-- (SOGoAppointmentFolder *) calendarFolderForUID: (NSString *) uid
-{
-  SOGoFolder *upperContainer;
-  SOGoUserFolder *userFolder;
-  SOGoAppointmentFolder *calendarFolder;
-  SoSecurityManager *securityManager;
-
-  upperContainer = [[[self clientObject] container] container];
-  userFolder = [SOGoUserFolder objectWithName: uid
-                               inContainer: upperContainer];
-  calendarFolder = [SOGoAppointmentFolder objectWithName: @"Calendar"
-                                         inContainer: userFolder];
-  [calendarFolder
-    setOCSPath: [NSString stringWithFormat: @"/Users/%@/Calendar", uid]];
-  [calendarFolder setOwner: uid];
-
-  securityManager = [SoSecurityManager sharedSecurityManager];
-
-  return (([securityManager validatePermission: SoPerm_AccessContentsInformation
-                            onObject: calendarFolder
-                            inContext: context] == nil)
-          ? calendarFolder : nil);
-}
-
 - (NSArray *) activeCalendarFolders
 {
   NSUserDefaults *ud;
@@ -471,6 +447,9 @@ static BOOL shouldDisplayWeekend = NO;
   SOGoAppointmentFolder *currentFolder;
   NSMutableArray *folders;
   NSString *currentUID;
+  SoSecurityManager *securityManager;
+
+  securityManager = [SoSecurityManager sharedSecurityManager];
 
   folders = [NSMutableArray array];
   ud = [[context activeUser] userDefaults];
@@ -481,8 +460,11 @@ static BOOL shouldDisplayWeekend = NO;
     {
       if (![currentUID hasPrefix: @"-"])
         {
-          currentFolder = [self calendarFolderForUID: currentUID];
-          if (currentFolder)
+          currentFolder = [[self clientObject] lookupCalendarFolderForUID: currentUID];
+          if (currentFolder
+              && ![securityManager validatePermission: SoPerm_AccessContentsInformation
+                                   onObject: currentFolder
+                                   inContext: context])
             [folders addObject: currentFolder];
         }
       currentUID = [calendarUIDs nextObject];