diff --git a/ChangeLog b/ChangeLog index c38854463..55cdd0bbe 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2006-10-12 Wolfgang Sourdeau + * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]), + UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor + -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor + -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor + -saveAction]): + return a UIxJSClose component if everything went fine. + * UI/Scheduler/UIxTaskEditor.h: interface extracted from UIxTaskEditor.m. diff --git a/UI/Contacts/UIxContactEditor.m b/UI/Contacts/UIxContactEditor.m index 1efa8b096..364e1537f 100644 --- a/UI/Contacts/UIxContactEditor.m +++ b/UI/Contacts/UIxContactEditor.m @@ -366,11 +366,6 @@ return @"edit"; } -- (NSString *) contactUID -{ - return [[self clientObject] nameInContainer]; -} - - (CardElement *) _elementWithTag: (NSString *) tag ofType: (NSString *) type { @@ -462,10 +457,11 @@ [self _saveEmails]; } -- (id) saveAction +- (id ) saveAction { id contact; id result; + NSString *jsRefreshMethod; contact = [self clientObject]; card = [contact vCard]; @@ -474,7 +470,15 @@ [self _saveSnapshot]; [contact save]; - result = [self redirectToLocation: @".."]; + if ([[[[self context] request] formValueForKey: @"nojs"] intValue]) + result = [self redirectToLocation: [self applicationPath]]; + else + { + jsRefreshMethod + = [NSString stringWithFormat: @"refreshContacts(\"%@\")", + [contact nameInContainer]]; + result = [self jsCloseWithRefreshMethod: jsRefreshMethod]; + } } else result = [NSException exceptionWithHTTPStatus: 400 /* Bad Request */ diff --git a/UI/MailerUI/UIxMailEditor.m b/UI/MailerUI/UIxMailEditor.m index 4d777ad46..64ea6cfd8 100644 --- a/UI/MailerUI/UIxMailEditor.m +++ b/UI/MailerUI/UIxMailEditor.m @@ -19,7 +19,7 @@ 02111-1307, USA. */ -#include +#import /* UIxMailEditor @@ -48,16 +48,16 @@ @end -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "common.h" +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import "common.h" @implementation UIxMailEditor @@ -491,11 +491,13 @@ static NSArray *infoKeys = nil; return nil; } -- (id)sendAction { +- (id ) sendAction +{ NSException *error; NSString *mailPath; NSDictionary *h; - + id result; + // TODO: need to validate whether we have a To etc /* first, save form data */ @@ -553,8 +555,12 @@ static NSArray *infoKeys = nil; if ((error = [[self clientObject] delete]) != nil) return error; - // if everything is ok, close the window (send a JS closing the Window) - return [self pageWithName:@"UIxMailWindowCloser"]; + if ([[[[self context] request] formValueForKey: @"nojs"] intValue]) + result = [self redirectToLocation: [self applicationPath]]; + else + result = [self jsCloseWithRefreshMethod: nil]; + + return result; } - (id)deleteAction { diff --git a/UI/Scheduler/UIxAppointmentEditor.m b/UI/Scheduler/UIxAppointmentEditor.m index 27b9fff86..fde4bd7ba 100644 --- a/UI/Scheduler/UIxAppointmentEditor.m +++ b/UI/Scheduler/UIxAppointmentEditor.m @@ -23,72 +23,6 @@ #import #import -#import - -/* TODO: CLEAN UP */ - -@class NSString; -@class iCalPerson; -@class iCalRecurrenceRule; - -@interface UIxAppointmentEditor : UIxComponent -{ - NSString *iCalString; - NSString *errorText; - id item; - - /* individual values */ - NSCalendarDate *startDate; - NSCalendarDate *endDate; - NSCalendarDate *cycleUntilDate; - NSString *title; - NSString *location; - NSString *comment; - iCalPerson *organizer; - NSArray *participants; /* array of iCalPerson's */ - NSArray *resources; /* array of iCalPerson's */ - NSString *priority; - NSArray *categories; - NSString *accessClass; - BOOL isPrivate; /* default: NO */ - BOOL checkForConflicts; /* default: NO */ - NSDictionary *cycle; - NSString *cycleEnd; -} - -- (NSString *)iCalStringTemplate; -- (NSString *)iCalString; - -- (void)setIsPrivate:(BOOL)_yn; -- (void)setAccessClass:(NSString *)_class; - -- (void)setCheckForConflicts:(BOOL)_checkForConflicts; -- (BOOL)checkForConflicts; - -- (BOOL)hasCycle; -- (iCalRecurrenceRule *)rrule; -- (void)adjustCycleControlsForRRule:(iCalRecurrenceRule *)_rrule; -- (NSDictionary *)cycleMatchingRRule:(iCalRecurrenceRule *)_rrule; - -- (BOOL)isCycleEndUntil; -- (void)setIsCycleEndUntil; -- (void)setIsCycleEndNever; - -- (NSString *)_completeURIForMethod:(NSString *)_method; - -- (NSArray *)getICalPersonsFromFormValues:(NSArray *)_values - treatAsResource:(BOOL)_isResource; - -- (NSString *)iCalParticipantsAndResourcesStringFromQueryParameters; -- (NSString *)iCalParticipantsStringFromQueryParameters; -- (NSString *)iCalResourcesStringFromQueryParameters; -- (NSString *)iCalStringFromQueryParameter:(NSString *)_qp - format:(NSString *)_format; -- (NSString *)iCalOrganizerString; - -- (id)acceptOrDeclineAction:(BOOL)_accept; - -@end #import "common.h" #import @@ -99,6 +33,10 @@ #import #import "UIxComponent+Agenor.h" +#import "UIxAppointmentEditor.h" + +/* TODO: CLEAN UP */ + @implementation UIxAppointmentEditor + (int)version { @@ -913,8 +851,8 @@ to:[_apt endDate]]; [self debugWithFormat:@" process: %d events", [infos count]]; - ranges = [infos arrayByCreatingDateRangesFromObjectsWithStartDateKey:@"startDate" - andEndDateKey:@"endDate"]; + ranges = [infos arrayByCreatingDateRangesFromObjectsWithStartDateKey: @"startDate" + andEndDateKey: @"endDate"]; ranges = [ranges arrayByCompactingContainedDateRanges]; [self debugWithFormat:@" blocked ranges: %@", ranges]; @@ -980,9 +918,11 @@ return self; } -- (id)saveAction { +- (id ) saveAction +{ iCalEvent *apt; iCalPerson *p; + id result; NSString *content; NSException *ex; @@ -1035,7 +975,12 @@ return self; } - return [self redirectToLocation:[self _completeURIForMethod:@".."]]; + if ([[[[self context] request] formValueForKey: @"nojs"] intValue]) + result = [self redirectToLocation: [self applicationPath]]; + else + result = [self jsCloseWithRefreshMethod: @"refreshAppointments()"]; + + return result; } - (NSString *) saveUrl diff --git a/UI/Scheduler/UIxTaskEditor.h b/UI/Scheduler/UIxTaskEditor.h index e2bcba5c7..10ace4390 100644 --- a/UI/Scheduler/UIxTaskEditor.h +++ b/UI/Scheduler/UIxTaskEditor.h @@ -33,7 +33,6 @@ { NSString *iCalString; NSString *errorText; - NSString *action; id item; /* individual values */ diff --git a/UI/Scheduler/UIxTaskEditor.m b/UI/Scheduler/UIxTaskEditor.m index cda628465..3dda7f162 100644 --- a/UI/Scheduler/UIxTaskEditor.m +++ b/UI/Scheduler/UIxTaskEditor.m @@ -23,73 +23,11 @@ #import #import -#import + +#import "UIxTaskEditor.h" /* TODO: CLEAN UP */ -@class NSString; -@class iCalPerson; -@class iCalRecurrenceRule; - -@interface UIxTaskEditor : UIxComponent -{ - NSString *iCalString; - NSString *errorText; - id item; - - /* individual values */ - NSCalendarDate *startDate; - NSCalendarDate *dueDate; - NSCalendarDate *cycleUntilDate; - NSString *title; - NSString *location; - NSString *comment; - iCalPerson *organizer; - NSArray *participants; /* array of iCalPerson's */ - NSArray *resources; /* array of iCalPerson's */ - NSString *priority; - NSArray *categories; - NSString *accessClass; - BOOL isPrivate; /* default: NO */ - BOOL checkForConflicts; /* default: NO */ - NSDictionary *cycle; - NSString *cycleEnd; -} - -- (NSString *)iCalStringTemplate; -- (NSString *)iCalString; - -- (void)setIsPrivate:(BOOL)_yn; -- (void)setAccessClass:(NSString *)_class; - -- (void)setCheckForConflicts:(BOOL)_checkForConflicts; -- (BOOL)checkForConflicts; - -- (BOOL)hasCycle; -- (iCalRecurrenceRule *)rrule; -- (void)adjustCycleControlsForRRule:(iCalRecurrenceRule *)_rrule; -- (NSDictionary *)cycleMatchingRRule:(iCalRecurrenceRule *)_rrule; - -- (BOOL)isCycleEndUntil; -- (void)setIsCycleEndUntil; -- (void)setIsCycleEndNever; - -- (NSString *)_completeURIForMethod:(NSString *)_method; - -- (NSArray *)getICalPersonsFromFormValues:(NSArray *)_values - treatAsResource:(BOOL)_isResource; - -- (NSString *)iCalParticipantsAndResourcesStringFromQueryParameters; -- (NSString *)iCalParticipantsStringFromQueryParameters; -- (NSString *)iCalResourcesStringFromQueryParameters; -- (NSString *)iCalStringFromQueryParameter:(NSString *)_qp - format:(NSString *)_format; -- (NSString *)iCalOrganizerString; - -- (id)acceptOrDeclineAction:(BOOL)_accept; - -@end - #import "common.h" #import #import @@ -145,10 +83,13 @@ /* accessors */ -- (void)setItem:(id)_item { +- (void) setItem: (id) _item +{ ASSIGN(item, _item); } -- (id)item { + +- (id) item +{ return item; } @@ -678,8 +619,8 @@ /* save */ /* returned dates are in GMT */ -- (NSArray *)getICalPersonsFromFormValues:(NSArray *)_values - treatAsResource:(BOOL)_isResource +- (NSArray *) getICalPersonsFromFormValues: (NSArray *) _values + treatAsResource: (BOOL) _isResource { unsigned i, count; NSMutableArray *result; @@ -905,7 +846,7 @@ [self debugWithFormat:@" process: %d tasks", [infos count]]; ranges = [infos arrayByCreatingDateRangesFromObjectsWithStartDateKey:@"startDate" - andDueDateKey:@"dueDate"]; + andEndDateKey:@"dueDate"]; ranges = [ranges arrayByCompactingContainedDateRanges]; [self debugWithFormat:@" blocked ranges: %@", ranges]; @@ -929,11 +870,14 @@ /* actions */ -- (BOOL)shouldTakeValuesFromRequest:(WORequest *)_rq inContext:(WOContext*)_c{ +- (BOOL) shouldTakeValuesFromRequest: (WORequest *) _rq + inContext: (WOContext*) _c +{ return YES; } -- (id)testAction { +- (id) testAction +{ /* for testing only */ WORequest *req; iCalToDo *task; @@ -950,9 +894,10 @@ return self; } -- (id)defaultAction { +- (id ) defaultAction +{ NSString *ical; - + /* load iCalendar file */ // TODO: can't we use [clientObject contentAsString]? @@ -968,31 +913,35 @@ /* TODO: we need proper ACLs */ return [self redirectToLocation:[self _completeURIForMethod:@"../view"]]; } + return self; } -- (id)saveAction { +- (id ) saveAction +{ iCalToDo *task; iCalPerson *p; + id result; NSString *content; NSException *ex; if (![self isWriteableClientObject]) { /* return 400 == Bad Request */ return [NSException exceptionWithHTTPStatus:400 - reason:@"method cannot be invoked on " - @"the specified object"]; + reason: @"method cannot be invoked on " + @"the specified object"]; } - + task = [self taskFromString: [self iCalString]]; if (task == nil) { NSString *s; - s = [self labelForKey:@"Invalid iCal data!"]; - [self setErrorText:s]; + s = [self labelForKey: @"Invalid iCal data!"]; + [self setErrorText: s]; + return self; } - + [self saveValuesIntoTask:task]; p = [task findParticipantWithEmail:[self emailForUser]]; if (p) { @@ -1015,8 +964,8 @@ if (content == nil) { NSString *s; - s = [self labelForKey:@"Could not create iCal data!"]; - [self setErrorText:s]; + s = [self labelForKey: @"Could not create iCal data!"]; + [self setErrorText: s]; return self; } @@ -1025,8 +974,13 @@ [self setErrorText:[ex reason]]; return self; } - - return [self redirectToLocation:[self _completeURIForMethod:@".."]]; + + if ([[[[self context] request] formValueForKey: @"nojs"] intValue]) + result = [self redirectToLocation: [self applicationPath]]; + else + result = [self jsCloseWithRefreshMethod: @"refreshTasks()"]; + + return result; } - (id) changeStatusAction diff --git a/UI/Templates/ContactsUI/UIxContactEditor.wox b/UI/Templates/ContactsUI/UIxContactEditor.wox index fd0bc099d..7e597c05f 100644 --- a/UI/Templates/ContactsUI/UIxContactEditor.wox +++ b/UI/Templates/ContactsUI/UIxContactEditor.wox @@ -344,8 +344,7 @@ type="submit" class="button" label:value="Save" - name="save:method" - onclick="submitContact(this.form); return false;" /> + name="save:method" /> --> - diff --git a/UI/Templates/SchedulerUI/UIxAppointmentEditor.wox b/UI/Templates/SchedulerUI/UIxAppointmentEditor.wox index f67d04dd6..617101210 100644 --- a/UI/Templates/SchedulerUI/UIxAppointmentEditor.wox +++ b/UI/Templates/SchedulerUI/UIxAppointmentEditor.wox @@ -13,8 +13,7 @@ -
- +

@@ -113,8 +112,7 @@ type="submit" class="button" label:value="Save" - name="submitmeeting" - onclick="submitMeeting(this.form);" /> + name="submitmeeting" /> - + title="name"> - - +

@@ -39,20 +36,20 @@ /> + const:controlID="startTime" + date="taskStartDate" + const:dayStartHour="8" + const:dayEndHour="18" + /> + const:controlID="endTime" + date="taskDueDate" + const:dayStartHour="8" + const:dayEndHour="18" + />

@@ -68,7 +65,7 @@ > +