/* TODO: CLEAN UP */
-@class NSString, SOGoAppointment, iCalPerson;
+@class NSString;
+@class iCalPerson;
+@class SOGoAppointment;
@interface UIxAppointmentEditor : UIxComponent
{
- (iCalPerson *)getOrganizer;
- (NSArray *)getICalPersonsFromFormValues:(NSArray *)_values
- treatAsResource:(BOOL)_isResource;
+ treatAsResource:(BOOL)_isResource;
+
@end
#include "common.h"
- (void)dealloc {
[self->appointment release];
[self->participants release];
- [self->item release];
+ [self->item release];
[super dealloc];
}
/* accessors */
- (void)setItem:(id)_item {
- ASSIGN(self->item, _item);
+ ASSIGN(self->item, _item);
}
- (id)item {
- return self->item;
+ return self->item;
}
- (NSString *)formattedAptStartTime {
}
- (BOOL)isNewAppointment {
- /* that doesn't work! */
+ /* that doesn't work! (TODO: explain why!) */
+ // TODO: is this actually used?
return ![[self clientObject] isAppointment];
}
/* helper */
- (NSString *)_completeURIForMethod:(NSString *)_method {
- NSString *uri;
- NSRange r;
-
- uri = [[[self context] request] uri];
+ NSString *uri;
+ NSRange r;
- /* first: identify query parameters */
- r = [uri rangeOfString:@"?" options:NSBackwardsSearch];
- if(r.length > 0)
- uri = [uri substringToIndex:r.location];
+ uri = [[[self context] request] uri];
- /* next: append trailing slash */
- if(![uri hasSuffix:@"/"])
- uri = [uri stringByAppendingString:@"/"];
+ /* first: identify query parameters */
+ r = [uri rangeOfString:@"?" options:NSBackwardsSearch];
+ if (r.length > 0)
+ uri = [uri substringToIndex:r.location];
- /* next: append method */
- uri = [uri stringByAppendingString:_method];
+ /* next: append trailing slash */
+ if (![uri hasSuffix:@"/"])
+ uri = [uri stringByAppendingString:@"/"];
+
+ /* next: append method */
+ uri = [uri stringByAppendingString:_method];
- /* next: append query parameters */
- return [self completeHrefForMethod:uri];
+ /* next: append query parameters */
+ return [self completeHrefForMethod:uri];
}
-
/* email, cn */
- (NSString *)combinedCNAndEmailForUser {
- return [NSString stringWithFormat:@"%@;%@",
- [self emailForUser],
- [self cnForUser]];
+ return [NSString stringWithFormat:@"%@;%@",
+ [self emailForUser],
+ [self cnForUser]];
}
- (NSString *)combinedCNAndEmail {
- return [NSString stringWithFormat:@"%@;%@",
- [self->item rfc822Email],
- [self->item cnForDisplay]];
+ return [NSString stringWithFormat:@"%@;%@",
+ [self->item rfc822Email],
+ [self->item cnForDisplay]];
}
-
/* new */
- (id)newAction {
It is actually a folder method and should be defined on the folder.
Note: 'clientObject' is the SOGoAppointmentFolder!
+ Update: remember that there are group folders as well.
*/
NSString *uri, *objectId, *nextMethod;
objectId = [NSClassFromString(@"SOGoAppointmentFolder")
globallyUniqueObjectId];
+ if ([objectId length] == 0) {
+ return [NSException exceptionWithHTTPStatus:500 /* Internal Error */
+ reason:@"could not create a unique ID"];
+ }
nextMethod = [NSString stringWithFormat:@"../%@/edit", objectId];
uri = [self _completeURIForMethod:nextMethod];
}
- (iCalPerson *)getOrganizer {
- iCalPerson *p;
- NSString *emailProp;
-
- emailProp = [NSString stringWithFormat:@"mailto:%@",
- [self emailForUser]];
- p = [[iCalPerson alloc] init];
- [p setEmail:emailProp];
- [p setCn:[self cnForUser]];
- return [p autorelease];
+ iCalPerson *p;
+ NSString *emailProp;
+
+ emailProp = [@"mailto:" stringByAppendingString:[self emailForUser]];
+ p = [[[iCalPerson alloc] init] autorelease];
+ [p setEmail:emailProp];
+ [p setCn:[self cnForUser]];
+ return p;
}
- (NSArray *)getICalPersonsFromFormValues:(NSArray *)_values
- treatAsResource:(BOOL)_isResource
+ treatAsResource:(BOOL)_isResource
{
- unsigned i, count;
- NSMutableArray *result;
-
- count = [_values count];
- result = [[NSMutableArray alloc] initWithCapacity:count];
- for (i = 0; i < count; i++) {
- NSString *pString, *email, *cn;
- NSRange r;
- iCalPerson *p;
-
- pString = [_values objectAtIndex:i];
- if([pString length] == 0)
- continue;
-
- /* delimiter between email and cn */
- r = [pString rangeOfString:@";"];
- if(r.length > 0) {
- email = [pString substringToIndex:r.location];
- if(r.location + 1 < [pString length]) {
- cn = [pString substringFromIndex:r.location + 1];
- }
- else {
- cn = nil;
- }
- }
- else {
- email = pString;
- cn = nil;
- }
- if(cn == nil) {
- /* fallback */
- AgenorUserManager *um = [AgenorUserManager sharedUserManager];
- cn = [um getCNForUID:[um getUIDForEmail:email]];
- }
- p = [[iCalPerson alloc] init];
- [p setEmail:[@"mailto:" stringByAppendingString:email]];
- if(cn)
- [p setCn:cn];
-
- /* see RFC2445, sect. 4.2.16 for details */
- if(_isResource) {
- [p setRole:@"NON-PARTICIPANT"];
- }
- else {
- [p setRole:@"REQ-PARTICIPANT"];
- }
- [result addObject:p];
- [p release];
+ unsigned i, count;
+ NSMutableArray *result;
+
+ count = [_values count];
+ result = [[NSMutableArray alloc] initWithCapacity:count];
+ for (i = 0; i < count; i++) {
+ NSString *pString, *email, *cn;
+ NSRange r;
+ iCalPerson *p;
+
+ pString = [_values objectAtIndex:i];
+ if ([pString length] == 0)
+ continue;
+
+ /* delimiter between email and cn */
+ r = [pString rangeOfString:@";"];
+ if (r.length > 0) {
+ email = [pString substringToIndex:r.location];
+ cn = (r.location + 1 < [pString length])
+ ? [pString substringFromIndex:r.location + 1]
+ : nil;
}
- return [result autorelease];
+ else {
+ email = pString;
+ cn = nil;
+ }
+ if (cn == nil) {
+ /* fallback */
+ AgenorUserManager *um = [AgenorUserManager sharedUserManager];
+ cn = [um getCNForUID:[um getUIDForEmail:email]];
+ }
+
+ p = [[iCalPerson alloc] init];
+ [p setEmail:[@"mailto:" stringByAppendingString:email]];
+ if ([cn isNotNull]) [p setCn:cn];
+
+ /* see RFC2445, sect. 4.2.16 for details */
+ [p setRole:_isResource ? @"NON-PARTICIPANT" : @"REQ-PARTICIPANT"];
+ [result addObject:p];
+ [p release];
+ }
+ return [result autorelease];
}
-/* for testing only */
+/* actions */
+
- (id)testAction {
- WORequest *req;
+ /* for testing only */
+ WORequest *req;
- NSLog(@"%s BEEN HERE!",
- __PRETTY_FUNCTION__);
+ NSLog(@"%s BEEN HERE!", __PRETTY_FUNCTION__);
- req = [[self context] request];
- NSLog(@"%@", [req formValues]);
- return self;
+ req = [[self context] request];
+ NSLog(@"%@", [req formValues]);
+ return self;
}
- (id)saveAction {
if ([iCalString length] == 0) {
// TODO: improve user experience ... (eg error panel like Zope)
/* return 400 == Bad Request */
- return [NSException exceptionWithHTTPStatus:400
+ return [NSException exceptionWithHTTPStatus:400 /* Bad Request */
reason:@"missing iCalendar form data in request"];
}
apt = [[SOGoAppointment alloc] initWithICalString:iCalString];
+ if (apt == nil) {
+ return [NSException exceptionWithHTTPStatus:400 /* Bad Request */
+ reason:@"invalid iCalendar form data in request"];
+ }
/* merge in form values */
[apt setLocation:location];
[apt removeAllAttendees]; /* clean up */
- attendees = \
- [self getICalPersonsFromFormValues:[req formValuesForKey:@"participants"]
- treatAsResource:NO];
+ attendees = [self getICalPersonsFromFormValues:
+ [req formValuesForKey:@"participants"]
+ treatAsResource:NO];
[apt appendAttendees:attendees];
- attendees = \
- [self getICalPersonsFromFormValues:[req formValuesForKey:@"resources"]
- treatAsResource:YES];
+ attendees = [self getICalPersonsFromFormValues:
+ [req formValuesForKey:@"resources"]
+ treatAsResource:YES];
[apt appendAttendees:attendees];
[apt setOrganizer:[self getOrganizer]];
-
+
/* receive current representation for save operation */
iCalString = [apt iCalString];
[apt release]; apt = nil;
</td>
</tr>
<tr>
- <TD COLSPAN="1" ALIGN="middle" BGCOLOR="#FFDAAA">\r\r <font color="black" size="2" face="Arial,Helvetica,Verdana,Geneva,Tahoma">00</font>\r </TD>
- <TD COLSPAN="1" ALIGN="middle" BGCOLOR="#FFDAAA">\r <font color="black" size="2" face="Arial,Helvetica,Verdana,Geneva,Tahoma">30</font>\r </TD>
- <TD COLSPAN="1" ALIGN="middle" BGCOLOR="#FFDAAA">\r <font color="black" size="2" face="Arial,Helvetica,Verdana,Geneva,Tahoma">00</font>\r\r </TD>
- <TD COLSPAN="1" ALIGN="middle" BGCOLOR="#FFDAAA">\r <font color="black" size="2" face="Arial,Helvetica,Verdana,Geneva,Tahoma">30</font>\r </TD>\r \r
- <TD COLSPAN="1" ALIGN="middle" BGCOLOR="#FFDAAA">\r <font color="black" size="2" face="Arial,Helvetica,Verdana,Geneva,Tahoma">00</font>\r </TD>\r \r
- <TD COLSPAN="1" ALIGN="middle" BGCOLOR="#FFDAAA">\r\r <font color="black" size="2" face="Arial,Helvetica,Verdana,Geneva,Tahoma">30</font>\r </TD>\r \r
- <TD COLSPAN="1" ALIGN="middle" BGCOLOR="#FFDAAA">\r <font color="black" size="2" face="Arial,Helvetica,Verdana,Geneva,Tahoma">00</font>\r </TD>\r \r
- <TD COLSPAN="1" ALIGN="middle" BGCOLOR="#FFDAAA">\r <font color="black" size="2" face="Arial,Helvetica,Verdana,Geneva,Tahoma">30</font>\r\r </TD>\r \r
- <TD COLSPAN="1" ALIGN="middle" BGCOLOR="#FFDAAA">\r <font color="black" size="2" face="Arial,Helvetica,Verdana,Geneva,Tahoma">00</font>\r </TD>\r \r <TD COLSPAN="1" ALIGN="middle" BGCOLOR="#FFDAAA">\r <font color="black" size="2" face="Arial,Helvetica,Verdana,Geneva,Tahoma">30</font>\r </TD>\r \r <TD COLSPAN="1" ALIGN="middle" BGCOLOR="#FFDAAA">\r\r <font color="black" size="2" face="Arial,Helvetica,Verdana,Geneva,Tahoma">00</font>\r </TD>\r \r <TD COLSPAN="1" ALIGN="middle" BGCOLOR="#FFDAAA">\r <font color="black" size="2" face="Arial,Helvetica,Verdana,Geneva,Tahoma">30</font>\r </TD>\r \r <TD COLSPAN="1" ALIGN="middle" BGCOLOR="#FFDAAA">\r <font color="black" size="2" face="Arial,Helvetica,Verdana,Geneva,Tahoma">00</font>\r\r </TD>\r \r <TD COLSPAN="1" ALIGN="middle" BGCOLOR="#FFDAAA">\r <font color="black" size="2" face="Arial,Helvetica,Verdana,Geneva,Tahoma">30</font>\r </TD>\r \r <TD COLSPAN="1" ALIGN="middle" BGCOLOR="#FFDAAA">\r <font color="black" size="2" face="Arial,Helvetica,Verdana,Geneva,Tahoma">00</font>\r </TD>\r \r <TD COLSPAN="1" ALIGN="middle" BGCOLOR="#FFDAAA">\r\r <font color="black" size="2" face="Arial,Helvetica,Verdana,Geneva,Tahoma">30</font>\r </TD>\r \r <TD COLSPAN="1" ALIGN="middle" BGCOLOR="#FFDAAA">\r <font color="black" size="2" face="Arial,Helvetica,Verdana,Geneva,Tahoma">00</font>\r </TD>\r \r <TD COLSPAN="1" ALIGN="middle" BGCOLOR="#FFDAAA">\r <font color="black" size="2" face="Arial,Helvetica,Verdana,Geneva,Tahoma">30</font>\r\r </TD>\r \r
-</tr>
-<tr>
- <td WIDTH="15%" ALIGN="middle" BGCOLOR="#FFDAAA" COLSPAN="1">\r <font color="black" size="2" face="Arial,Helvetica,Verdana,Geneva,Tahoma">2004-08-15</font>\r </td>\r \r \r
- <td ALIGN="left" BGCOLOR="#FAE8B8" COLSPAN="1" VALIGN="top">\r <a href="1.3.1.3.1.7.0.3.0.1.1.1.1">\r\r <img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" ALT="new" border="NO" />\r </a>\r </td>\r \r \r \r \r \r \r
- <td ALIGN="left" BGCOLOR="#FAE8B8" COLSPAN="1" VALIGN="top">\r <a href="1.3.1.3.1.7.0.3.1.1.1.1.1">\r <img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" ALT="new" border="NO" />\r </a>\r </td>\r \r \r \r \r \r \r
- <td ALIGN="left" BGCOLOR="#FAE8B8" COLSPAN="1" VALIGN="top">\r\r <a href="1.3.1.3.1.7.0.3.2.1.1.1.1">\r <img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" ALT="new" border="NO" />\r </a>\r </td>\r \r \r \r \r \r \r
- <td ALIGN="left" BGCOLOR="#FAE8B8" COLSPAN="1" VALIGN="top">\r <a href="1.3.1.3.1.7.0.3.3.1.1.1.1">\r <img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" ALT="new" border="NO" />\r </a>\r </td>\r\r \r \r \r \r \r \r
- <td ALIGN="left" BGCOLOR="#FAE8B8" COLSPAN="1" VALIGN="top">\r <a href="1.3.1.3.1.7.0.3.4.1.1.1.1">\r <img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" ALT="new" border="NO" />\r </a>\r </td>\r \r \r \r \r \r \r
- <td ALIGN="left" BGCOLOR="#FAE8B8" COLSPAN="1" VALIGN="top">\r <a href="1.3.1.3.1.7.0.3.5.1.1.1.1">\r <img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" ALT="new" border="NO" />\r </a>\r\r </td>\r \r \r \r \r \r \r
- <td ALIGN="left" BGCOLOR="#FAE8B8" COLSPAN="1" VALIGN="top">\r <a href="1.3.1.3.1.7.0.3.6.1.1.1.1">\r <img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" ALT="new" border="NO" />\r </a>\r </td>\r \r \r \r \r \r \r
- <td ALIGN="left" BGCOLOR="#FAE8B8" COLSPAN="1" VALIGN="top">\r <a href="1.3.1.3.1.7.0.3.7.1.1.1.1">\r <img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" ALT="new" border="NO" />\r\r </a>\r </td>\r \r \r \r \r \r \r
- <td ALIGN="left" BGCOLOR="#FAE8B8" COLSPAN="1" VALIGN="top">\r <a href="1.3.1.3.1.7.0.3.8.1.1.1.1">\r <img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" ALT="new" border="NO" />\r </a>\r </td>\r \r \r \r \r \r \r
- <td ALIGN="left" BGCOLOR="#FAE8B8" COLSPAN="1" VALIGN="top">\r <a href="1.3.1.3.1.7.0.3.9.1.1.1.1">\r\r <img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" ALT="new" border="NO" />\r </a>\r </td>\r \r \r \r \r \r \r
- <td ALIGN="left" BGCOLOR="#FAE8B8" COLSPAN="1" VALIGN="top">\r <a href="1.3.1.3.1.7.0.3.10.1.1.1.1">\r <img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" ALT="new" border="NO" />\r </a>\r </td>\r \r \r \r \r \r \r
- <td ALIGN="left" BGCOLOR="#FAE8B8" COLSPAN="1" VALIGN="top">\r\r <a href="1.3.1.3.1.7.0.3.11.1.1.1.1">\r <img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" ALT="new" border="NO" />\r </a>\r </td>\r \r \r \r \r \r \r
- <td ALIGN="left" BGCOLOR="#FAE8B8" COLSPAN="1" VALIGN="top">\r <a href="1.3.1.3.1.7.0.3.12.1.1.1.1">\r <img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" ALT="new" border="NO" />\r </a>\r </td>\r\r \r \r \r \r \r \r
- <td ALIGN="left" BGCOLOR="#FAE8B8" COLSPAN="1" VALIGN="top">\r <a href="1.3.1.3.1.7.0.3.13.1.1.1.1">\r <img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" ALT="new" border="NO" />\r </a>\r </td>\r \r \r \r \r \r \r
- <td ALIGN="left" BGCOLOR="#FAE8B8" COLSPAN="1" VALIGN="top">\r <a href="1.3.1.3.1.7.0.3.14.1.1.1.1">\r <img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" ALT="new" border="NO" />\r </a>\r\r </td>\r \r \r \r \r \r \r
- <td ALIGN="left" BGCOLOR="#FAE8B8" COLSPAN="1" VALIGN="top">\r <a href="1.3.1.3.1.7.0.3.15.1.1.1.1">\r <img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" ALT="new" border="NO" />\r </a>\r </td>\r \r \r \r \r \r \r
- <td ALIGN="left" BGCOLOR="#FAE8B8" COLSPAN="1" VALIGN="top">\r <a href="1.3.1.3.1.7.0.3.16.1.1.1.1">\r <img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" ALT="new" border="NO" />\r\r </a>\r </td>\r \r \r \r \r \r \r \r \r
+ <td colspan="1" align="middle" bgcolor="#FFDAAA">
+ <font color="black" size="2"
+ face="Arial,Helvetica,Verdana,Geneva,Tahoma">00</font>
+ </td>
+ <td colspan="1" align="middle" bgcolor="#FFDAAA">
+ <font color="black" size="2"
+ face="Arial,Helvetica,Verdana,Geneva,Tahoma">30</font>
+ </td>
+ <td colspan="1" align="middle" bgcolor="#FFDAAA">
+ <font color="black" size="2"
+ face="Arial,Helvetica,Verdana,Geneva,Tahoma">00</font>
+ </td>
+ <td colspan="1" align="middle" bgcolor="#FFDAAA">
+ <font color="black" size="2"
+ face="Arial,Helvetica,Verdana,Geneva,Tahoma">30</font>
+ </td>
+ <td colspan="1" align="middle" bgcolor="#FFDAAA">
+ <font color="black" size="2"
+ face="Arial,Helvetica,Verdana,Geneva,Tahoma">00</font>
+ </td>
+ <td colspan="1" align="middle" bgcolor="#FFDAAA">
+ <font color="black" size="2"
+ face="Arial,Helvetica,Verdana,Geneva,Tahoma">30</font>
+ </td>
+ <td colspan="1" align="middle" bgcolor="#FFDAAA">
+ <font color="black" size="2"
+ face="Arial,Helvetica,Verdana,Geneva,Tahoma">00</font>
+ </td>
+ <td colspan="1" align="middle" bgcolor="#FFDAAA">
+ <font color="black" size="2"
+ face="Arial,Helvetica,Verdana,Geneva,Tahoma">30</font>
+ </td>
+ <td colspan="1" align="middle" bgcolor="#FFDAAA">
+ <font color="black" size="2"
+ face="Arial,Helvetica,Verdana,Geneva,Tahoma">00</font>
+ </td>
+ <td colspan="1" align="middle" bgcolor="#FFDAAA">
+ <font color="black" size="2"
+ face="Arial,Helvetica,Verdana,Geneva,Tahoma">30</font>
+ </td>
+ <td colspan="1" align="middle" bgcolor="#FFDAAA">
+ <font color="black" size="2"
+ face="Arial,Helvetica,Verdana,Geneva,Tahoma">00</font>
+ </td>
+ <td colspan="1" align="middle" bgcolor="#FFDAAA">
+ <font color="black" size="2"
+ face="Arial,Helvetica,Verdana,Geneva,Tahoma">30</font>
+ </td>
+ <td colspan="1" align="middle" bgcolor="#FFDAAA">
+ <font color="black" size="2"
+ face="Arial,Helvetica,Verdana,Geneva,Tahoma">00</font>
+ </td>
+ <td colspan="1" align="middle" bgcolor="#FFDAAA">
+ <font color="black" size="2"
+ face="Arial,Helvetica,Verdana,Geneva,Tahoma">30</font>
+ </td>
+ <td colspan="1" align="middle" bgcolor="#FFDAAA">
+ <font color="black" size="2"
+ face="Arial,Helvetica,Verdana,Geneva,Tahoma">00</font>
+ </td>
+ <td colspan="1" align="middle" bgcolor="#FFDAAA">
+ <font color="black" size="2"
+ face="Arial,Helvetica,Verdana,Geneva,Tahoma">30</font>
+ </td>
+ <td colspan="1" align="middle" bgcolor="#FFDAAA">
+ <font color="black" size="2"
+ face="Arial,Helvetica,Verdana,Geneva,Tahoma">00</font>
+ </td>
+ <td colspan="1" align="middle" bgcolor="#FFDAAA">
+ <font color="black" size="2"
+ face="Arial,Helvetica,Verdana,Geneva,Tahoma">30</font>
+ </td>
+ </tr>
+ <tr>
+ <td width="15%" align="middle" bgcolor="#FFDAAA" colspan="1">
+ <font color="black" size="2"
+ face="Arial,Helvetica,Verdana,Geneva,Tahoma"
+ >2004-08-15</font>
+ </td>
+ <td align="left" bgcolor="#FAE8B8" colspan="1" valign="top">
+ <a href="#"><img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" alt="new" border="0" /></a>
+ </td>
+ <td align="left" bgcolor="#FAE8B8" colspan="1" valign="top">
+ <a href="#"><img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" alt="new" border="0" /></a>
+ </td>
+ <td align="left" bgcolor="#FAE8B8" colspan="1" valign="top">
+ <a href="#"><img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" alt="new" border="0" /></a>
+ </td>
+ <td align="left" bgcolor="#FAE8B8" colspan="1" valign="top">
+ <a href="#"><img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" alt="new" border="0" /></a>
+ </td>
+ <td align="left" bgcolor="#FAE8B8" colspan="1" valign="top">
+ <a href="#"><img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" alt="new" border="0" /></a>
+ </td>
+ <td align="left" bgcolor="#FAE8B8" colspan="1" valign="top">
+ <a href="#"><img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" alt="new" border="0" /></a>
+ </td>
+ <td align="left" bgcolor="#FAE8B8" colspan="1" valign="top">
+ <a href="#"><img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" alt="new" border="0" /></a>
+ </td>
+ <td align="left" bgcolor="#FAE8B8" colspan="1" valign="top">
+ <a href="#"><img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" alt="new" border="0" /></a>
+ </td>
+ <td align="left" bgcolor="#FAE8B8" colspan="1" valign="top">
+ <a href="#"><img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" alt="new" border="0" /></a>
+ </td>
+ <td align="left" bgcolor="#FAE8B8" colspan="1" valign="top">
+ <a href="#"><img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" alt="new" border="0" /></a>
+ </td>
+ <td align="left" bgcolor="#FAE8B8" colspan="1" valign="top">
+ <a href="#"><img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" alt="new" border="0" /></a>
+ </td>
+ <td align="left" bgcolor="#FAE8B8" colspan="1" valign="top">
+ <a href="#"><img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" alt="new" border="0" /></a>
+ </td>
+ <td align="left" bgcolor="#FAE8B8" colspan="1" valign="top">
+ <a href="#"><img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" alt="new" border="0" /></a>
+ </td>
+ <td align="left" bgcolor="#FAE8B8" colspan="1" valign="top">
+ <a href="#"><img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" alt="new" border="0" /></a>
+ </td>
+ <td align="left" bgcolor="#FAE8B8" colspan="1" valign="top">
+ <a href="#"><img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" alt="new" border="0" /></a>
+ </td>
+ <td align="left" bgcolor="#FAE8B8" colspan="1" valign="top">
+ <a href="#"><img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" alt="new" border="0" /></a>
+ </td>
+ <td align="left" bgcolor="#FAE8B8" colspan="1" valign="top">
+ <a href="#"><img src="/OpenGroupware.woa/WebServerResources/English.lproj/green_corner.gif" alt="new" border="0" /></a>
+ </td>
<td align="middle" bgcolor="#FFAAAA"
colspan="1" valign="middle"> </td>
</tr>