#import <Foundation/NSUserDefaults.h>
#import <Foundation/NSKeyValueCoding.h>
#import <Foundation/NSPathUtilities.h>
+
#import <NGObjWeb/SoHTTPAuthenticator.h>
#import <NGObjWeb/SoObjects.h>
#import <NGObjWeb/WOResourceManager.h>
#import <NGObjWeb/WORequest.h>
+#import <NGObjWeb/WOResponse.h>
#import <NGObjWeb/WOContext+SoObjects.h>
#import <NGExtensions/NSObject+Logs.h>
#import <NGExtensions/NSString+misc.h>
#import <NGExtensions/NSURL+misc.h>
+
+#import <SoObjects/SOGo/NSCalendarDate+SOGo.h>
+#import <SoObjects/SOGo/NSString+Utilities.h>
#import <SoObjects/SOGo/SOGoUser.h>
#import <SoObjects/SOGo/SOGoObject.h>
+#import <SoObjects/SOGo/SOGoContentObject.h>
#import <SoObjects/SOGo/SOGoCustomGroupFolder.h>
-#import <SoObjects/SOGo/NSCalendarDate+SOGo.h>
-#import <SoObjects/SOGo/NSString+Utilities.h>
+#import <SoObjects/SOGo/SOGoPermissions.h>
-#import "UIxComponent.h"
#import "UIxJSClose.h"
+#import "UIxComponent.h"
+
@interface UIxComponent (PrivateAPI)
- (void)_parseQueryString:(NSString *)_s;
- (NSMutableDictionary *)_queryParameters;
- (void) dealloc
{
- [self->queryParameters release];
- if (_selectedDate)
- [_selectedDate release];
+ [queryParameters release];
+ [_selectedDate release];
[super dealloc];
}
value = [[part substringFromIndex:(r.location + r.length)]
stringByUnescapingURL];
}
- [self->queryParameters setObject:value forKey:key];
+ [queryParameters setObject:value forKey:key];
part = [e nextObject];
}
}
NSRange r;
NSString *qs;
- if (self->queryParameters)
- return self->queryParameters;
+ if (queryParameters)
+ return queryParameters;
- self->queryParameters = [[NSMutableDictionary alloc] initWithCapacity:8];
+ queryParameters = [[NSMutableDictionary alloc] initWithCapacity:8];
- req = [[self context] request];
+ req = [context request];
uri = [req uri];
r = [uri rangeOfString:@"?" options:NSBackwardsSearch];
if (r.length > 0)
/* add form values */
[self addKeepAliveFormValuesToQueryParameters];
- return self->queryParameters;
+ return queryParameters;
}
- (NSDictionary *) queryParameters
qp = [self queryParameters];
if ([qp count] > 0)
{
- ctx = [self context];
+ ctx = context;
qps = [ctx queryPathSeparator];
[ctx setQueryPathSeparator: @"&"];
qs = [ctx queryStringFromDictionary: qp];
NSString *uri;
NSRange r;
- uri = [[[self context] request] uri];
+ uri = [[context request] uri];
/* first: cut off query parameters */
SOGoObject *currentObject;
BOOL found;
- ctx = [self context];
+ ctx = context;
objects = [[ctx objectTraversalStack] objectEnumerator];
currentObject = [objects nextObject];
found = NO;
SOGoObject *currentClient, *parent;
BOOL found;
Class objectClass, groupFolderClass, userFolderClass;
- WOContext *ctx;
-
- groupFolderClass = [SOGoCustomGroupFolder class];
- userFolderClass = [SOGoUserFolder class];
currentClient = [self clientObject];
- objectClass = [currentClient class];
- found = (objectClass == groupFolderClass || objectClass == userFolderClass);
- while (!found && currentClient)
+ if (currentClient
+ && [currentClient isKindOfClass: [SOGoObject class]])
{
- parent = [currentClient container];
- objectClass = [parent class];
- if (objectClass == groupFolderClass
- || objectClass == userFolderClass)
- found = YES;
- else
- currentClient = parent;
+ groupFolderClass = [SOGoCustomGroupFolder class];
+ userFolderClass = [SOGoUserFolder class];
+
+ objectClass = [currentClient class];
+ found = (objectClass == groupFolderClass || objectClass == userFolderClass);
+ while (!found && currentClient)
+ {
+ parent = [currentClient container];
+ objectClass = [parent class];
+ if (objectClass == groupFolderClass
+ || objectClass == userFolderClass)
+ found = YES;
+ else
+ currentClient = parent;
+ }
}
+ else
+ currentClient = [WOApplication application];
- ctx = [self context];
-
- return [[currentClient baseURLInContext:ctx] hostlessURL];
+ return [[currentClient baseURLInContext: context] hostlessURL];
}
- (NSString *) resourcesPath
NSString *uri;
NSRange r;
- uri = [[[self context] request] uri];
+ uri = [[context request] uri];
/* first: cut off query parameters */
userTimeZone = [[context activeUser] timeZone];
[_date setTimeZone: userTimeZone];
- return [_date descriptionWithCalendarFormat:@"%Y%m%d"];
+ return [_date descriptionWithCalendarFormat: @"%Y%m%d"];
}
- (BOOL) hideFrame
return jsClose;
}
-/* SoUser */
-
-- (SoUser *) user
+/* common conditions */
+- (BOOL) canCreateOrModify
{
- WOContext *ctx;
-
- ctx = [self context];
+ SoSecurityManager *sm;
- return [[[self clientObject] authenticatorInContext: ctx] userInContext: ctx];
+ sm = [SoSecurityManager sharedSecurityManager];
+
+ return (![sm validatePermission: SoPerm_ChangeImagesAndFiles
+ onObject: [self clientObject]
+ inContext: context]);
}
+/* SoUser */
+
- (NSString *) shortUserNameForDisplay
{
- // TODO: better use a SoUser formatter?
- // TODO: who calls that?
- NSString *s;
- NSRange r;
-
- // TODO: USE USER MANAGER INSTEAD!
-
- s = [[self user] login];
- if ([s length] < 10)
- return s;
-
- // TODO: algorithm might be inappropriate, depends on the actual UID
-
- r = [s rangeOfString:@"."];
- if (r.length == 0)
- return s;
-
- return [s substringToIndex:r.location];
+ if ([context activeUser] == nil)
+ return @"wrongusernamepassword";
+
+ return [[context activeUser] login];
}
/* labels */
/* lookup languages */
- languages = [[self context] resourceLookupLanguages];
+ languages = [context resourceLookupLanguages];
/* find resource manager */
if ([lTable hasPrefix:@"$"])
lTable = [self valueForKeyPath:[lTable substringFromIndex:1]];
-#if 0
- if ([lVal hasPrefix:@"$"])
- lVal = [self valueForKeyPath:[lVal substringFromIndex:1]];
-
-#endif
-
/* lookup string */
return [rm stringForKey: lKey
inTableNamed: lTable
// TODO: move to WORequest?
NSString *m;
- m = [[[self context] request] method];
+ m = [[context request] method];
if ([m isEqualToString:@"GET"]) return YES;
if ([m isEqualToString:@"HEAD"]) return YES;
return NO;
{
WOResourceManager *rm;
- if ((rm = [[[self context] page] resourceManager]) == nil)
+ if ((rm = [[context page] resourceManager]) == nil)
rm = [[WOApplication application] resourceManager];
return rm;
if (!url)
{
rm = [self pageResourceManager];
- page = [[self context] page];
+ page = [context page];
pageBundle = [NSBundle bundleForClass: [page class]];
url = [rm urlForResourceNamed: filename
inFramework: [pageBundle bundlePath]
languages: nil
- request: [[self context] request]];
+ request: [context request]];
if (!url)
url = @"";
else
return url;
}
+- (WOResponse *) responseWith204
+{
+ WOResponse *response;
+
+ response = [context response];
+ [response setStatus: 204];
+
+ return response;
+}
+
/* debugging */
- (BOOL)isUIxDebugEnabled {