/* 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. */ #include "UIxAppointmentView.h" #include #include #include #include #include "UIxComponent+Agenor.h" #include "common.h" @implementation UIxAppointmentView - (void)dealloc { [self->appointment release]; [self->attendee release]; [self->dateFormatter release]; [self->item release]; [super dealloc]; } /* accessors */ - (NSString *)tabSelection { NSString *selection; selection = [self queryParameterForKey:@"tab"]; if (selection == nil) selection = @"attributes"; return selection; } - (void)setAttendee:(id)_attendee { ASSIGN(self->attendee, _attendee); } - (id)attendee { return self->attendee; } - (void)setItem:(id)_item { ASSIGN(self->item, _item); } - (id)item { return self->item; } - (SOGoDateFormatter *)dateFormatter { if (self->dateFormatter == nil) { self->dateFormatter = [[SOGoDateFormatter alloc] initWithLocale:[self locale]]; [self->dateFormatter setFullWeekdayNameAndDetails]; } return self->dateFormatter; } - (NSCalendarDate *)startTime { NSCalendarDate *date; date = [[self appointment] startDate]; [date setTimeZone:[self viewTimeZone]]; return date; } - (NSCalendarDate *)endTime { NSCalendarDate *date; date = [[self appointment] endDate]; [date setTimeZone:[self viewTimeZone]]; return date; } - (NSString *)resourcesAsString { NSArray *resources, *cns; resources = [[self appointment] resources]; cns = [resources valueForKey:@"cnForDisplay"]; return [cns componentsJoinedByString:@"
"]; } - (NSString *)categoriesAsString { unsigned i, count; NSArray *cats; NSMutableString *s; s = [[NSMutableString alloc] init]; cats = [((SOGoAppointment *)self->appointment) categories]; count = [cats count]; for(i = 0; i < count; i++) { NSString *cat, *label; cat = [cats objectAtIndex:i]; label = [self labelForKey:cat]; [s appendString:label]; if(i != (count - 1)) [s appendString:@", "]; } return s; } /* backend */ - (SOGoAppointment *)appointment { NSString *iCalString; if (self->appointment != nil) return self->appointment; iCalString = [[self clientObject] valueForKey:@"iCalString"]; if (![iCalString isNotNull] || [iCalString length] == 0) { [self errorWithFormat:@"(%s): missing iCal string!", __PRETTY_FUNCTION__]; return nil; } self->appointment = [[SOGoAppointment alloc] initWithICalString:iCalString]; return self->appointment; } /* hrefs */ - (NSString *)attributesTabLink { return [self completeHrefForMethod:[self ownMethodName] withParameter:@"attributes" forKey:@"tab"]; } - (NSString *)participantsTabLink { return [self completeHrefForMethod:[self ownMethodName] withParameter:@"participants" forKey:@"tab"]; } - (NSString *)debugTabLink { return [self completeHrefForMethod:[self ownMethodName] withParameter:@"debug" forKey:@"tab"]; } - (NSString *)completeHrefForMethod:(NSString *)_method withParameter:(NSString *)_param forKey:(NSString *)_key { NSString *href; [self setQueryParameter:_param forKey:_key]; href = [self completeHrefForMethod:[self ownMethodName]]; [self setQueryParameter:nil forKey:_key]; return href; } /* access */ - (BOOL)isMyApt { NSString *owner; owner = [[self clientObject] ownerInContext:[self context]]; if (!owner) return YES; return [owner isEqualToString:[[self user] login]]; } - (BOOL)canAccessApt { if ([self isMyApt]) return YES; /* not my apt - can access if it's public */ return [[self appointment] isPublic]; } - (BOOL)canEditApt { return [self isMyApt]; } /* action */ - (id)defaultAction { if ([self appointment] == nil) { return [NSException exceptionWithHTTPStatus:404 /* Not Found */ reason:@"could not locate appointment"]; } return self; } - (BOOL)isDeletableClientObject { return [[self clientObject] respondsToSelector:@selector(delete)]; } - (id)deleteAction { NSException *ex; id url; if ([self appointment] == nil) { return [NSException exceptionWithHTTPStatus:404 /* Not Found */ reason:@"could not locate appointment"]; } if (![self isDeletableClientObject]) { /* return 400 == Bad Request */ return [NSException exceptionWithHTTPStatus:400 reason:@"method cannot be invoked on " @"the specified object"]; } if ((ex = [[self clientObject] delete]) != nil) { // TODO: improve error handling [self debugWithFormat:@"failed to delete: %@", ex]; return ex; } url = [[[self clientObject] container] baseURLInContext:[self context]]; return [self redirectToLocation:url]; } @end /* UIxAppointmentView */