sogo/SoObjects/SOGo/SOGoUserFolder.m

201 lines
4.8 KiB
Matlab
Raw Normal View History

/*
Copyright (C) 2004-2005 SKYRIX Software AG
This file is part of OpenGroupware.org.
OGo is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
OGo is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
License for more details.
You should have received a copy of the GNU Lesser General Public
License along with OGo; see the file COPYING. If not, write to the
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
*/
#import "WOContext+Agenor.h"
#import "common.h"
#import "SOGoUser.h"
#import "Appointments/SOGoAppointmentFolder.h"
#import "Appointments/SOGoFreeBusyObject.h"
#import "Contacts/SOGoContactFolders.h"
#import "Mailer/SOGoMailAccounts.h"
#import "SOGoUserFolder.h"
@implementation SOGoUserFolder
/* accessors */
- (NSString *) login
{
return nameInContainer;
}
/* hierarchy */
- (NSArray *) toManyRelationshipKeys
{
static NSArray *children = nil;
if (!children)
children = [[NSArray alloc] initWithObjects:
@"Calendar", @"Contacts", @"Mail", nil];
return children;
}
/* ownership */
- (NSString *) ownerInContext: (WOContext *) _ctx
{
return nameInContainer;
}
/* looking up shared objects */
- (SOGoUserFolder *) lookupUserFolder
{
return self;
}
- (SOGoGroupsFolder *) lookupGroupsFolder
{
return [self lookupName: @"Groups" inContext: nil acquire: NO];
}
/* pathes */
- (void) setOCSPath: (NSString *) _path
{
[self warnWithFormat:
@"rejected attempt to reset user-folder path: '%@'", _path];
}
- (NSString *) ocsPath
{
return [@"/Users/" stringByAppendingString: [self login]];
}
- (NSString *) ocsUserPath
{
return [self ocsPath];
}
- (NSString *) ocsPrivateCalendarPath
{
return [[self ocsUserPath] stringByAppendingString:@"/Calendar"];
}
- (NSString *) ocsPrivateContactsPath
{
return [[self ocsUserPath] stringByAppendingString:@"/Contacts"];
}
/* name lookup */
// - (NSString *) permissionForKey: (NSString *) key
// {
// return ([key isEqualToString: @"freebusy.ifb"]
// ? SoPerm_WebDAVAccess
// : [super permissionForKey: key]);
// }
- (SOGoAppointmentFolder *) privateCalendar: (NSString *) _key
inContext: (WOContext *) _ctx
{
SOGoAppointmentFolder *calendar;
calendar = [$(@"SOGoAppointmentFolder") objectWithName: _key inContainer: self];
[calendar setOCSPath: [self ocsPrivateCalendarPath]];
return calendar;
}
- (SOGoContactFolders *) privateContacts: (NSString *) _key
inContext: (WOContext *) _ctx
{
SOGoContactFolders *contacts;
contacts = [$(@"SOGoContactFolders") objectWithName:_key inContainer: self];
[contacts setBaseOCSPath: [self ocsPrivateContactsPath]];
return contacts;
}
- (id) groupsFolder: (NSString *) _key
inContext: (WOContext *) _ctx
{
return [$(@"SOGoGroupsFolder") objectWithName: _key inContainer: self];
}
- (id) mailAccountsFolder: (NSString *) _key
inContext: (WOContext *) _ctx
{
return [$(@"SOGoMailAccounts") objectWithName: _key inContainer: self];
}
- (id) freeBusyObject: (NSString *) _key
inContext: (WOContext *) _ctx
{
return [$(@"SOGoFreeBusyObject") objectWithName: _key inContainer: self];
}
- (id) lookupName: (NSString *) _key
inContext: (WOContext *) _ctx
acquire: (BOOL) _flag
{
id obj;
/* first check attributes directly bound to the application */
obj = [super lookupName: _key inContext: _ctx acquire: NO];
if (!obj)
{
if ([_key hasPrefix: @"Calendar"])
{
obj = [self privateCalendar: @"Calendar" inContext: _ctx];
if (![_key isEqualToString: @"Calendar"])
obj = [obj lookupName: [_key pathExtension]
inContext: _ctx acquire: NO];
}
else if ([_key isEqualToString: @"Contacts"])
obj = [self privateContacts: _key inContext: _ctx];
else if ([_key isEqualToString: @"Groups"])
obj = [self groupsFolder: _key inContext: _ctx];
else if ([_key isEqualToString: @"Mail"])
obj = [self mailAccountsFolder: _key inContext: _ctx];
else if ([_key isEqualToString: @"freebusy.ifb"])
obj = [self freeBusyObject:_key inContext:_ctx];
else
obj = [NSException exceptionWithHTTPStatus: 404 /* Not Found */];
}
return obj;
}
/* WebDAV */
- (NSArray *) fetchContentObjectNames
{
static NSArray *cos = nil;
if (!cos)
cos = [[NSArray alloc] initWithObjects: @"freebusy.ifb", nil];
return cos;
}
- (BOOL) davIsCollection
{
return YES;
}
@end /* SOGoUserFolder */