1 2007-11-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3 * UI/MailPartViewers/UIxMailRenderingContext.m
4 ([UIxMailRenderingContext -viewerForBodyInfo:_info]): same as below.
6 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
7 -plainTextContentFetchKeys]): same as below.
9 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
10 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): accept the
11 application/ics type from Google Calendar.
13 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
14 +distantFuture]): rewrote method to return an object that is
15 compatible with NSCalendarDate, unlike the implementation in
17 ([NSCalendarDate +distantPast]): same as above.
19 2007-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
21 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: fixed infinite loop
22 when charset is us-ascii, match it to ascii rather than none.
24 * SoObjects/Appointments/SOGoAppointmentFolder.m
25 ([SOGoAppointmentFolder
26 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
27 added search on the c_title column too.
29 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
30 -eventsListAction]): take the "search" url parameter into account.
31 ([UIxCalListingActions -eventsListAction]): fetch events matching
34 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -connectAction]): the
35 user infos are now posted as "application/x-www-form-urlencoded".
36 So we have to have like a form has been posted.
38 2007-11-21 Francis Lachapelle <flachapelle@inverse.ca>
40 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
41 -calendarList]): also returns the calendar of the current
42 event. This is required so the proper calender is selected when
43 you view an event to which you don't have write access.
45 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
46 also returns true for super users.
48 2007-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
50 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
51 -lookupImap4BodyPartKey:inContext:]): return a correct body part
52 when "0" is requested, taking its mime-type into account.
54 * UI/MailPartViewers/UIxMailRenderingContext.m
55 ([UIxMailRenderingContext -flatContentForPartPath:_partPath]):
56 return content for part "0", which would be the message body.
58 2007-11-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
60 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
61 ([_UIxHTMLMailContentHandler
62 -setContentEncoding:newContentEncoding]): new method that
63 specifies an xml charset to return to the parser.
64 ([UIxMailPartHTMLViewer -flatContentAsString]): specifies the
65 charset to the content handler before parsing.
67 * SoObjects/Appointments/SOGoAppointmentObject.m: don't take an
68 empty c_name as a valid response when looking up an event. Create
69 one in that case instead.
71 2007-11-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
73 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -signature]):
74 returns the signature for the default identity of the default
76 ([UIxPreferences -setSignature:newSignature]): accessor that sets
77 the default signature.
79 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
80 -composeAction]): append the message signature to the new draft.
82 * SoObjects/Mailer/SOGoMailReply.m ([SOGoMailReply -signature]):
85 * SoObjects/Mailer/SOGoMailForward.m ([SOGoMailForward
86 -signature]): new method that takes the user's signature and put
87 it at the end of the message, if exists.
89 * UI/Common/UIxPageFrame.m ([UIxPageFrame -isSuperUser]): new
90 accessor that forwards the call to the active user.
92 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -signature]): returns the
93 user default signature.
94 ([SOGoUser -isSuperUser]): declares whether the user is listed
95 among the super users.
97 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
98 -setComponent:newComponent]): retain the component object.
99 ([UIxComponentEditor -organizerIdentity]): new accessor method to
100 handle list of possible organizers.
102 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
103 -event]): retain the returned event object.
105 * SoObjects/Appointments/SOGoAppointmentObject.m
106 ([SOGoAppointmentObject -saveComponent:newEvent]): reset the
107 organizer only if there are no attendees AND the owner of the
108 component is not the organizer him-/herself.
110 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
111 -toolbar]): rewrote in a way that ensures that each case is
114 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -isEqual:otherUser]): new
117 * UI/Scheduler/UIxTaskEditor.m ([-acceptAction])
118 ([-declineAction]): commented out unused methods.
120 * UI/MailPartViewers/UIxMailPartICalActions.m
121 ([UIxMailPartICalActions -deleteFromCalendarAction]): actually
122 delete the found object.
124 2007-11-18 Ludovic Marcotte <ludovic@inverse.ca>
126 * SoObjects/Mailer/SOGoMailBodyPart.m
127 SoObjects/Mailer/SOGoMailObject.m
128 UI/MailPartViewers/UIxMailPartViewer.m
129 Added support of messages containing non-textual
130 content and no parts.
132 * UI/MailerUI/UIxMailView.m
133 SoObjects/Mailer/SOGoMailObject.m
134 UI/Templates/MailerUI/UIxMailView.wox
135 Added support for the Reply-To header upon
138 2007-11-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
140 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]):
141 invoke saveComponent:.
143 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -hasOrganizer])
144 ([UIxComponentEditor -organizerName]): new template accessor
145 related to displaying the event's organizer.
146 ([-containsConflict:_component]): removed method.
147 ([UIxComponentEditor -takeValuesFromRequest:_rqinContext:_ctx]):
148 set RSVP to "TRUE" on each attendee.
150 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
151 -saveAction]): invoke saveComponent:.
153 * UI/MailPartViewers/UIxMailPartICalViewer.m
154 ([UIxMailPartICalViewer -isLoggedInUserTheOrganizer]): make use of
155 the -userIsOrganizer: category method.
156 ([-isLoggedInUserAnAttendee]): make use of -userIsParticipant:.
157 ([UIxMailPartICalViewer -hasSenderStatusChanged]): new template
158 accessor that determines whether the "Update" button should be
161 * UI/MailPartViewers/UIxMailPartICalActions.m
162 ([UIxMailPartICalActions -deleteFromCalendarAction]): implemented
164 ([UIxMailPartICalActions -updateUserStatusAction]): implemented
167 * UI/Common/UIxPageFrame.m ([UIxPageFrame
168 -setCssFiles:newCSSFiles]): new accessor that enables the
169 sub-templates to specify extra CSS files to load.
171 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
172 -homeFolderInContext:context]): cache the home folder of the user
173 object instead of the current user.
175 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
176 -deleteEntriesWithIds:ids]): invokes the "prepareDelete" optional
177 method if the child object implements it.
179 * SoObjects/SOGo/SOGoContentObject.m ([-setContentString:])
182 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
183 -setBaseDN:newBaseDNIDField:newIDFieldCNField:newCNFieldUIDField:newUIDFieldmailFields:newMailFieldsandBindFields:newBindFields]):
184 take a new "mailFields" parameter defining an array of fields
185 where to look at when searching the user's emails. It defaults to
186 the standard "mail" LDAP field.
188 * SoObjects/Appointments/SOGoAptMailICalReply.[hm]: new
189 SoComponent implementing a template for ITIP replies.
191 * SoObjects/Appointments/iCalPerson+SOGo.m ([iCalPerson
192 -mailAddress]): new method that returns a properly formatted email
193 address for the specified person entry.
194 ([iCalPerson -uid]): new method that tests whether the user is
195 known to the system and if so, returns its user id.
197 * SoObjects/Appointments/iCalPerson+SOGo.[hm]: new category module.
199 * SoObjects/Appointments/iCalEventChanges+SOGo.m
200 ([iCalEventChanges -sequenceShouldBeIncreased]): determine whether
201 the changes involved need a sequence inscrease, based on the
204 * SoObjects/Appointments/iCalEventChanges+SOGo.[hm]: new category
207 * SoObjects/Appointments/iCalEvent+SOGo.m ([iCalEvent
208 -isStillRelevant]): new overriden method determining the relevance
209 of the current event based on its end date.
211 * SoObjects/Appointments/iCalEvent+SOGo.[hm]: new category module.
213 * SoObjects/Appointments/iCalEntityObject+SOGo.m
214 ([iCalEntityObject -attendeeUIDs]): new category methods that
215 returns an array containing the uids of the system-know attendees.
216 ([iCalEntityObject -isStillRelevant]): new template method.
217 ([iCalEntityObject -itipEntryWithMethod:method]): clone the
218 current entry calendar with the specified ITIP method.
219 ([iCalEntityObject -attendeesWithoutUser:user]): returns an array
220 of attendees while making sure the specified user is not listed.
222 * SoObjects/Appointments/SOGoCalendarComponent.m
223 ([SOGoCalendarComponent -calendar:create:secure]): new name for
224 -calendar:. Added a "secure" parameter that specifies whether a
225 stripped calendar instance is needed or not. Also, we no longer
226 cache the content to simplify handling of new data.
227 ([SOGoCalendarComponent -component:create:secure]): same as above.
228 ([SOGoCalendarComponent
229 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
230 test whether the component is "still relevant" before sending an
232 ([SOGoCalendarComponent -sendResponseToOrganizer]): new method for
233 sending ITIP replies.
234 ([SOGoCalendarComponent -getUIDsForICalPerson:iCalPerson]):
235 removed method. Replaced with -[iCalPerson uid] category method.
237 * SoObjects/Appointments/SOGoAppointmentObject.[hm]: rewrote
238 class. No longer override saveContentString:,
239 saveContentString:baseSequence:, .... Implemented the
240 saveComponent: and the prepareDelete methods instead. Those
241 methods are called only from the web methods. This avoids the
242 risks related to email sending and changes propagation.
244 * UI/Common/UIxTabItem.m: removed useless class module.
246 * UI/Common/UIxTabView.[hm]: removed useless class module.
248 * UI/Common/UIxPrintPageFrame.m: removed useless class module.
250 * UI/Common/UIxAppNavView.m: removed useless class module.
252 2007-11-16 Ludovic Marcotte <ludovic@inverse.ca>
254 * SoObjects/Mailer/SOGoMailBaseObject.m
257 * SoObjects/Mailer/SOGoMailBodyPart.m
258 We also grok image/jpeg and return the SOGoMailBodyPart
259 for attachments fetching.
261 * SoObjects/Mailer/SOGoMailObject+Draft.m
262 Prevent a crash in case body decoding failed during
265 * SoObjects/Mailer/SOGoMailObject.m
266 Improved body decoding during a reply to also try
267 latin1 as an encoding.
269 * UI/MailPartViewers/UIxMailRenderingContext.m
270 Greatly improved the display mechanisms for emails.
271 Also properly consider the content disposition for
274 * UI/MailerUI/UIxMailToSelection.m
275 Removed worthless code.
277 * UI/WebServerResources/MailerUI.css
278 CSS fix for table views.
280 2007-11-15 Ludovic Marcotte <ludovic@inverse.ca>
282 * UI/WebServerResources/MailerUI.js
283 We now check for empty selection and warn the
284 user about it when deleting messages
286 * SoObjects/Mailer/SOGoDraftObject.m
287 Correctly check for the presence of a subject
288 before attempting to forward a message from
291 * SoObjects/Mailer/SOGoMailObject+Draft.m
292 We no longer use "[Fwd: ]" but simply "Fwd:"
293 when forwarding email messages.
295 * SoObjects/SOGo/SOGoUser.m
296 Modified the default forwarding format to be
297 inline instead of "attachment".
299 * SoObjects/Mailer/SOGoDraftObject.m
300 We now create and use a NGMimeContentDispositionHeaderField
301 in order to avoid encoding the whole Content-Disposition
302 header in case a non-ASCII char is present!
304 2007-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
306 * SoObjects/SOGo/iCalEntityObject+Utilities.m ([iCalEntityObject
307 -findParticipant:user]): new method based on the one removed from
308 SOGoCalendarComponent below.
310 * SoObjects/SOGo/iCalEntityObject+Utilities.[hm]: new category
311 module for iCalEntityObject.
313 * SoObjects/Appointments/SOGoCalendarComponent.m
314 ([-findParticipant:user]): removed method.
316 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
317 -setContentString:newContent]): new accessor method.
319 -saveContentString:newContentbaseVersion:newBaseVersion]): invoke
320 -[self setContentString:].
322 * UI/MailPartViewers/UIxMailPartICalViewer.m
323 ([UIxMailPartICalViewer -authorativeEvent]): returns the most
325 ([-isLoggedInUserTheOrganizer]): make use of -[SOGoUser
328 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
329 -stringByConvertingCRLNToHTML]): fixed crashes due to overflows in
330 temporary buffer we are handing.
332 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
333 -setComponent:newComponent]): check that newComponent is non-nil
334 before replacing the default values.
335 ([UIxComponentEditor -calendarList]): privacy is already an ivar.
336 We don't need to refetch it.
338 2007-11-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
340 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
341 -fetchMailForReplying:sourceMailtoAll:toAll]): remove the current
342 user from the list of recipients and make sure no other address is
345 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
346 -stringByConvertingCRLNToHTML]): build the returned NSString
347 without the ending \0.
349 2007-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
351 * UI/MailPartViewers/UIxMailPartICalViewer.m
352 ([UIxMailPartICalViewer -acceptLink])
353 ([UIxMailPartICalViewer -declineLink])
354 ([UIxMailPartICalViewer -tentativeLink]): removed useless methods.
356 * UI/MailPartViewers/UIxMailPartICalAction.m
357 ([UIxMailPartICalAction -addToCalendarAction])
358 ([UIxMailPartICalAction -deleteFromCalendarAction]): new stub
361 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
362 -lookupImap4BodyPartKey:]): make use of the new method below.
364 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
365 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): new method
366 that returns an appropriate Class depending on a given mime type.
368 * UI/SOGoUI/UIxComponent.m ([UIxComponent -canCreateOrModify]):
369 new boolean accessor that determines whether someone can create
370 (i.e. modify a new entry) or modify an existing entry.
372 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
373 -lookupName:lookupNameinContext:localContextacquire:acquire]):
374 overriden method to bind looked up keys to So methods but by
375 avoiding a call to toOneRelationshipKeys. This will be the top
376 method of the chain, meant to override SoObject's behaviour.
378 * SoObjects/Contacts/SOGoContactLDAPFolder.m
379 ([SOGoContactLDAPFolder
380 -lookupName:objectNameinContext:lookupContextacquire:acquire]):
381 removed hack to prevent [super lookupName...] to read the entire
382 LDAP directory when looking up a record.
384 2007-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
386 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
387 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
390 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
391 ([UIxMailPartHTMLViewer -_attachmentIds]): the reference was one
392 character too short, which cause the images not to be displayed
393 sometimes and crashes to happen whenever the references on a
394 message were wrong (due to bugs in SOPE).
396 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
397 -hasMessageAttachment]): consider an attachment any content that
398 has a non-nil disposition.
400 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
401 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
402 fixed method to make use of the parameters instead of the useless
403 remains that weren't even initialized.
405 * SoObjects/Appointments/SOGoAppointmentObject.m
406 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
407 don't propagate the event among the attendees if this is not an
409 ([SOGoAppointmentObject -deleteWithBaseSequence:]): same as above.
411 * Main/SOGo.m ([SOGo -authenticatorInContext:context]): make use
412 of the new category method below.
414 * SoObjects/SOGo/WORequest+SOGo.m ([WORequest
415 -handledByDefaultHandler]): new method that returns whether this
416 is an "so" or alike request.
418 * SoObjects/SOGo/WORequest+SOGo.[hm]: new category module.
420 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
421 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
422 write the new folder's name in the folder cache.
424 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
425 -calendars]): same as below.
427 * UI/Contacts/UIxContactsListViewContainer.m
428 ([UIxContactsListViewContainer -currentContactFolderName]):
429 translate the display name if its the default one.
431 * SoObjects/Appointments/SOGoAppointmentFolder.m
432 ([SOGoAppointmentFolder -create]): overriden method that invokes
433 its ancestor and then activate itself within the user settings.
435 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
436 -appendPersonalSources]): when the user is the owner of the
437 current folder, we create the "personal" folder if it doesn't
438 exist by invoking "create".
440 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
441 -primaryFetchProfile]): when no row is returned, we initialize
442 "values" to a new dictionary. This solves a bug where the defaults
443 would not be initialized properly.
445 2007-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
447 * SoObjects/SOGo/SOGoGCSFolder.m ([-compare:otherFolder]): method
448 moved into the SOGoFolder class.
450 * SoObjects/Appointments/SOGoAppointmentObject.m
451 ([SOGoAppointmentObject -saveContentString:_iCalinUIDs:_uids]):
452 simplified method by directly building a similar appointment
453 object with the current folder as container.
455 * SoObjects/Contacts/SOGoContactLDAPFolder.m
456 ([SOGoContactLDAPFolder
457 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
458 take the content of an object returned by
459 lookupName:inContext:acquire: instead of the dictionary passed as
460 parameter since it represents a flattened entry return by
461 lookupContactsWithFilter...
463 * SoObjects/Contacts/SOGoFolder+CardDAV.m: NSObject+CardDAV
464 category renamed to SOGoFolder+CardDAV.
466 * SoObjects/SOGo/SOGoParentFolder.m: no longer a subclass of
467 SOGoObject, but of SOGoFolder instead.
469 * SoObjects/SOGo/SOGoUserFolder.m: no longer a subclass of
470 SOGoGCSFolder, but of SOGoFolder instead.
472 * SoObjects/Appointments/SOGoAppointmentFolder.m
473 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): fixed
474 to take the new SOGoParentFolder class into account. Also, create
475 the personal folder if it doesn't exist.
477 * SoObjects/SOGo/SOGoFolder.[hm]: new class module implementing
478 the parent of all SOGo containers.
480 * SoObjects/SOGo/SOGoGCSFolder.[hm]: SOGoFolder class renamed to
483 2007-11-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
485 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection
486 -getAddressesFromFormValues:_dict]): take NSString and NSArray
487 values. Ignore addresses with a length of 0.
489 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -mailAccounts]): we now
490 fetch the accounts from the user defaults and create default
493 2007-11-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
495 * UI/MailPartViewers/UIxMailPartTextViewer.m
496 ([UIxMailPartTextViewer -flatContentAsString]): re-added
497 conversion of line-break to sequences of HTML "BR", with a fast
500 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
501 -flatContentAsString]): simplified method now that we know
502 -[NSString stringWithData:usingEncodingNamed:] has a more robust
505 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
506 -showToAddress]): the answer is cached.
508 * UI/Common/UIxObjectActions.m ([UIxObjectActions +initialize]):
509 read "SOGoACLsSendEMailNotifications" from the user defaults to
510 determiner whether to send an email when a user is added or
511 removed from an object's acl.
513 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
514 -contentForEditing]): make sure the htmlContent flag is set to NO
515 when we select the textual part. Also we select only the relevant
518 * UI/MailerUI/WOContext+UIxMailer.m ([-mailSubjectFormatter]):
521 * UI/MailerUI/UIxMailView.m ([UIxMailView -messageSubject]): new
522 method replacing -objectTitle, written like the ones below.
524 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
525 -messageSubject]): rewrote method to act the one below.
527 * UI/MailPartViewers/UIxMailPartMessageViewer.m
528 ([UIxMailPartMessageViewer -messageSubject]): new method that
529 returns the decoded mail subject or "Untitled" if the subject is
532 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
533 -decodedSubject]): new method that invoke -decodedSubject from the
534 NSString and NSData class, depending on the identity of the
535 subject obtained from the envelope.
537 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
538 -subjectForReply]): take the value of -[SOGoMail decodedSubject]
539 instead of the subject of the envelope.
540 ([SOGoMailObject -filenameForForward]): same as above.
541 ([SOGoMailObject -subjectForForward]): same as above.
543 * SoObjects/Mailer/NSString+Mail.m ([NSString -decodedSubject]):
544 same as below for NSString.
546 * SoObjects/Mailer/NSData+Mail.m ([NSData -decodedSubject]): new
547 method that decodes the subject of a mail taken as an NSData
548 instance. Handling the exceptions and the badly formatted headers.
550 * UI/MailerUI/UIxSubjectFormatter.[hm]: dropped class module.
552 2007-11-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
554 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
555 -deleteEntriesWithIds:ids]): make sure the objects returned by
556 lookupName:... are not instances of NSException.
558 2007-11-03 Ludovic Marcotte <ludovic@inverse.ca>
560 * UI/Scheduler/UIxAppointmentEditor.m
561 Fixed monthly recurrences support.
563 2007-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
565 * SoObjects/Appointments/SOGoAppointmentObject.m
566 ([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
567 sent when modifying an event, when the event was considered
568 relevant. The same thing is now implemented for event deletion.
570 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
571 -primaryFetchProfile]): make sure that the deserialized "values"
572 is an instance of NSMutableDictionary, otherwise we override it
575 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
576 -contentForReply]): make use of the SOGoMailReply WO page.
578 * SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
579 from SOGoMailForward to handle mail replies instead. Only three
580 methods remaining: date, from and messageBody. The latter is
583 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
584 -fetchMailForForwarding:sourceMail]): fetch attachments for
587 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
588 -hasMessageAttachment]): initialize hasAttachment with "NO" to
589 avoid false positives.
591 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
592 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
593 set title to an empty string where the event/task summary is null.
595 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
596 -setHeaders:newHeaders]): make sure there is a message id in the
597 headers dictionary, if not, generate one.
598 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
599 message id from the existing draft.
600 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
601 message id in the header map.
603 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
604 -deleteFolderAction]): no longer prefix the target folder with
607 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
608 -listMailboxesAction]): base the folder type on the folder
611 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
612 -lookupName:_keyinContext:acquire:_acquire]): compare the full
613 traversal to the potential looked up folder with the special
614 folder names and return an object with the appropriate
615 SOGoMailFolder subclass.
617 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
618 -traversalFromMailAccount]): don't prepend the whole string with
621 * SoObjects/Mailer/SOGoMailAccount.m
622 ([-lookupSentFolder:_keyinContext:_ctx])
623 ([-lookupDraftsFolder:_keyinContext:_ctx])
624 ([-lookupTrashFolder:_keyinContext:_ctx])
625 ([-lookupFiltersFolder:_key:_ctx]): removed methods.
626 ([SOGoMailAccount -inboxFolderNameInContext:])
627 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
628 ([SOGoMailAccount -sentFolderNameInContext:])
629 ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
630 the resulting name with "prefix" since we might return a nested
632 ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
633 names with "/". Sorts the resulting folder list with
634 localizedCaseInsensitiveCompare: instead of
635 caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
636 that were removed, instead, we choose the appropriate class
637 depending on the folder name. And since we are in SOGoMailAccount,
638 we don't have to compute a traversal path to match the key with
641 -folderWithTraversal:traversalandClassName:className]): new method
642 that returns an instance of the specified SOGoMailFolder subclass,
643 based on the traversal path passed as parameter.
644 ([SOGoMailAccount -inboxFolderInContext:_ctx])
645 ([SOGoMailAccount -draftsFolderInContext:_ctx])
646 ([-sentFolderInContext:_ctx])
647 ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
648 -folderWithTraversal:andClassName: method described above.
650 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
651 -primaryFetchProfile]): make use of -[NSPropertyListSerialization
652 propertyListFromData:mutabilityOption:format:errorDescription:] to
653 deserialize the plist. Removed variant for libFoundation since it
654 should support the above.
655 ([AgenorUserDefaults -generateSQLForInsert])
656 ([AgenorUserDefaults -generateSQLForUpdate]): make use of
657 -[NSPropertyListSerialization
658 dataFromPropertyList:format:errorDescription:] to serialize the
659 plist. Removed variant for libFoundation since it should support
660 the above. Escape the backslashes from the resulting string.
662 2007-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
664 * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
665 SOGoMailFolder: SOGoMailSpecialFolder.
667 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
668 -traversalFromMailAccount]): overridden method that returns the
669 initialized mutable string.
670 ([SOGoMailAccount -allFolderPaths]): take the special folder paths
671 with -traversalFromMailAccount and reposition them at the
672 beginning of the list. By creating the special folders during that
673 request, we also make sure that the folder exists thanks to the
674 new initialisation method of the new "SOGoSpecialMailFolder"
676 ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
678 ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
680 ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
681 longer use lookupImap4Folder.
682 ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
685 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
686 -traversalFromMailAccount]): new method that returns the full
687 IMAP4 path to the object.
689 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
690 "superUsernames" after fetching it from the ud.
692 2007-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
694 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
695 -eventsListAction]): substitude the start and end date with their
696 UTC counterpart, taking into account the offset from UTC related
697 to those dates instead of the current one. This renders
698 -[UIxCalMainView -userUTCOffset] obsolete because the computings
699 that occured in javascript are now done server-side.
701 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
702 removed obsolete method.
704 * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
705 method converting html content to plain text.
707 * SoObjects/Mailer/NSString+Mail.[hm]: new category module
708 enhancing NSString with utility methods pertaining to mail handling.
710 * SoObjects/Mailer/SOGoMailObject.m
711 ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
713 -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
714 modified method to be always recursive and to take an array of the
715 accepted mime-types as parameter. The returned array now contains
716 the mime-type as well as the part keys.
718 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
719 -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
720 ([SOGoMailObject -contentForEditing]): rewrote method to take into
721 account the first text/plain part or the first text/html part
722 converted to text/plain with our new -[NSString htmlToText]
725 * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
726 "replyToAll:" with YES as parameter instead of NO.
728 2007-10-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
730 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
731 -davContentType]): ignore any possible parameter taken from the
732 mime-info of the body part.
734 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
735 -lastFirstMessageNumber]): new accessor that returns the first
736 message number of the last series of messages.
737 ([UIxMailListView -fetchKeys]): request the bodystructure for each
739 ([UIxMailListView -hasMessageAttachment]): extract the attachment
740 information from the message bodystructure.
742 2007-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
744 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
745 -GETAction:]): use the "application/octet-stream" mime type for
746 elements of type "application/x-xpinstall" to avoid confusing
749 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
750 ([UIxPreferences -itemMessageCheckText])
751 ([UIxPreferences -userMessageCheck])
752 ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
753 methods for handling the retrieval of new messages automatically.
755 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
756 that returns the interval of time between automatic message
759 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
760 -defaultAction]): now expunges the last folder marked for expunge.
762 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
763 -trashInContext:_ctx]): now marks the container folder for
766 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
767 -markForExpunge]): new method that marks the folder for the next
768 automatic expunge operation in the user settings.
769 ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
770 takes the last folder marked for expunge, expunges it and removes
771 it from the user settings, if it exists.
773 2007-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
775 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
776 -messageSubjectCellStyleClass]): added support for replied,
777 forwarded, forwarded and replied mails.
779 * SoObjects/Mailer/NSData+Mail.m ([NSData
780 -bodyDataFromEncoding:encoding]): new utility method that decodes
781 the NSData instance properly depending on the encoding string
784 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
785 -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
787 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
788 -stringForData:_datapartInfo:_info]): simplified by invoking
789 -bodyDataFromEncoding: from our new NSData category methods.
791 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
792 -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
793 where only the body part of the first of the keys fetched was
794 returned. Also decodes the body parts properly following their
797 * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
798 extends the NSData class with utility methods useful for handling
801 2007-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
803 * SoObjects/SOGo/NSArray+Utilities.m
804 ([NSArray -stringsWithFormat:format]): replace instances of NSNull
807 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
808 -keysWithFormat:keyFormat]): replace instances of NSNull with
811 * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
812 empty, use "c_cn" instead.
814 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
815 ([SOGoMailAccount -draftsFolderInContext:_ctx])
816 ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
817 of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
818 no always be specified from the root instead of sometimes from the
821 2007-10-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
823 * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
824 ([UIxPageFrame -productLocalizableStrings]): invoke the new
825 +[SOGoUser language] method if the user is nil.
827 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
828 that returns any generically-found language.
829 ([SoUser -language]): modified to call the above.
830 ([SOGoUser -language]): modified to call the above if the user
831 language has a null length.
833 * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
834 -davEntityTag]): modified to return the "hash" of the vCard string.
836 * UI/MailerUI/UIxMailActions.m ([UIxMailActions
837 -removeAllLabelsAction]): new method that removes all label flags
838 from the associated message.
839 ([UIxMailActions -addLabel1Action]
840 [UIxMailActions -addLabel2Action]
841 [UIxMailActions -addLabel3Action
842 [UIxMailActions -addLabel4Action]
843 [UIxMailActions -addLabel5Action]): new methods that adds label
844 flags to the associated message.
845 ([UIxMailActions -removeLabel1Action]
846 [UIxMailActions -removeLabel2Action]
847 [UIxMailActions -removeLabel3Action
848 [UIxMailActions -removeLabel4Action]
849 [UIxMailActions -removeLabel5Action]): new methods that removes
850 label flags from the associated message.
852 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
853 new accessor that returns the labels associated with the message.
855 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
856 -allFolderPaths]): new method that returns all the paths of all
857 the subfolders of the folder object.
858 ([SOGoMailFolder -allFolderURLs]): new method replacing
861 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
862 -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
863 role from its parent folder.
865 2007-10-19 Francis Lachapelle <flachapelle@inverse.ca>
867 * SoObjects/SOGo/SOGoUser.m
868 ([SOGoUser -rolesForObject:objectinContext:context]): allow
869 multiple super usernames to be defined. The user default
870 SOGoSuperUsername is renamed SOGoSuperUsernames and must be
873 2007-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
875 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
876 -userInContext:]): override the super method by returning
877 anonymous if the super returns nil.
879 * UI/Common/UIxPageFrame.m ([UIxPageFrame
880 -productLocalizableStrings]): new method that returns the
881 product-specific translation dictionary as a JSON hash.
882 ([UIxPageFrame -commonLocalizableStrings]): same as above but for
883 the "Common" framework.
884 ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
885 the requestor components to require additional Javascript files.
886 This is useful now that all the scripts are loaded at the end of
888 ([UIxPageFrame -additionalJSFiles]): new getter related to the
891 2007-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
893 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
894 implemented new web method.
896 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
897 -copyToFolderNamed:folderNameinContext:]): new method with the
898 code cut/pasted from -moveToFolderNamed:inContext:.
899 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
900 modified to use the code from -copyToFolderNamed:inContext:, which
901 is common between the two actions.
903 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
904 ([SOGoMailAccount -sentFolderNameInContext:])
905 ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
906 the user settings into account.
908 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
909 ([UIxMailFolderActions -setAsSentFolderAction])
910 ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
911 that change the purpose of the active folder to "Sent", "Drafts"
914 * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
915 returns the subject as quoted-printable.
917 * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
918 SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
919 the "aclMethod" method for the subsequent language-dependent
922 * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
923 returns the subject as quoted-printable.
925 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
926 -dealloc]): release item, aptStartDate and aptEndDate.
928 2007-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
930 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
931 -initWithName:newNameinContainer:newContainer]): the owner of a
932 shared folder is set to "nobody" by default.
934 * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
935 that returns whether the object has an owner or not.
937 2007-10-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
939 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
940 the folder even if the current user is not its owner.
942 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
944 * We now send advisory emails when folders
945 are created / deleted.
947 * Fixed the sending of advisory emails upon
948 ACL changes on folders.
950 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
952 * UI/Scheduler/UIxComponentEditor.m
953 Implemented event/task priority support.
955 * SoObjects/Contacts/SOGoContactGCSFolder.m
956 Added CardDAV support.
958 * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
959 Implemented From: based on LDAP results based on
960 the MailFieldNames attribute (an array) specified
961 in every LDAP-based authentication sources.
963 * UI/MailPartViewers/UIxMailPartTextViewer.m and
964 UI/WebServerResources/MailerUI.css
965 We avoid replacing "\r\n" and "\n" with <br /> and
966 rather use CSS capabilities for proper formatting.
967 This is _WAY_ faster on very large mails.
969 2007-10-10 Francis Lachapelle <flachapelle@inverse.ca>
971 * UI/Scheduler/UIxComponentEditor.m
972 ([UIxComponentEditor -componentCalendar]): returns the calendar
973 object of the current event.
975 2007-10-05 Ludovic Marcotte <ludovic@inverse.ca>
977 * UI/WebServerResources/MailerUI.js
978 We check if at least one message is selected
979 before performing a Reply/Reply All/Forward
981 * SoObjects/Appointments/SOGoAppointmentFolder.m
982 and others - implemented support for recurring
983 events (with some known limitations right now,
984 all soon to be fixed).
986 2007-10-04 Francis Lachapelle <flachapelle@inverse.ca>
988 * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
989 the constraint that a username can't start with a digit.
991 2007-10-02 Francis Lachapelle <flachapelle@inverse.ca>
993 * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
994 repository to Inverse's branch.
996 2007-09-28 Francis Lachapelle <flachapelle@inverse.ca>
998 * SoObjects/Mailer/SOGoDraftObject.m
999 ([SOGoDraftObject -isValidAttachmentName:_name]): removed
1000 constraint on space in file name.
1001 ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
1002 now removes from file name all characters preceding a backslash.
1003 This happens with IE7 because the complete attachment file path
1006 2007-09-25 Francis Lachapelle <flachapelle@inverse.ca>
1008 * SoObjects/Appointments/SOGoAptMailNotification.m
1009 ([SOGoAptMailNotification -appointmentURL]): set personal as the
1010 default calendar where to add the event.
1012 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1013 activate the SOGoUIxDefaultModule user defaults.
1015 2007-09-21 Francis Lachapelle <flachapelle@inverse.ca>
1017 * UI/SOGoUI/UIxComponent.m
1018 ([UIxComponent -shortUserNameForDisplay]): returns the string
1019 "wrongusernamepassword" when authentication failed.
1021 2007-09-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1023 * UI/MailPartViewers/UIxMailPartICalViewer.m
1024 ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
1025 entry of the Calendars parent folder.
1027 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1028 -messageSubject]): new accessor method to work-around a problem
1029 within SOPE where a subject could be returned as an NSData.
1031 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1032 -appendPersonalSources]): make sure the value of the "c_path4" of
1033 the returned rows are not NSNull, otherwise, discard them.
1035 2007-09-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1037 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1038 -compare:otherFolder]): new overriden method that compares two
1039 contact foldes based on their class and then transfer the control
1040 to the super method in SOGoFolder.
1042 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1043 ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
1044 compare two contact folders based on their class and then their
1047 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
1048 new method for sorting folders. The folders are compared based on
1049 their ownership, whether they are a main folder and finally
1050 depending on their display name.
1052 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1053 -pathArrayToSOGoObject]): do not reorder the paths if the third
1054 element is an instance of NSNull.
1056 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1057 -subFolders]): returns a sorted array using the "compare:"
1060 2007-09-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1062 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1063 -calendars]): also returns the owner of the listed folders.
1065 * SoObjects/Appointments/SOGoAppointmentFolder.m
1066 ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
1068 * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
1069 method into UIxFolderActions.
1071 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1072 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
1073 freebusy info from the "personal" calendar.
1075 * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
1076 -createFolderAction]): new standardized method for requesting
1077 folder creations among gcs-based modules.
1079 * UI/Common/UIxParentFolderActions.[hm]: new action class module.
1081 * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
1082 module, equivalent to the SOGoParentFolder's child
1083 SOGoContactFolders, but for calendars.
1085 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
1086 method that returns translated strings for controller bundles
1087 (same as what UIxComponent does for view bundles).
1088 ([SOGoObject -pathArrayToSOGoObject]): new method that returns
1089 the real path to a subscribed folder (if subscribed).
1090 ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
1091 ([SOGoObject -globallyUniqueObjectId]): new instance method
1092 calling its class equivalent.
1094 2007-09-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1096 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
1097 whether the user is logged in and if so, redirect to his/her
1099 ([SOGoRootPage -appendToResponse:inContext:]): removed useless
1102 2007-09-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1104 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1105 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1107 ([SOGoFolder -displayName]): new method.
1108 ([SOGoFolder -delete]): accept to proceed only if nameInContainer
1111 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1112 ([SOGoContactLDAPFolder
1113 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1114 renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
1116 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1117 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1118 removed method, reimplemented in SOGoFolder.
1119 ([SOGoContactGCSFolder -displayName]): removed method,
1120 reimplemented in SOGoFolder.
1121 ([-delete]): removed method, modified in SOGoFolder.
1123 * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
1124 a subclass of SOGoParentFolder.
1126 * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
1127 from SOGoContactFolders and modified to be more content-independent.
1129 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
1130 ([UIxMailActions -markMessageReadAction]): new methods moved from
1131 UIxMailListView and adapted to invoke the client object directly,
1132 since the previous versions had to to a lookup from the parent
1135 * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
1136 method into UIxMailActions.
1137 ([-markMessageReadAction]): same as above.
1138 ([-viewAction]): removed useless method.
1139 ([-javaScriptOK]): removed useless method.
1140 ([-isJavaScriptRequest]): removed useless method.
1141 ([-lookupActiveMessage]): removed useless method.
1143 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1144 -responseWithStatus:status]): new method that returns a WOResponse
1145 initialized with the specified status code.
1146 ([WODirectAction -responseWith204]): new method that invokes the
1147 above one with "204" as parameter.
1148 ([WODirectAction -redirectToLocation:newLocation]): rewrote method
1149 to make use of -responseWithStatus:.
1151 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
1152 method that returns a WOResponse initialized with the 204 status
1155 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
1156 always use a "not deleted" search qualifier along with the user
1157 qualifier (if present).
1159 2007-09-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1161 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1162 -contactSearchAction]): only return the records which have an
1165 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1166 -trashInContext:_ctx]): no longer expunge the mailbox after
1167 marking a message deleted.
1168 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
1171 * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
1172 ([-trashAction]): moved method into UIxMailActions.
1173 ([-moveAction]): moved method into UIxMailActions.
1175 2007-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1177 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1178 ([_UIxHTMLMailContentHandler
1179 -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
1180 comments from the CSS code, do not add the CSS code to the body
1181 content and remove references of body from the CSS declarations.
1182 ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
1183 ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
1184 common with cssContent in a different method and invoke it only
1187 * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
1188 instead of UIxPageFrame.
1190 2007-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1192 * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
1193 ([-appendToResponse:responseinContext:ctx]): commented out.
1194 ([SOGoRootPage -connectURL]): new accessor that returns the full
1195 url the the "connect" method.
1196 ([-connectAction]): rewrote method to return a properly formatted
1197 auth. cookie based on the username and password passed as
1200 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1201 set the value of the cookie to "discard" and set its expiration
1204 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1205 -preprocessCredentialsInContext:context]): consider the user
1206 anonymous if the cookie value is "discard".
1207 ([SOGoWebAuthenticator
1208 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1209 set the expiration date of the cookie to yesterday.
1211 * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
1212 returns the path to the application if the clientObject is not a
1215 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
1216 moved the requirement of authentication from the SOGo application
1219 * SoObjects/Appointments/SOGoAppointmentObject.m
1220 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
1221 check whether the new appointment object is still relevant before
1222 sending a notification.
1224 2007-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1226 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1227 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1228 render the login page through the SoDefaultRenderer.
1230 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
1231 -isPublicInContext:localContext]): new overriden method that
1234 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1235 -currentCalendarLogin]): replace css-unsafe characters with _.
1237 * UI/SOGoUI/UIxComponent.m ([UIxComponent
1238 -shortUserNameForDisplay]): simplified method.
1239 ([-user]): removed method since [context activeUser] is as useful.
1241 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1243 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1244 set the cookie path to "/".
1246 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
1247 authenticator based on the request handler key. "dav" returns the
1248 SOGoDAVAuthenticator, anything else returns the Web authenticator.
1250 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
1251 "SOGoAuthenticator".
1253 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
1254 implementing a subclass of SoCookieAuthenticator, designed for
1255 web-based cookie authentication of users.m
1257 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1258 new method that resets the authentification cookie.
1260 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1262 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
1263 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
1264 didBind to NO to make sure no false authentication is returned if
1265 the bind operation is not executed.
1267 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1269 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
1270 "In-Reply-To" header field when replying.
1272 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
1273 table field names that are queried.
1275 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1276 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
1277 add the "c_" prefix to the quick table field names that are
1280 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1282 * SoObjects/Appointments/SOGoAppointmentFolder.m
1283 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
1284 "personal" to the ocs path of the appointment folder.
1286 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1287 -flatContentAsString]): use latin1 when the encoding is not
1288 specified, and to reencode data chunk which were not correctly
1289 decoded with the original charset.
1291 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
1292 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
1293 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
1294 ([SOGoAppointmentFolder
1295 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
1296 override those methods to use the "personal" additional directory.
1298 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
1299 append "/personal" to the calendar path to simulate a single
1300 calendar in a choice of many.
1302 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1303 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
1304 methods back here. Moved the folder existence check here, and do
1305 it on self only when the lookup happens for a non-folder object.
1306 This permits to accept entries for folders with parents who
1309 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1311 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1312 -shouldTakeValuesFromRequest:requestinContext:context]): same as
1315 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1316 -shouldTakeValuesFromRequest:requestinContext:context]):
1317 redesigned method since any method called can be received from a
1318 POST or a GET. Instead we check the method call itself and we
1319 accept only if it has the "save" prefix.
1321 * SoObjects/Appointments/SOGoAptMailNotification.m
1322 ([SOGoAptMailNotification -getSubject]): returns the subject an a
1323 quoted-printable encoded string, if needed.
1325 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1326 -asQPSubjectString:encoding]): moved method into
1327 NSString+Utilities.m.
1329 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1331 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1332 -messageForwardingList])
1333 ([UIxPreferences -itemMessageForwardingText])D
1334 ([UIxPreferences -userMessageForwarding])
1335 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
1336 new template methods for manage the user preference regarding
1339 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
1340 algorithm to return, in order, the user's defined language or the
1341 first browser language or, finally, the default language.
1342 ([SOGoUser -messageForwarding]): new method that returns the user
1343 preference for message forwarding: "inline" or "attached",
1344 defaulting to "attached".
1346 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1347 -contentForInlineForward]): new method that returns the content of
1348 the message for inline forwarding based on the SOGoMailForward
1351 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1352 -fetchMailForForwarding:sourceMail]): check the user preference
1353 for message forwarding and compose inline forwarded messages if required.
1355 * SoObjects/Appointments/SOGoCalendarComponent.m
1356 ([SOGoCalendarComponent
1357 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1358 now use a template based on the language returned from the
1361 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
1362 a subclass of SOGoMailForward for English locale.
1364 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
1365 a subclass of SOGoMailForward for French locale.
1367 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
1368 helps build template for inline forwarded messages.
1370 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1372 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
1373 to handle "<var:if-ie>" template tags.
1375 * UI/SOGoElements: new extension bundle containing sogo-specific
1378 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1379 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
1380 selected in the dialog.
1381 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
1382 first category, if ever, of the calendar entity.
1384 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1385 -composeAction]): restored method since it is needed by the
1388 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1389 -composeAction]): the address fields should be arrays and not
1392 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
1393 that returns the build date of SOGo in the template.
1395 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1397 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1398 -_flattenedRecords:records]): when the c_cn field is empty,
1399 returns set a formatted string with the concatenation of
1400 c_givenname and c_sn as the displayName.
1402 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1403 -isValidMailAccountName:_key]): prevent unknown accounts from
1406 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1407 -pathToAttachmentObject]): we no longer need the filename
1408 extension for SoLookup...
1410 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1411 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
1412 filename to have an extension, and thus accept any filename.
1414 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1415 -currentCName]): new method that returns the c_name of the
1416 contact, correctly escaped to be passed by url afterwards.
1418 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1419 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
1420 instance of [self decodedFlatContent] instead of the buggy
1421 NSString from [super flatContentAsString] to the parser.
1423 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1425 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
1426 new category method to reponds to the "delete" web command on
1428 ([UIxMailActions -deleteAttachmentAction]): new category method to
1429 reponds to the "deleteAttachment" web command on drafts, taking
1430 the "filename" url parameter into account.
1432 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1433 -contentForEditing]): new method that retrieve the editable mail
1435 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
1436 returns the body keys for attached files (parts with a "filename"
1439 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1440 -asQPSubjectString:encoding]): do not change the string if the
1441 encoded string has the same length (which means it is already
1443 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
1444 that retrieve a draft along with its attachments for editing.
1445 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
1446 choke if the "to" header field is empty.
1447 ([SOGoDraftObject -delete]): new method to delete the draft folder
1448 whenever operations are done.
1450 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1452 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
1453 useless stub method, of which the intention was implemented in
1455 ([-lookupSentFolderUsingAccount]): removed obsolete method.
1456 ([-selectedMailIdentity]): removed obsolete method.
1457 ([-lookupSentFolderUsingFrom]): removed obsolete method.
1458 ([-storeMailInSentFolder:_path]): removed obsolete method, of
1459 which the mechanism has been put in -[SOGoDraftObject sendMail]
1461 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
1462 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
1463 adapted algorithms to the new SOGoDraftObject methods.
1464 ([-deleteAction]): removed method since local draft objects cannot
1465 be removed by the user.
1467 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1468 -expungeAction]): new method replacing the one previously found in
1470 ([UIxMailFolderActions -createFolderAction])
1471 ([UIxMailFolderActions -renameFolderAction])
1472 ([UIxMailFolderActions -deleteFolderAction])
1473 ([UIxMailFolderActions -emptyTrashAction])
1474 ([UIxMailFolderActions -subscribeAction])
1475 ([UIxMailFolderActions -unsubscribeAction]): error situations
1476 should have http return code 500 instead of 403.
1478 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1479 -composeAction]): new method replacing the one previously in
1482 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1483 -imap4URLString]): removed overriden method (see below).
1485 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
1486 cache the mailbox acl.
1487 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
1488 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
1490 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
1491 the new method of determining the users mail accounts.
1493 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
1494 longer adds a "/" at the end of the string (the default for
1495 folders), therefore this will be overriden in SOGoMailFolder
1496 rather than in SOGoMailObject.
1498 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
1499 method, moved into the new UIxMailActions module class.
1501 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
1502 -newDraft]): new method that returns a new SOGoDraftObject
1503 instance with a unique filename based on the current timestamp and
1504 the "newDraft" prefix.
1506 -lookupName:nameinContext:localContextacquire:acquire]): overriden
1507 method by detecting local drafts with their "newDraft" prefix.
1508 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
1510 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
1511 from scratch by making it a subclass of SOGoMailFolder.
1513 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
1516 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
1519 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
1522 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
1523 new method, initializing the new ivars: IMAP4ID, headers, text,
1524 sourceURL and sourceFlag.
1525 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
1526 ([-_ensureUserSpoolFolderPath])
1527 ([-saveMimeMessageToTemporaryFileWithHeaders:])
1528 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
1529 ([-deleteTemporaryMessageFile:], [-delete], [-content])
1530 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
1531 ([-uid], [-flags], [-size], [-envelope]): removed methods.
1532 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
1534 ([SOGoDraftObject -setSourceURL:newSourceURL])
1535 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
1536 methods to store the url of the original message between accesses
1537 so that, depending on the action taken (forward or reply), the
1538 correct flag can be given.
1539 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
1540 the imap4 id that is returned for the message whenever it is saved
1541 into the drafts folder.
1542 ([SOGoDraftObject -save]): new method that takes in charge the
1543 saving of the message in the IMAP drafts folder.
1544 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
1545 new method that fills the original data of the new message with
1546 the reply content of the original message.
1547 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
1548 above for message forwarding.
1549 ([-spoolFileManager]): removed useless method (only returned the
1550 default filemanager...)
1551 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
1552 the resulting message as an NSData chunk.
1554 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
1555 containing a rewrite of the mail action methods found in
1556 UI/Mailer/, that needed to be put in the SOGoMailObject class.
1557 ([SOGoMailObject -subjectForReply]): new method that returns a
1558 subject suitable for replies.
1559 ([SOGoMailObject -contentForReply]): new method that returns the
1560 textual content of an email, quoted for replying.
1561 ([SOGoMailObject -filenameForForward]): new method that returns
1562 the name of the filename that should contain the forwarded
1563 message, based on its subject.
1564 ([SOGoMailObject -subjectForForward]): explicit.
1566 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1568 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1569 -mailAccounts]): rewrote method to return the name of the mail
1570 accounts now available with the -[SOGoUser mailAccounts] method.
1571 ([UIxMailMainFrame -showLinkBanner]): removed method.
1572 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
1573 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
1574 ([UIxMailMainFrame -rootURL]): removed method.
1575 ([UIxMailMainFrame -userRootURL]): removed method.
1576 ([UIxMailMainFrame -calendarRootURL]): removed method.
1577 ([UIxMailMainFrame -contactsRootURL]): removed method.
1578 ([UIxMailMainFrame -hasErrorText])
1579 ([UIxMailMainFrame -errorText])
1580 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
1581 ([-composeAction]): removed method. Now provided by
1582 UIxMailAccountActions.
1583 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
1584 ([UIxMailMainFrame -hideFolderTree]): removed method.
1585 ([UIxMailMainFrame -treeRootClassName]): removed method.
1586 ([UIxMailMainFrame +initialize]): removed method.
1587 SOGoMailTreeRootClass userdefaults will no longer have any effect.
1589 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1590 -redirectToLocation:newLocation]): new method that implements the
1591 same functionality as WOComponent.
1593 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
1595 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
1596 method that returns whether the current mail is store in the
1597 drafts folder hierarchy.
1599 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
1600 ([-primaryEmail]): removed method.
1601 ([SOGoUser -primaryIMAP4AccountString]): removed method.
1602 ([SOGoUser -mailAccounts]): new method that returns an array
1603 containing description dictionaries for all the user mail
1604 accounts. Each account also contain the user's identities for that
1606 ([SOGoUser -allIdentities]): new utility method that returns all
1607 the user identities on all accounts.
1608 ([SOGoUser -primaryIdentity]): new method return the first
1609 identity of the first account.
1611 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
1613 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1614 -isInDraftsFolder]): returns NO.
1615 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
1617 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
1619 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1620 -isInDraftsFolder]): new method that detects if self is contained
1621 by the drafts folder by calling itself on the container object.
1623 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
1625 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
1626 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
1627 return the name of the mail accounts now available with the
1628 -[SOGoUser mailAccounts] method.
1630 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
1633 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
1636 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1637 -keysWithFormat:format]): method that forward the method of the
1638 same name to each member of the array, considering they all are
1639 instances of NSDictionary.
1640 ([NSArray -objectsForKey:key]): same principle as above.
1641 ([NSArray -flattenedArray]): new method that transforms an array
1642 of arrays into a single array containing all the elements of the
1645 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1646 -keysWithFormat:keyFormat]): new method inspired by the python
1647 string formatting system and which replaces occurences of "%{key}"
1648 by the corresponding keys.
1650 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1652 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
1653 sql script before the generic one when initializing mandatory
1656 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1658 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1659 -pureEMailAddress]): new utility method inspired by the
1660 "_rawSender" private method in SOGoDraftObject, which it now
1663 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
1664 provides a common API for sending emails, no matter what the
1667 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1669 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1670 -quotasAction]): invoke "relativeImap4Name" instead of
1671 "nameInContainer" since the latter also returns the "folder"
1674 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1675 -listMailboxesAction]): declare the output as text/plain in UTF-8.
1677 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1678 -deleteFolderAction]): fixed the url of the destination folder.
1680 * Main/SOGo.m ([SOGo +initialize]): show the build date and
1681 hostname at startup.
1683 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1685 * SoObjects/Appointments/SOGoCalendarComponent.m
1686 ([SOGoCalendarComponent
1687 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1688 set the mail date to the current date string returned by our
1689 rfc822DateString extension method.
1691 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1692 -_gcsFoldersFromFolder:): ignore the personal folders who are
1693 returned but don't really exist.
1695 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
1697 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
1698 has to return only one element.
1700 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1702 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1703 -content]): new method returning the decoded content of the
1704 corresponding attachment as an NSData instance.
1705 ([UIxMailPartViewer -filename]): if the "filename" parameter of
1706 the metadata parameterList is empty, try to find out the filename
1707 from the "disposition" metadata returned with the BODYSTRUCTURE
1710 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1711 -composeAction]): prefix the INBOX folder with "folder".
1713 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
1714 -relativeImap4Name]): return nameInContainer stripped from its
1715 first 6 characters since all folder names are prefixed with
1718 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1719 -imap4URLString]): invoke -relativeImap4Name instead of
1720 "nameInContainer" since the former will return the fixed IMAP4
1721 foldername and the latter the SoObject name.
1723 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1724 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
1726 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
1727 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1728 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
1729 ([SOGoMailAccount -sentFolderNameInContext:])
1730 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
1731 names with "folder".
1732 ([SOGoMailAccount -inboxFolderInContext:_ctx])
1733 ([SOGoMailAccount -sentFolderInContext:_ctx])
1734 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
1735 the folder names with "folder" since they are prefixed earlier.
1737 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1739 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1740 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
1741 all starts with "folder".
1743 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
1744 longer declare security info from here.
1746 * SoObjects/Mailer/SOGoMailFolder.m
1747 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
1748 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
1749 folder names now always start with "folder".
1751 * SoObjects/Mailer/SOGoMailAccount.m
1752 ([-lookupName:inContext:acquire:]): folder names now always start
1755 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1757 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
1758 -forwardAction]): adapted to the new saveAttachment:withMetadata:
1761 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
1762 code to save the attached filenames with the filename returned by
1763 the web server as well as their mime types.
1765 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
1766 ([UIxMailPartMessageViewer -toAddresses])
1767 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
1768 the corresponding fields separated with a ", " (if needed).
1770 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1771 -saveAttachment:_attachwithMetadata:metadata]): new method
1772 replacing -saveAttachment:withName: and which takes a dictionary
1773 as parameter with the filename and the mime type of the
1775 The mimetype is then saved in a hidden text file.
1776 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
1777 take the mime type from the hidden text file related to the
1780 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
1781 ([SOGoContactGCSFolder
1782 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1783 return records if the db records are > 0 and not just > 1...
1785 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1787 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
1789 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
1791 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1792 ([SOGoContactLDAPFolder
1793 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1794 translate the returned records to a normalized form.
1796 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1797 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1798 translate the returned records to a normalized form.
1800 * UI/Scheduler/UIxCalListingActions.m,
1801 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
1802 SoObjects/SOGo/AgenorUserDefaults.m,
1803 SoObjects/Contacts/SOGoContactGCSFolder.m,
1804 SoObjects/Appointments/SOGoAppointmentFolder.m,
1805 OGoContentStore/OCSiCalFieldExtractor.m,
1806 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
1807 table fields with "c_".
1809 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1811 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
1812 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
1813 the application settings. If set, both limit will influence the
1814 maximum size of the resultsets and the time taken to solve them.
1815 ([LDAPSource -_initLDAPConnection]): initialize the limits.
1817 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1819 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
1820 method that declares the DAV namespace related to CardDAV.
1821 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
1822 method that declares the "access-control" and "addressbook-access"
1823 classes to the list.
1825 * SoObjects/Appointments/SOGoAppointmentFolder.m
1826 ([-lookupActionForCalDAVMethod:]): removed method.
1827 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
1828 method that declares the DAV namespace related to CalDAV.
1830 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
1831 optional method for subclasses which handle specific extensions to
1832 the DAV protocol: CardDAV or CalDAV.
1834 -lookupName:lookupNameinContext:localContextacquire:acquire]):
1835 new overriden method that handles dav invocations for extensions
1836 to DAV by returning an appropriate SoSelectorInvocation.
1838 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1839 -asDavInvocation]): new method returning a dictionary with a "ns"
1840 key representing the dav namespace and a "method" key representing
1841 the dav method name of the request.
1843 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1844 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
1846 ([UIxPreferences -shouldDisplayPasswordChange]): new template
1847 method that returns the value of SOGoUIxUserCanChangePassword.
1849 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1850 scan the value of SOGoUIxDefaultModule. If not set, the default
1851 module defaults to "Calendar".
1852 ([SOGoUserHomePage -defaultAction]): redirect the user to the
1853 value of "SOGoUIxDefaultModule".
1855 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1857 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1858 -contactInfos]): cache the results to avoid multiple invocations.
1860 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1861 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
1862 really should return something or if we fake to return nil...
1864 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1866 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
1867 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
1868 default is set to "bypass".
1870 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1871 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
1872 when authMethod is set to "bypass" from now on. This would avoid a
1873 security concern with a default installation of SOGo.
1874 AuthentificationMethod is now prefixed with "SOGo" for better
1877 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1879 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1880 -quotasAction]): new method that returns a json representation of
1883 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1885 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1886 -imap4URL]): rewrote method to support accented mailbox names.
1887 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
1888 SOGoAuthenticator's passwordInContext:.
1890 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1891 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
1892 start and due dates to nil if hasStartDate and hasDueDate are
1895 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1896 -passwordInContext:context]): made method public.
1898 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1899 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
1900 to false to avoid a null violation.
1902 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1904 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1905 -contentAsString]): returns the message encoded in ISO Latin 1
1908 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
1909 SOGoSuperUsername user defaults.
1910 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
1912 ([SOGoUser -rolesForObject:objectinContext:context]): if the
1913 current user is the superuser, grant him/her the "owner" role.
1915 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1916 the folder only if the current user is the owner of the future
1919 * SoObjects/Appointments/SOGoCalendarComponent.m
1920 ([SOGoCalendarComponent -contentAsString]): we return the content
1921 based on the permissions returned by the security manager instead
1922 of by looking at the user roles.
1924 * SoObjects/Appointments/SOGoAppointmentFolder.m
1925 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
1926 folders of the user to whom this folder belongs instead of the
1927 active user. This way, a delegate user will be able to have the
1928 same view that the original user has if he connects from his user
1931 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
1932 user exists before creating the SOGoUserFolder instance. If not,
1935 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
1936 return the message source code in plain text.
1938 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1939 -contentAsString]): returns the message encoded in UTF8.
1941 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1943 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
1944 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
1945 leading tagname into account when serializing the element values.
1947 * Main/SOGoProductLoader.m: only load bundle directories ending
1948 with the "SOGo" extension.
1950 * Main/SOGo.m ([SOGo
1951 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
1952 result set if the query has caused no exception. Otherwise we get
1953 an "evaluation is in progress exception".
1955 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1957 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1958 -generateSQLForInsert]): initialize error to nil before the
1959 serialization. Otherwise the method can get confused if it ever is
1960 initialized to something else.
1962 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
1963 -folderIsMandatory]): returns NO unconditionnally.
1965 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1966 -appendPersonalSources]): add the "personal" folder to the list of
1967 user folders even if it doesn't exist, so that it is created when
1968 the user accesses it.
1970 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1971 -folderIsMandatory]): returns YES if nameInContainer is set to
1972 "personal", which is the default address book.
1974 * SoObjects/Appointments/SOGoAppointmentFolder.m
1975 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
1976 users must have one Calendar folder (one and only one).
1977 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
1978 escaping '\' so make the carriage return a real one. This way,
1979 PgSQL 8 won't complain about escaping the string.
1981 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
1982 method that create the folder if considered mandatory.
1983 ([SOGoFolder -folderIsMandatory]): new method that determines
1984 whether the folder should be created automatically or not. To be
1985 overriden by subclasses.
1987 * Main/SOGo.m ([SOGo -run]): override method and create the
1988 missing system tables if needed.
1990 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1992 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
1993 -mailDateFormatter]): returns the user's date formatter.
1995 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
1996 applies the user timezone to the date object before returning it.
1998 * UI/Common/UIxSortButton.m: removed useless class module.
2000 * UI/Common/UIxSortableTableHeader.m: removed useless class
2003 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2004 -contactInfos]): use the "asc" url parameter instead of "desc" to
2005 determine the ordering.
2006 ([-sortOrdering]): removed method.
2007 ([UIxContactsListView -init]): removed the "searchText" ivar.
2008 (general): the template no longer use the UIxSortableTableHeader
2011 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
2012 -defaultSortKey]): default sort following the messages arrival
2013 instead of their date.
2014 ([-isSortedDescending]): removed method.
2015 ([-imap4SortOrdering]): use the "asc" url parameter instead of
2016 "desc" to determine the ordering.
2017 (general): the template no longer use the UIxSortableTableHeader
2020 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2022 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
2024 ([-setQualifier:_msg], [-qualifier]): removed methods.
2025 ([UIxMailListView -defaultAction]): added code to handle the
2026 search criteria and value passed as url parameters. Also, we now
2027 handle the same search criterias as Thunderbird/Icedove.
2029 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2031 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
2032 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
2033 the string instead of the string itself.
2034 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
2036 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
2037 bool var "acceptAnyUser" that is set when the AuthenticationMethod
2038 user default is nil.
2039 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
2040 unconditionnally returns an instance whenever acceptAnyUser is set.
2042 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2044 * Main/sogod.m (main): prevent SOGo from running as root.
2046 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2048 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2049 -setCurrentPassword:newPassword]): new stub method.
2050 ([SOGoUser -dateFormatterInContext:context]): new method that
2051 returns an instance of SOGoDateFormatter configured based on the
2054 * UI/Common/UIxPageFrame.m ([UIxPageFrame
2055 -relativePreferencesPath]): new method.
2057 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
2058 removed useless method.
2060 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
2061 different configurable formats (long and short date + time).
2063 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
2065 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2066 -isInternetRequest]): removed method.
2068 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2069 -jsonRepresentation]): new method with an explicit name.
2071 * UI/PreferencesUI/product.plist: new bundle that provides a web
2072 ui for handling user defaults.
2074 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
2076 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
2078 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
2080 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2082 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
2084 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2086 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
2087 -compareEventsAscending:otherEvent]): no longer use compare: on
2088 the time objects since one of them could be an NSNull, which
2089 crashes when comparing with anything.
2091 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2092 -eventsListAction]): sort events from here.
2093 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
2095 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
2096 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
2098 * SoObjects/Appointments/SOGoAppointmentFolder.m
2099 ([SOGoAppointmentFolder
2100 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
2101 no longer sort elements from here.
2103 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2105 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2106 -aclsForUser:uid]): implemented method by forwarding the request
2107 to the container. This fixes a bug where users could no longer
2108 read emails from shared folders.
2110 * SoObjects/Appointments/SOGoCalendarComponent.m
2111 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
2112 here, but rather in its parent class.
2114 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
2115 -stringForSecondsSinceThe70s:seconds]): new utility method.
2117 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2118 -eventsListAction]): no longer reduce the end day of one day for
2119 all day events since everything has been fixed in
2120 OCSiCalFieldExtractor.
2122 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2123 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
2124 the end date of all day events of 1 so that they stay on their
2127 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2129 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
2131 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
2133 ([-fetchCoreTasksInfos]): removed method.
2135 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2136 -init]): initialize an instance of SOGoDateFormatter.
2137 ([UIxCalListingActions -eventsListAction]): the display start and
2138 end dates are added to the listing for each event.
2140 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
2142 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2143 -isAllDay]): returns YES if the "hm" url parameter is set to
2145 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
2146 is displayed one day earlier.
2148 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2150 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2151 -_setupContext]): take the range of dates specified by the popup
2154 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
2155 WODirectAction that returns WOResponse objects with the events or
2156 todos satisfying the parameters passed in the url.
2158 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2159 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
2160 "isAllDay" into account and compute the amount of days to pass to
2163 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
2165 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
2166 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
2167 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
2168 new method that returns a json-formatted array of the visible tasks
2169 for the current user.
2171 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2173 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
2174 object must be present in the list of UIDs we delete the object
2175 from. Otherwise Calendar objects having no organizer and no
2176 attendees will remain in their owner's Calendar.
2178 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2179 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
2180 first 3 elements of the path array if the url returned by
2181 baseURLInContext: returns a hostname.
2183 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2184 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
2185 nil, in which case a crash happens when calling hasPrefix:.
2186 ([SOGoMailFolder -_sharesACLs]): same as above.
2187 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
2188 otherUsersFolderName is nil, we return nil.
2189 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
2190 nil from [self otherUsersPathToFolder], we return nil too.
2192 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2194 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2195 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
2196 the result of [self baseURLInContext:] to avoid a double escaping
2197 in the resulting string.
2199 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
2200 the user has the "ObjectReader" role on the parent container, then
2201 he is granted the "ObjectViewer" role on this object. Same for
2202 "ObjectEraser", although this might change later.
2204 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2205 -toolbar]): determine the toolbar filename based on the
2206 permissions declared by the securitymanager. The role mechanism
2207 has been adjusted on a lowerlevel so we can simplify the code.
2209 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2210 -initWithName:newNameinContainer:newContainer]): read the content
2211 directly from here. That way we can determine whether the object
2213 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
2214 the ObjectCreator role is enabled, we also grant the ObjectEditor
2215 role to the current user.
2217 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
2218 changed the method paradigm to only return HTTP code 204. Not test
2219 is done whatsoever since the security manager does it for us.
2221 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
2222 removed method because the same exists in UIxFolderActions.m
2224 * UI/Contacts/UIxContactsUserRightsEditor.m
2225 ([UIxContactsUserRightsEditor
2226 -setUserCanReadObjects:userCanReadObjects]): new method.
2228 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
2229 "FolderEraser" and special permission "Access Object". Removed
2230 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
2231 can be used instead. Removed "FolderReader" since it is useless.
2233 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2234 -vCard]): directly use the "content" ivar since it is initialized
2235 during object creation.
2237 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2238 ([SOGoContactLDAPFolder -init]): no longer handle the
2239 nameInContainer no the container ivars. They were removed because
2240 this class is a descendant of SOGoObject which already has them.
2241 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
2242 returning "displayName".
2243 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
2246 * SoObjects/Appointments/SOGoCalendarComponent.m
2247 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
2248 ([SOGoCalendarComponent -findParticipant:user]): new name for
2249 method "participant:".
2250 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
2251 findparticipant but taking a uid string as parameter.
2252 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
2253 iCalendar automatically. Instead, this is done only when the user
2254 is a "date and time viewer".
2255 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
2256 (modifier and responder) into account by compiling them with the
2259 * SoObjects/Contacts/SOGoContactFolder.h: removed
2260 "nameInContainer" from the list of required methods.
2262 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
2263 -davContentType]): returns "text/calendar".
2265 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2266 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
2267 groupdav resource-type.
2269 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2270 -davContentType]): same as below.
2272 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2273 -initWithName:newNameinContainer:newContainer]): new overriden
2274 method setting the custom owner directly.
2276 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2277 -davContentType]): same as below.
2279 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2280 -davContentType]): same as below.
2282 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
2283 declare "httpd/unix-directory".
2285 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
2286 "UTC" as fallback timezone instead of "Canada/Eastern".
2287 ([-hasEmail:email]): make use of the new NSArray's
2288 containsCaseInsensitiveString: method.
2290 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2291 -davContentType]): declare "message/rfc822" as content type.
2293 * SoObjects/Appointments/SOGoAppointmentFolder.m
2294 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
2296 ([SOGoAppointmentFolder
2297 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
2298 ([-fetchContentObjectNames]): commented out method since it was
2299 usefull only for testing Funambol.
2301 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
2302 -containsCaseInsensitiveString:match]): an enhanced version of
2305 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
2307 ([-showMarkDeletedButton]): removed useless method.
2308 ([-showTrashButton]): removed useless method.
2310 * SoObjects/Appointments/iCalEntityObject+SOGo.m
2311 ([iCalEntityObject -userIsParticipant:user]): new proxy method
2312 that invoked isParticipant on self for each possible email
2313 addresses of the user passed as parameter.
2314 ([iCalEntityObject -userIsOrganizer:user]): same as above.
2316 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
2319 * SoObjects/Appointments/SOGoAppointmentObject.m
2320 ([SOGoAppointmentObject
2321 -saveContentString:contentStringbaseVersion:baseVersion]): remove
2322 method since an event may not have an organizer.
2324 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2325 -GETAction:localContext]): clarified method. Added support for
2326 content-type (thanks to Helge Hess).
2327 ([SOGoObject -initWithName:_nameinContainer:_container]):
2328 initialize and retain the owner.
2329 ([SOGoObject -davContentType]): returns "text/plain".
2331 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2333 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2334 -addUserInAclsAction]): send an acl addition mail.
2335 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
2338 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2339 -_realActionWithFolderName:folderDict]): handle the possible
2340 presence of the "mail-invitation" url parameter. If present, the
2341 user will be redirected to the relevant folder.
2343 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
2344 ([SOGoUser -language]): new method that returns the user's
2345 preferred language, or the system's if none has been set yet.
2347 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
2348 that returns the full dav url to self.
2349 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
2350 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
2351 returns the full so url to the base of the SOGo module to which
2352 self belongs, and for the specified user.
2353 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
2354 but for the current user.
2355 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
2356 required by the acl advisory templates and which returns a link
2357 the target user can click to activate its new subscription.
2358 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
2359 but for inclusion of the application/x-sogo-notification part,
2360 which will be handled by the Lightning enhancer plugin.
2362 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
2363 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
2364 do nothing yet since imap folder subscription is not handled yet.
2366 * SoObjects/SOGo/SOGoContentObject.m
2367 ([-hasSupportForDefaultRoles]): removed method.
2369 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2370 -getFullEmailForUID:uid]): new method that returns the username +
2373 * SoObjects/Appointments/SOGoCalendarComponent.m
2374 ([SOGoCalendarComponent +initialize]): the default language for
2375 mail templates is now set to English.
2377 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
2378 SOGoACLAdvisory implementing the french template for user removal
2381 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
2382 SOGoACLAdvisory implementing the french template for user
2385 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
2386 SOGoACLAdvisory implementing the english template for user removal
2389 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
2390 SOGoACLAdvisory implementing the english template for user
2393 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
2394 supercall of all the acl advistory templates. The model is based
2395 on SOGoAptMailNotification except that the template encapsulates
2396 the message to be sent. Later, we might create a superclass common
2397 to all template-based emails.
2399 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2400 -addRange:newRange]): new method that store a string
2401 representation of the NSRange passed as parameter.
2402 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
2403 any range contained in self intersect with the one passed as parameter.
2405 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
2406 store ranges in an array to prevent them from intersecting with
2407 each other during the passes.
2409 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2411 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2412 -primaryFetchMailboxInfo]): useless method. Removed.
2414 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2416 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2417 -toManyRelationshipKeys]): invoke [self subfolders].
2418 ([SOGoMailFolder -subfolders]): new method containing what used to
2419 be in toManyRelationshipKeys.
2420 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
2423 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2424 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
2425 named and at the beginning of which we put the predefined folders.
2427 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2428 -emptyTrashAction]): new method inspired by a similar one from
2429 UIxMailListView, to which we added the ability to remove
2432 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
2433 method. Replaced with a similar one in UIxMailFolderActions.
2435 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2436 -renameFolderAction]): implemented method.
2437 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
2438 specified folder. Instead, we put it in the trash folder.
2440 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
2441 method, replaced with a similar method in the new
2442 UIxMailFolderAction class module.
2443 ([-deleteFolderAction]): idem.
2445 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2446 -createFolderAction]): new method implementing subfolder creation.
2447 ([UIxMailFolderActions -renameFolderAction]): new method
2448 implementing subfolder renaming (basic implementation to be
2450 ([UIxMailFolderActions -deleteFolderAction]): new method
2451 implementing folder deletion.
2453 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
2454 web actions related to the handling of imap folder.
2456 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2458 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2459 -ownerInContext:localContext]): overriden method because we are an
2460 IMAP4 client and we need a bit more intelligence to deduce the
2461 owner of the current folder.
2462 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
2463 return an NSException so we need to be careful here to avoid a
2465 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
2466 NSException so we need to be careful here to avoid a crash.
2468 * SoObjects/Mailer/SOGoMailAccounts.m
2469 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
2470 there is no longer any concept of Intranet or Internet connection
2473 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2474 -sharedFolderName]): new method.
2475 ([SOGoMailAccount -otherUsersFolderName]): new method.
2477 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
2478 new javascript code and the new UIxMailAccountActions class.
2480 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
2481 javascript code and the new UIxMailAccountActions class.
2483 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
2484 new javascript code and the new UIxMailAccountActions class.
2486 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2487 -listMailboxesAction]): new method that returns a json-formatted
2488 tree of all the mailboxes available to the current user.
2490 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
2491 web actions related to the handling of mail accounts.
2493 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
2496 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
2497 -jsonRepresentation]): new interface method meant to be overriden
2498 by the primitive classes.
2500 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2502 * UI/MailerUI/UIxMailSplashView.m: removed.
2504 * SoObjects/Appointments/SOGoCalendarComponent.m
2505 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
2506 the uid to the list only when the user email is recognized by the
2509 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2511 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2512 -isDeletionAllowed]): completed method with the new imap acl api.
2514 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
2517 * SoObjects/SOGo/SOGoPermissions.m: added the new role
2518 "SOGoMailRole_MessageEraser".
2520 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
2521 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
2522 "defaultUserID" method into account.
2524 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
2525 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
2526 "defaultUserID" method into account.
2528 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
2529 methods to support the IMAP acls mentionned in the RFC 4314,
2530 removed the ones specific to Cyrus.
2532 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
2533 mandatory method for subclasses. Removed the SOGoDefaultUserID
2536 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
2537 overriden method to return @"<default>".
2539 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2540 -defaultUserID]): overriden method to return @"<default>".
2542 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2543 -aclsForUser:uid]): overriden method.
2544 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
2545 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
2546 ([SOGoMailFolder -defaultUserID]): overriden method.
2547 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
2549 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2551 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2552 -aclUsersForObjectAtPath:objectPathArray]): new method that being
2553 forwarded the calles to aclUsers for the GCS-based subclasses of
2556 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
2557 methods that would have been used to support IMAP acls. Replaced
2558 them with the new protocol for them that has been implemented in
2559 SOGo during the last few weeks.
2561 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2562 -hasSupportForDefaultRoles]): override method by returning "YES".
2564 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2565 -addObjectUniquely:object]): new method with an explicit name.
2567 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
2568 "acl" to "aclUsers". Now designed to return only the uid of the
2569 users involved in an ACL.
2570 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
2571 "NO" by default. To indicate to the acl editor that we don't want
2572 to handle a default user.
2574 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
2575 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
2578 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
2579 provides a view to the IMAP acls.
2581 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
2583 * UI/WebServerResources/MailerUI.js: replaced all invocations of
2584 addEventListener to the use of prototype's Event object. Also,
2585 configured all menus programmatically following descriptions lists
2586 containing their callbacks, or nulls, submenus id or separators.
2588 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2590 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2591 -addUserInAclsAction]): save the previous roles of the user
2592 (unlikely) or the default roles, or None instead of saving the
2593 roles that should appear the first time in the role editor when no
2594 default has been set...
2596 * SoObjects/SOGo/SOGoObject.m: defined a new constant
2597 "SOGoDefaultUserID".
2599 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2600 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
2601 ignore the "AuthorizedSubscriber" role and add the "None" role
2602 when no other role is found.
2604 * UI/Common/UIxAclEditor.m: added a button for the new default
2607 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2608 -_initRights]): don't take the "None" role into account when
2609 initializing the list of current roles.
2611 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
2614 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2616 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2617 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
2618 There is no need to subscract the start from the length if a space
2619 is not found since the range has not changed either. Finally, the
2620 first character before the url might also be a tab or a cr, so we
2621 match it against the "urlAfterEndingChars" custom NSCharacterSet.
2622 ([NSString -stringByDetectingURLs]): modified to handle email
2623 addresses and add a correct "mailto:" link.
2625 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2627 * SoObjects/Appointments/SOGoAppointmentFolder.m
2628 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
2629 method to return the events in the range of 2 weeks ago up to 4
2632 * UI/MailPartViewers/UIxMailPartTextViewer.m
2633 ([UIxMailPartTextViewer -flatContentAsString]): use the new
2634 "stringByDetectingURLs" method to offer clickable urls.
2636 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2637 -stringByDetectingURLs]): this new method replaces passive URLS
2638 with active ones for HTML resolution of the text.
2640 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2642 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2643 -asQPSubjectString:encoding]): simplified method.
2644 The headers indicates "utf-8" again thank to our fix in
2647 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
2650 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2652 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2653 -removeUserFromAclsAction]): implemented this method which was
2654 missing and is required to remove users from ACLs.
2656 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2657 -subscribeAction]): folderDict was not autoreleased, resulting in
2660 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2661 -primaryFetchProfile]): when building with libFoundation, don't
2662 use the "propertyList" method from NSString. Rather, we convert
2663 the string to an NSData instance and passit as parameter to
2664 NSDeserializer. This way, we obtain a mutable dictionary rather
2665 than an immutable one.
2667 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
2668 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
2669 constant string "contentTypeValue".
2670 contentTypeValue is now set back to iso-8859-1 since NGMime
2671 converts extracts the data in that encoding.
2673 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2675 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2676 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
2677 "bindFields" value is present in the user defaults, use the
2678 specified fields to find the dn of the user to bind.
2679 ([LDAPSource -allEntryIDs])
2680 ([LDAPSource -fetchContactsMatching:match])
2681 ([LDAPSource -lookupContactEntry:entryID])
2682 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
2683 bind and unbind the connection on each request.
2685 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
2687 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2688 -contactSearchAction]): simplified method to use the facilities
2689 provided by the LDAPUserManager. No longer takes care of the
2690 "ldap-only" url parameter since all requests are handled by the
2693 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2694 -primaryFetchProfile]): check that the value returned is not null
2695 before interpreting it.
2697 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2698 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
2699 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
2700 system email is already present, remove it before adding it.
2702 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2703 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
2704 loginToCheck is not empty.
2705 ([LDAPSource -fetchContactsMatching:match]): check that match is
2707 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
2709 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
2712 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2714 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
2716 ([SOGoUser -systemEmail]): returns the email formed from the
2717 username and the default mail domain.
2718 ([SOGoUser -hasEmail:email]): test whether the user has the
2719 specified email, in a case-insensitive way.
2721 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2722 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
2723 check login information.
2725 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2726 ([SOGoContactLDAPFolder
2727 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
2728 no longer manage LDAP connections. The requests are forwarded to
2729 the relevant LDAPSource instead.
2731 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2732 -appendSystemSources]): pass LDAPSource objects to
2733 SOGoContactLDAPFolder instances.
2735 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
2736 address of the "from" field before sending the message. Otherwise,
2737 sending the mail won't work.
2739 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
2740 rewrote this method to request all the available email identities
2741 for the current user. Also, the from field also contains the full
2742 name of the user, not just his/her email address.
2744 * SoObjects/Appointments/SOGoCalendarComponent.m
2745 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
2746 from the previous module iCalEntityObject+Agenor.
2747 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
2748 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
2751 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
2752 replacing the SOGoContactLDAPEntry module. It was renamed as such
2753 because it now receives a dictionary instead of an NGLdapEntry.
2754 It thus can now handle data from any source of LDIF data, not
2755 only coming from LDAP.
2757 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
2758 implementing most of what used to be the AgenorUserManager class.
2759 The difference is that users are cached in the forme of
2760 dictionaries and many sources are used. Also, it can be used to
2761 search LDAP contacts.
2763 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
2764 the concept of "ldap source", to be used by all the classes
2765 needing access to LDAP-provided information: addressbooks and the
2766 user manager. Most the method thereing are transcriptions of
2767 methods previously found in SOGoContactLDAPFolder. It also contain
2768 utility methods for user matching and authentification.
2770 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
2771 module, rendered useless by code refactoring.
2773 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
2774 with the freshly written "LDAPUserManager".
2776 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2778 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
2779 SOGOContactLDIFEntry.
2781 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
2782 module, obsoleted by code in SOGo/LDAPSource.[hm].
2784 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2786 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
2787 new method with an explicit name.
2789 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2791 * SoObjects/Appointments/SOGoCalendarComponent.m
2792 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
2793 replacing "isOrganizer:orOwner:" by taking only one instance of
2794 SOGoUser as parameter.
2795 ([SOGoCalendarComponent -participant:user]): new method replacing
2796 the previous "isParticipant" boolean method by returning the first
2797 participant matching the user passed as parameter. This method is
2798 used so that both the regular email address and the "system email
2799 address" of the user are matched against the participants emails.
2801 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2802 -getSystemEMailForUID:uid]): new method that returns the email
2803 formed with the user's uid and the default mail domain.
2805 * SoObjects/Appointments/SOGoCalendarComponent.m
2806 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
2807 was previously commented out.
2809 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
2810 forwared to [AgenorUserManager getSystemEmailForUID:].
2812 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2813 -toolbar]): method replacing the one with the same name in the
2814 task and appointment editor classes. This method makes also use of
2815 the new method "isOrganizerOrOwner:" and "participant:" in
2816 SOGoCalendarComponent.
2818 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2819 -toolbar]): removed method, replaced with a method with the same
2820 name in UIxComponentEditor.
2822 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
2823 method, replaced with a method with the same name in
2826 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2827 -primaryFetchProfile]): the values returned from the database are
2828 converted to a put dictionary first, since the dictionary returned
2829 is actually an immutable one, which can cause a crash afterwards.
2831 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2833 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
2834 and "SOGoRole_ObjectEditor".
2836 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2837 -prepareRightsForm]): this method is no longer mandatory.
2839 * UI/Contacts/UIxContactsUserRightsEditor.m
2840 ([UIxContactsUserRightsEditor
2841 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
2842 module to handle acls related to the address books. Partial
2845 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2846 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
2849 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
2850 specified roles from cache.
2851 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2852 put resulting roles in cache.
2854 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
2855 initWithName:inContainer:. Instead, directly initialize the ivars
2856 as it is supposed to be to avoid an infinite loop whenever one of
2857 those two methods are overriden.
2859 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
2862 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2863 -aclsForUser:uid]): override method so that SOGo won't crash when
2864 loading the contact card.
2866 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2868 * SoObjects/Appointments/SOGoAppointmentFolder.m
2869 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
2870 "freebusy" special user should only require opaque elements.
2872 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2874 * SoObjects/Appointments/SOGoAppointmentFolder.m
2875 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
2876 our double declaration where the resulting XML would be screwed.
2877 There is only one collection per namespace.
2879 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
2880 rfc822DateString]): new method that returns a string conform to
2881 rfc 822 and suitable for email headers.
2883 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
2884 "rfc822DateString" category method on the date we put in the
2887 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2889 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
2890 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
2891 which should never be overriden.
2892 ([UIxUserRightsEditor -appendRight:newRight])
2893 ([UIxUserRightsEditor -removeRight:right])
2894 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
2895 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
2896 methods that can be used by the subclasses.
2897 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
2898 mandatorily be overriden to prepare the elements of the subclassed
2900 ([UIxUserRightsEditor -updateRights]): new method that should
2901 mandatorily be overriden to update the user rights from the
2902 elements of the subclassed form.
2904 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
2905 check if the uid is already listed before adding it to our array.
2906 This is because the acl table can contain more than one record per
2907 user/object relationship.
2909 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2910 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
2911 "roles" parameter is now an NSArray instead of a string. Therefore
2912 we loop throughout the array to populate the table. All the
2913 relevant records are removed prior to the addition of the new
2916 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2917 -aclsForUser:uid]): new override that returns nil until we add
2918 support for IMAP acls.
2920 * SoObjects/Mailer/SOGoMailAccounts.m
2921 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
2923 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2924 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
2926 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2927 -aclsForUser:uid]): override this method which will always return
2930 * SoObjects/SOGo/SOGoPermissions.[hm]: added
2931 [Public,Private,Confidential]
2932 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
2933 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
2934 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
2936 * SoObjects/Appointments/SOGoAppointmentFolder.m
2937 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
2938 that defines default roles for new elements in the acl.
2940 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
2941 module and subclass of UIxUserRightsEditor specific to the
2942 handling of user rights on calendar folders.
2944 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2946 * SoObjects/Appointments/SOGoAppointmentFolder.m
2947 ([SOGoAppointmentFolder -groupDavResourceType]): return both
2948 "vevent-collection" and "vtodo-collection".
2950 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
2951 that implements the detailed editor of user rights per-object.
2953 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2955 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2956 -rolesForObject:objectinContext:context]): no longer query objects
2957 for "roleForUser:". Instead, all objects should implement
2960 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
2961 new method to comply with the new acl "protocol" in SOGoObject.
2962 Uses SOGoFolder's new facilities for ACLS.
2963 ([SOGoContentObject -aclsForUser:uid]): idem.
2964 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
2965 ([SOGoContentObject -removeAclsForUsers:users]): idem.
2967 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2968 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
2969 based folders. This method is derived from the code that was in
2970 UIxAclFolder before its removal.
2971 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2974 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
2976 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
2977 ([SOGoFolder -setRoleForUsers:uidsto:role])
2978 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
2980 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
2981 that requires overriding by subclasses.
2982 ([SOGoObject -aclsForUser:uid]): idem.
2983 ([SOGoObject -defaultAclRoles]): idem.
2984 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
2985 ([SOGoObject -removeAclsForUsers:users]): idem.
2987 * UI/Common/UIxObjectActions.m: new module implementing the web
2988 actions common to SOGoObject and all its subclasses.
2989 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
2990 user with the clientObject defaults user rights to the object's
2993 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
2994 to the point where it will only list the users (and their name)
2995 associated with an object acl.
2997 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
2998 methods have been moved into SOGoObject and SOGoFolder during a
3001 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3002 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
3003 method made useless by the programmatic handling of iCalendar
3005 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
3006 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
3007 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
3009 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
3010 drop on all folder nodes, not just on leaves.
3012 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3013 ([SOGoContactLDAPFolder
3014 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
3016 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3018 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
3019 debugging facilities when the SOGoDebugObjectAllocation user
3022 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3024 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
3025 method that SOGo will need with non-gnustep Foundation
3027 ([NSString -stringByAppendingPathComponent:component]): new method
3028 that SOGo will need when building with libFoundation. Method
3029 removed later since it is available from
3030 Foundation/NSPathUtilities.h.
3032 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
3035 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
3036 every subclass to access [WOApplication context] without having to
3037 invoke it more than once.
3039 * SoObjects/Appointments/SOGoCalendarComponent.m
3040 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
3041 moved method from SOGoTaskObject and SOGoAppointmentObject up to
3044 * UI/Scheduler/UIxCalSelectTab.m: removed module.
3046 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3048 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
3049 -vCard]): test the prefix of the card in a case-independent way.
3051 * OGoContentStore/OCSContactFieldExtractor.m
3052 ([OCSContactFieldExtractor
3053 -extractQuickFieldsFromContent:content]): we no longer accept
3054 records in a format other than versit vCard so we can get rid of a
3057 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3059 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3060 -selectorComponentClass]): restored method.
3062 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3064 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
3065 -shouldDisplayCurrentTask]): the current task is not displayed if
3066 it is NOT completed or if the "showCompletedTasks" flag is set.
3067 The logic was inverted in Lightning and is now in SOGo too.
3069 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3071 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
3072 want the "work" url instead of the "home".
3074 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3075 -_saveSnapshot]): save url values from snapshot.
3076 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
3078 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3079 -calendarList]): new method replacing "availableCalendars".
3081 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
3082 -calendarFolders]): we now take the list of subscribed calendar
3085 * SoObjects/Appointments/SOGoAppointmentFolder.m
3086 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
3087 method derived from and replacing [UIxCalView calendarFolders].
3089 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3091 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3092 -toManyRelationshipKeys]): don't put the predefined folders in the
3093 list if they are returned by the server.
3095 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
3096 longer store the "flattenedBlocks" in a dictionary since the
3097 object will be deleted anyway and we don't need to put the folders
3100 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3101 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
3102 attachment path into account when computing the part urls.
3104 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3106 * UI/Contacts/UIxContactsListViewContainer.m
3107 ([UIxContactsListViewContainer -additionalFolders]): take the list
3108 of subscribed folders from the new property list used for the user
3109 settings. The value of its key is SubscribedFolders for the
3110 dictionary entry named "Contacts".
3112 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3113 -canAccessContentAction]): new method to override the one from
3114 UIxFoldersActions by taking into account the fact that, this time,
3115 the clientObject is an ldap folder. Removed many method that used
3116 to be related to the handling of the user selector.
3118 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
3119 to make sure they can be removed.
3121 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
3122 populate the calendar entries based on the user settings plist.
3124 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3125 -selectForMailerAction]): restored method.
3127 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
3128 from a simplified version of the old UIxContactEditor (removed).
3130 * UI/Contacts/UIxContactsUserFolders.m: new template module for
3131 selecting users or user folders through an LDAP search of which
3132 the results are displayed as a tree.
3134 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
3135 method "onContactAdd" here since the Mailer is now the only module
3136 to use it when composing emails.
3138 * UI/WebServerResources/generic.js: added code for handling the
3139 new scheme used for describing SOGo folders, common code to handle
3140 folder addition or removal.
3142 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3143 -activateFolderAction]): new method that change the "active"
3144 settings in the folder-related fields in the user settings.
3145 ([UIxFolderActions -deactivateFolderAction]): see above.
3147 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3148 -checkRightsAction]): removed method.
3150 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3151 -updateAdditionalAddressBooksAction]): removed method.
3153 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3154 -updateCalendarsAction]): removed method.
3156 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3158 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3159 -checkRightsAction]): removed method.
3161 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3162 -canAccessContentAction]): new method designed to replace
3163 [UIxCalMainView checkRightsAction] in a more universal way.
3165 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3167 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3168 -roleOfUser:uidinContext:context]): take all the subkeys into
3169 account, not only the "personal" folder.
3171 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3172 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
3173 to the new components.
3175 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
3178 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3179 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
3180 field of the sogo_user_profile table, where the user-customizable
3181 changes will be saved.
3182 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
3183 similar to the one above, using the "settings" field where the
3184 automatic settings will be saved.
3186 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
3187 module to bind the userdefaults to a property list contained in a
3188 specified field of the sogo_user_profile table.
3189 ([AgenorUserDefaults
3190 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
3191 added a "fieldName" parameter.
3193 * UI/Common/UIxFolderActions.m: new module implementing web
3194 actions common to all GCS-based folders.
3196 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3198 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
3199 put a carriage return after the day name.
3201 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3202 -readFreeBusyAction]): restored method.
3204 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3206 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3207 -defaultAction]): remade module to redirect automatically to the
3210 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
3212 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3214 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3215 -deleteAction]): new web method to delete personal addressbook
3218 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3219 -delete]): override method to refuse the deletion of the folder if
3220 its nameInContainer is "personal".
3222 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
3223 that forwards the deletion request to the folder manager.
3225 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3227 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
3228 -zoomList]): new method that returns the list of available zoom factors.
3230 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3231 -changeStatusAction]): rewrote method.
3233 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3234 -_handleAttendeesEdition]): make sure "attendeesNames" has a
3235 length > 0 before computing the attendees. Otherwise there will be
3236 an invalid empty entry.
3237 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
3238 organizer when there are attendees and remove it when the
3239 attendees are removed.
3241 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3243 * UI/Scheduler/UIxAttendeesEditor.m): new component.
3245 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
3246 the task and appointment editors. Now a container component
3247 handling the common elements of tasks and events.
3249 * UI/Scheduler/UIxTaskEditor.m: same as below.
3251 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
3252 a subclass of UIxComponentEditor but a subcomponent of it.
3254 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
3255 toolbar can have the special value "none" to indicate there is
3256 none attached to the window.
3258 * SoObjects/Appointments/SOGoCalendarComponent.m
3259 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
3261 ([SOGoCalendarComponent -isParticipant:email]): new method.
3262 ([SOGoCalendarComponent -calendar:create]): takes one parameter
3263 "create" which is a boolean indicating whether we want to create
3264 the calendar if it does not exist.
3266 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3268 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
3269 of a table, the same way the dayly and weekly views have been for
3272 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
3274 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
3277 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
3278 property to point at the user folder
3280 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3282 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3283 -userInContext:]): returns "SOGoUser".
3285 * SoObjects/Appointments/SOGoCalendarComponent.m
3286 ([SOGoCalendarComponent -contentAsString]): overriden method that
3287 takes the privacy into account and discard the relevant fields if
3288 needed by generating a new content string and caching it.
3289 ([SOGoCalendarComponent
3290 -saveContentString:contentStringbaseVersion:baseVersion]): if the
3291 new method above has cached a content string, release it and set
3292 it to nil so that it will have to be regenerated in the case it is
3294 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
3295 discard the fields that have to be hidden when the card is
3298 * SoObjects/Appointments/SOGoAppointmentFolder.m
3299 ([SOGoAppointmentFolder
3300 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
3301 sure the cards are now handled as instances of
3302 SOGoCalendarComponent instead of SOGoContentObject so that their
3303 content string is taking the privacy classifiction into account.
3304 ([SOGoAppointmentFolder -_privacySqlString]): new method that
3305 generates a query to determine what information can be given and
3306 if the card itself has to be shown.
3308 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3309 -getICalPersonsFromValue:selectorValue]): removed useless
3310 "isAccessRestricted" method.
3312 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3313 -setStyle:_style]): test whether the values of orgmail and
3314 partmails are null before manipulating them, otherwise SOGo sends
3315 a "rangeOfString:" message to an NSNull, which makes it crashes.
3317 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3318 -extractQuickFieldsFromEvent:_event]): we now use the new
3319 "symbolicAccessClass" method from iCalEntity to determine the
3320 value of the "classifiction" field.
3321 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
3324 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3326 * SoObjects/Appointments/SOGoAppointmentFolder.m
3327 ([SOGoAppointmentFolder
3328 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
3329 see below, the query is adapted consequently.
3331 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3332 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
3333 renamed to "classification" and can any integer as value.
3334 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
3337 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3339 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3340 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
3341 don't prepend anything to the class and id named. Instead, we
3342 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
3345 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3347 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
3348 -rolesOfUser:logininContext:context]): if object does not exists
3349 (for example when it's being created), the current user has the
3350 same rights on it than he/she has on its parent container.
3352 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3353 -nameExistsInFolder:objectName]): methods that tests if a c_name
3354 corresponding to the name passed as parameter is present in the db
3357 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3359 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3360 -rolesForObject:objectinContext:context]): test for
3361 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
3363 * SoObjects/Appointments/SOGoCalendarComponent.m
3364 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
3365 returns the roles of the user on the container object if the event
3368 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3370 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
3371 alternativeViewer a multipart/related message is being handled.
3373 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
3376 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
3377 text/html component before text/plain.
3379 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3380 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
3381 fetching of HTML parts.
3383 * SoObjects/Appointments/SOGoCalendarComponent.m
3384 ([SOGoCalendarComponent -componentTag]): new template method that
3385 returns the vcalendar tag of the current object.
3386 ([SOGoCalendarComponent -component]): new method that returns the
3387 first object matching [self componentTag] within the current
3388 calendar object. This method replaces 'firstEventInCalendar:' as
3389 well as "firstTaskInCalendar:".
3390 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
3391 moved method from SOGoAppointmentObject.m.
3393 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3395 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
3396 module which shows each selected user's calendar in a different
3397 column instead of mixing their events together.
3399 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
3400 replaced use of [NSString stringByTrimmingWhiteSpaces] with
3401 [NSString stringByTrimmingSpaces].
3403 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
3404 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
3407 * UI/Scheduler/UIxCalDayOverview.m,
3408 UI/Scheduler/UIxCalDayChartview.m,
3409 UI/Scheduler/UIxCalDayListview.m,
3410 UI/Scheduler/UIxCalWeekOverview.m,
3411 UI/Scheduler/UIxCalWeekChartview.m,
3412 UI/Scheduler/UIxCalWeekListview.m,
3413 UI/Scheduler/UIxCalInlineMonthOverview.m,
3414 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
3416 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3418 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3419 -appendPersonalSourcesInContext:context]): release connectoin
3420 channel when everything is done.
3422 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3423 -newAbAction]): new action method to crate a new contact folder
3426 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
3427 that requests the folder manager to create a folder table with the
3428 specified type at the specified path. The type is taken from [self
3431 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3432 -folderType]): implemented.
3434 * SoObjects/Appointments/SOGoAppointmentFolder.m
3435 ([SOGoAppointmentFolder -folderType]): implemented.
3437 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3438 -appendPersonalSourcesInContext:context]): we now fetch all
3439 folders with type "Contact" that belong to the current user.
3440 ([SOGoContactFolders -newFolderWithName:name]): new method to
3441 create a new contact folder.
3443 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
3444 resulting url with [NSString+Utilities hostlessURL] instead of
3445 using NSURL. This is because the url in question sometimes has a
3446 hostname and sometimes not. "hostlessURL" ensure the hostname is
3448 ([UIxComponent -applicationPath]): same as above.
3450 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
3452 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
3453 folders before doing the one on messages.
3455 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3457 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
3458 makeObjectsPerform:withObject:withObject: for GNUstep
3461 * OGoContentStore/GNUmakefile, Protocols/common.make,
3462 SoObjects/common.make, UI/common.make: install in
3463 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
3465 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
3467 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
3470 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3472 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
3473 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
3476 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3477 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
3478 password would be accepted anyway as long as its length was > 0.
3479 This can be the case ONLY when LDAP is disabled otherwise we have
3480 a serious security issue...
3482 * SoObjects/Appointments/SOGoAppointmentObject.m
3483 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
3484 user is not an organizer nor a participant, he is declared as
3485 "Owner" if he owns the calendar the entry where the entry is
3486 contained. Other cases should not be possible.
3488 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3490 * UI/Contacts/UIxContactEditor.m: display and handle the new
3493 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3494 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
3497 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3498 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
3501 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3503 * SoObjects/Appointments/SOGoCalendarComponent.m
3504 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
3505 returns the value of ud "SOGoAppointmentSendEMailNotifications"
3507 ([SOGoCalendarComponent
3508 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
3510 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3512 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3513 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
3514 so that the mailbox cache is refreshed everytime the user presses
3515 on "get mail". I doubt a mailbox cache really is useful in general
3518 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3520 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3521 -userInContext:]): if the lookup is on "freebusy.ifb" and the
3522 username is "anonymous" the user is automatically set to
3525 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3527 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3528 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
3529 user with password "freebusy".
3531 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
3532 -contentAsString]): the default timerange is now 14 days before
3533 currentday and 1 month after.
3535 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3537 * SoObjects/Appointments/SOGoAppointmentFolder.m
3538 ([SOGoAppointmentFolder
3539 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
3540 escape the record string in a way suitable with XML encoding.
3542 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3544 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
3545 calendar view would not be updated properly.
3547 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3549 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3550 -newStartDate]): fix the handling of the component start date
3551 depending on the "hm" and the "day" parameters.
3553 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3554 -roleOfUser:uidinContext:context]): set role of current user to
3555 "Assistant" if the object that is accessed is "freebusy.ifb".
3557 * SoObjects/Appointments/SOGoAppointmentFolder.m
3558 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
3559 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
3560 ([SOGoAppointmentFolder
3561 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
3562 lookupCalendarFolderForUID: method, which doesn't do security
3565 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3567 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
3568 accessor that returns the comma-separated list of users with role
3570 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
3571 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
3572 "checkedUsers". Instead, each user is either classified in the
3573 list of assistants or the list of delegates.
3575 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3577 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
3578 -composeAction]): method imported from removed container modules.
3579 ([UIxMailMainFrame -mailFolderName]): method imported from removed
3582 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
3583 for wrapping UIxMailView with the "popupview" action.
3585 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
3586 since its the component that displays the same splash screen than
3587 the one in Thunderbird/Icedove.
3589 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
3590 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
3591 UI/MailerUI/UIxMailListViewContainer.[hm],
3592 UI/MailerUI/UIxMailViewContainer.[hm]: removed
3594 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3596 * UI/WebServerResources/HTMLElement.js: replaced the functional
3597 selectNode() and deselectNode() functions with select() and
3598 deselect() methods of HTMLElement.
3600 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
3601 events are initialized from here now instead of in the HTML code.
3603 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3604 -checkRightsAction]): new method similar to the one with the same
3605 name in UIxCalMainView.m.
3607 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
3608 code to handle the publishing of freebusy information.
3610 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3612 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3613 -checkRightsAction]): new action method that returns a
3614 comma-separated list of boolean values matching the right of the
3615 current user to "view" (as a permission) each foreign calendar
3616 stored in his preferences.
3618 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
3619 new method that sets a customOwner, which can be returned with
3620 ownerInContext it set.
3622 * SoObjects/Appointments/SOGoAppointmentFolder.m
3623 ([SOGoAppointmentFolder
3624 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
3626 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3628 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
3629 below, but for the Contacts and Calendar collections.
3631 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
3632 new acl facilities method from sope-gdl/GCSFolder.m.
3634 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3635 -roleOfUser:uidinContext:context]): new method that returns
3636 SOGoRole_Assistant when the user is an assistant or a delegate on
3637 the "personal" ab object. This is so that setting roles on the
3638 SOGoContactFolders object is not required.
3640 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3642 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
3644 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
3645 to the handling of the user selection for the acls.
3647 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
3648 values from SoPermissions with ones specific to SOGo.
3650 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
3651 handles the storage for the acls.
3653 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
3654 class for SOGoAppointmentObject and SOGoTaskObject.
3656 * UI/Common/UIxAclEditor.[hm]: new component that provides a
3657 general editor for folder acls.
3659 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
3661 ([NSString -davMethodToObjC]): method that returns the method name
3662 for a DAV property implementation.
3664 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
3666 ([NSArray -stringsWithFormat:format]): new method that returns
3667 formatted occurences of the strings stored in the array.
3669 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
3670 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
3671 subclass module of SoWebDAVValue that supports collections of
3672 properties of the same type.
3674 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3676 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3677 -lookupFolder:ofClassNamed:inContext:]): added the ability to
3678 configure the name of the SOGoDraftFolders with the ud var
3679 "SOGoDraftsFolderName".
3681 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3683 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
3684 -userTimeZone:username]): new method that returns the timezone for
3685 the specified user depending on his preferences and the server
3688 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3689 -stringForData:partInfo:]): take the encoding into account and
3690 translate the text to "normal" before processing the charset data.
3692 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3694 * UI/WebServerResources/generic.js: the progress indicator is on
3695 when loading the page so we turn it off, and we turn it back on
3696 whenever we switch to another module...
3698 * UI/WebServerResources/SchedulerUI.js: make sure the day view
3699 synchronization mechanism works everywhere.
3701 * UI/WebServerResources/generic.js: the log window is not only
3702 visible when UIxDebugEnabled is set.
3704 * UI/WebServerResources/SchedulerUI.js: the month overview's day
3705 cells are now initialized with the DOM event interface methods
3706 instead of with html attributes.
3708 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
3709 headers (should be made configurable at some point)...
3711 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
3712 "not null" constraint on startdate, enddate, isopaque,
3713 participants and partmails.
3715 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3717 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3718 -hoursToDisplay]): prevent a crash by retaining the
3719 "hoursToDisplay" array after it's created.
3720 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
3721 clickable hours DIV.
3723 * UI/WebServerResources/SchedulerUI.js: made the event
3724 participation status modification asynchronous, which also fixes a
3725 bug where the window would sometimes close before the accept or
3726 decline action was completed. Also, adapted the event handling
3727 related to the days or weeks view with the new DIV-based layout.
3729 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
3731 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
3732 DIV-based presentation of the days and weeks.
3734 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
3736 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
3737 might return an exception so we have to handle it if we don't
3740 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3742 * UI/WebServerResources/SchedulerUI.js: updated the list
3743 initialization code to use the new event management scheme, adding
3744 what was missing to be able to delete events and tasks again.
3746 * UI/WebServerResources/MailerUI.js: added code to activate the
3747 "Get mails" button. Fixed a bug which prevented messages to be
3750 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
3751 navigation and focus handling of INPUTs.
3753 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3755 * UI/WebServerResources/MailerUI.js: added code to handle the
3756 possible drag and drop events to manager in the mail module.
3757 Moving messages, opening parent folders, ...
3759 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
3760 the drag and drop manager as well as the interface to HTMLElement
3761 to trigger drag and drop events.
3763 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
3764 action to move the current message to the mailbox named after the
3765 value of parameter "tofolder".
3767 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3768 -moveToFolderNamed:folderNameinContext:]): new method base on
3771 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3773 * UI/WebServerResources/generic.js: added and activated many
3774 "load" handlers to configure generic widgets used across the
3775 modules. More events are now handled in a DOM-fashion way instead
3776 of by setting the relative attributes in the templates.
3778 * UI/Templates/UIxSortableTableHeader.wox: all the events are
3779 declared from the javascript DOM onload handlers.
3781 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
3784 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
3785 declared from the javascript DOM onload handlers.
3787 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
3788 we want everything to be separated from each other, as much as
3791 * UI/WebServerResources/SOGoDragHandles.js: new module containing
3792 the "SOGoDragHandlesInterface", implementing methods that can be
3793 attributed to DIV so that they can be used as drag handles.
3795 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3796 -asQPSubjectString]): initialize the tmp strings with '0' to make
3797 sure they don't contain garbage.
3799 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3801 * UI/WebServerResources/MailerUI.js: register the messageList
3802 table as a dragging source and the leaf of the navigation tree as
3803 dnd destinations to the DNDManager.
3805 * UI/WebServerResources/generic.js: initialize tabs from the
3806 "unload" event listener that is added programmatically instead of
3807 from the template... Also, added the new DNDManager object.
3809 * UI/WebServerResources/HTMLTableElement.js: added code to
3810 simulate XUL drag n drop events. This code will possibly be moved
3811 to HTMLElement.js instead later...
3813 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3814 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
3817 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3818 -_qualifierForFilter:filter]): only search records which starts
3819 with the specified pattern.
3821 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3823 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3824 -asQPSubjectString]): new method that returns the special QP
3825 string with its qp declaration for email subjects.
3826 ([SOGoDraftObject -bodyPartForText])
3827 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
3828 double-encode data in UTF-8.
3830 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3831 -newStartDate]): new method to determine the start date depending
3832 on the URL parameters, the current day and the current time.
3833 ([UIxComponentEditor -toolbar]): new method to determine the
3834 filename of the toolbar that should be drawn depending on the
3835 ownership and the list of attendees of the task/event wrt to the
3838 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3839 -setDayStartHour:aStartHour]): adjust the minutes to the next
3840 quarter of hour, if not already set to a quarter.
3842 * UI/WebServerResources/UIxAppointmentEditor.js,
3843 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
3846 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3848 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3849 -loadValuesFromComponent:component]): handles access class
3850 (privacy) and status.
3852 * UI/Contacts/UIxContactsListViewContainer.m
3853 ([UIxContactsListViewContainer -additionalFolders]): return nil if
3854 [self additionalAddressBooks] returns an empty string.
3856 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3858 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
3859 rangesOf7Days]): enhanced and debugged algorithm to feed the array
3860 with slices where the first day is still in the requested month.
3862 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
3865 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
3866 of events in the day boxes of the calendar's monthly view.
3868 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
3869 -davContentType]): declare "text/calendar".
3871 * SoObjects/Appointments/SOGoAppointmentObject.m
3872 ([SOGoAppointmentObject -davContentType]): declare
3875 * SoObjects/Appointments/SOGoAppointmentFolder.m
3876 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
3877 HTTP methods are handled by SOPE and requires nil to be returned,
3878 this method now invokes the new
3879 "requestNamedIsHandledLater:inContext:" method to check that.
3880 ([SOGoAppointmentFolder
3881 -requestNamedIsHandledLater:nameinContext:context]): new methods
3882 that returns "YES" only for the "OPTIONS" http method (for now...).
3883 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
3884 overloaded method to append the "access-control" and
3885 "calendar-access" DAV abilities to the initial declaration.
3887 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
3888 imitate the look of Sunbird/Lightning's monthly view.
3890 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
3891 UIxCalMonthViewOld.[hm].
3893 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3895 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
3896 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
3898 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
3899 returns an image name based on the participation status of the
3902 * UI/WebServerResources/SchedulerUI.js: same strip down as for
3905 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
3906 ([UIxContactsListViewContainer -additionalFolders])
3907 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
3908 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
3909 methods to handle the external addressbooks a user has subscribed
3910 too, by retriving them from his preferences.
3912 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3913 -updateAdditionalAddressBooksAction]): new method that updates the
3914 user settings with the list of addressbook he has subscribed to.
3916 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
3917 module for the address book selector.
3919 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
3920 a toolbar with two buttons ("add" and "remove") to manage the
3921 additional addressbooks a user might subscribe to.
3923 * UI/WebServerResources/ContactsUI.js: added code to handle
3924 "external addressbooks" from the Javascript point-of-view, by
3925 extending existing methods and adding code for the "add ab" and
3926 "remove ab" buttons.
3928 * UI/WebServerResources/generic.js: moved extensions methods to
3929 DOM elements to separate files for better clarity.
3931 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
3932 new method that returns "pageContent" as class, but also "popup"
3933 for the DIV where the page content lies, so that we can manipulate
3934 the content of popup's with CSS identifiers.
3936 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3938 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3939 -displayStyle]): new method that returns a string containing the
3940 css style relative to the current appointment cell. This code is
3941 currently inactive but might be reused later.
3943 * UI/WebServerResources/SchedulerUI.js: added code to handle the
3944 display of the selected day (the day pointed by the mouse, or the
3945 current day when changing the view).
3947 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3948 -dayCellClasses]): new method that returns a string containing the
3949 css classes applicable to the current cell, depending on the
3950 position of the day in the week, the day of today and the
3953 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
3954 -currentContactAptBorder]): new method that returns the
3955 appropriate border color for the specified user.
3957 * SoObjects/Appointments/SOGoAppointmentObject.m
3958 ([SOGoAppointmentObject
3959 -saveContentString:contentStringbaseVersion:baseVersion]):
3960 overloaded method that parse new events and detects if they have
3961 an organizer or not. If they are new and have no organizer set
3962 (Sunbird/Lightning...), the owner of the event is set as
3965 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
3966 category that provides facility methods and interfaces to the
3969 * SoObjects/Contacts/product.plist: give full access to ANY
3970 authenticated user, not just the owner (to every objects...).
3972 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3974 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
3975 every replica widgets are declared as such to their master
3976 counterpart. Take the days into account when displaying the time
3977 range taken by the appointment.
3979 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3980 -getICalPersonsFromValue:selectorValue]): method taken from
3981 UIxFreeBusyUserSelector, that is shared both by
3982 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
3984 * SoObjects/Appointments/SOGoAppointmentFolder.m
3985 ([SOGoAppointmentFolder
3986 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): reverted to search algorithm to search for events happening outside 0 or 1 (at most) boundary of the timerange.
3988 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
3989 derived and taken as a subset of UIxFreeBusyUserSelector that
3990 implements the table part of the FreeBusy view. Most of the
3991 methods of UIxFreeBusyUserSelector relative to that table were
3992 moved into UIxFreeBusyUserSelectorTable, which can also be used as
3993 a standalone view for AJAX operations.
3995 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3997 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3998 -vCard]): change reverted.
4000 * UI/Contacts/UIxContactEditor.m: check whether the client contact
4001 folder has selector "globallyUniqueObjectId" before calling that
4004 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4005 -vCard]): the "setVClass" NGVCard method really is "setClass"
4008 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4009 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
4010 request the "streetAddress" instead of the "streetaddress".
4011 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
4012 mails that *contain*, and not just *start with* the search
4015 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4016 -vCard]): mark address returned from LDAP as the work address.
4018 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
4019 span covered with the anchor, not only the textual information
4022 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
4023 argument (event or task) to newEvent in the appointmentListMenu.
4024 Make the appointmentsListView display the appointmentsListMenu.
4026 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
4027 12 to 50 before displaying "...".
4028 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
4029 if its length > 0, whether location itself is nil or not...
4030 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
4031 of which the length > 0.
4033 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4035 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
4036 french and ISO dates.
4038 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
4039 from UIxContactSelector to handle contact lists (current and
4040 additional contacts).
4042 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4043 -_freeBusyAsText]): added handling of an "additional"-named query
4044 parameter that describe the number of additional days after
4045 enddate that should be returned.
4047 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4048 -_responseForResults:results]): give priority to results with
4049 "c_uid" fields. If none returned, use the first contact received.
4051 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4052 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
4053 2 and "CANCELLED" to 0.
4055 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4057 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
4058 of start and end dates to short string dates.
4060 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4061 -readFreeBusyAction]): new method that returns an array of numbers
4062 corresponding to the state in the freebusy of each "quarter of an
4063 hour" between the "sday" and "eday" date parameters passed in the
4064 url. This permits to handle the display of the freebusy with Ajax
4066 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
4067 since the free busy displays 2 days ahead.
4069 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4070 -contactSearchAction]): new action that returns the uid and the
4071 username + email of the user whose name contain the value of the
4072 "search" url parameter.
4074 * SoObjects/Appointments/SOGoAppointmentFolder.m
4075 ([SOGoAppointmentFolder
4076 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
4077 useful for the computing of the status of the freebusy.
4079 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
4080 -init]): new component that incarnates a user selector for events
4081 inspired by the new one found in Thunderbird Lightning.
4083 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4085 * UI/WebServerResources/generic.js: added code to enable or
4086 disable anchor visually (following our internal algorithm).
4088 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
4089 added new "url" ivar with its classic accessors.
4090 ([UIxComponentEditor -urlButtonClasses]): new method that returns
4091 the class strings for the url button on the appointment/task
4092 editor (depending on the validity of the url).
4094 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
4095 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
4096 the template to match the Lightning's new task/appointment editor.
4098 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
4100 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
4102 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4104 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4105 ([SOGoContactLDAPFolder
4106 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
4108 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
4109 iCalEntityObject instances instead of just iCalEvent's.
4111 * SoObjects/Appointments/SOGoAppointmentFolder.m
4112 ([SOGoAppointmentFolder
4113 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
4115 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
4116 bad way of handling ownership that way.
4118 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4119 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
4120 on "cn", just like Mozilla.
4122 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4124 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
4125 "to" should be retained, otherwise it will be autoreleased and a
4128 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4129 -writeAction]): updated method to fetch the card before initing
4132 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4133 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
4136 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
4137 -iCalStringTemplate]): start and due date are now optional.
4139 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4140 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
4141 appropriate accessors to be settable through the templates.
4143 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
4144 new "isDisabled" ivar with appropriate accessors to be
4145 settable through the templates.
4147 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4148 -availableCalendars]): new method that list the calendars to which
4149 the user has subscribed.
4150 ([UIxComponentEditor -componentOwner]): returns the owner of the
4153 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4154 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
4155 quickentries to null whenever each or all of them are null, by
4156 providing an impossible timestamp from with NSNotFound as value.
4158 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4160 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
4161 that handles the creation of new fields with the new APIs and the
4162 new node structure on the page.
4164 * UI/Scheduler/UIxAppointmentEditor.m,
4165 UI/Scheduler/UIxTaskEditor.m:
4166 refactored to user UIxComponentEditor as parent class.
4168 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
4169 containing the methods common to the UIxTaskEditor and the
4170 UIxAppointmentEditor.
4172 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4174 * SoObjects/Appointments/SOGoAppointmentFolder.m
4175 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
4176 the handling of time-ranges.
4178 * UI/WebServerResources/ContactsUI.js: specify a notification type as
4179 parameters when onConfirmContactSelection in invoked.
4181 * UI/WebServerResources/generic.js: specify a notification type as
4182 parameters when onContactRemove in invoked.
4184 * UI/WebServerResources/SchedulerUI.js: when the user deselects
4185 all calendars, select his entry.
4187 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4189 * UI/WebServerResources/SchedulerUI.js: edit and delete events
4190 with their owner-relative urls. Generate a correct entry in the
4191 css color table when a user is added to the calendars list. Put
4192 the same color next to the user id.
4194 * UI/WebServerResources/generic.js: implemented some new helper
4197 * SoObjects/Appointments/SOGoAppointmentFolder.m
4198 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
4199 entries if their owner is not the current user.
4201 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4202 -displayClasses]): return the correct class for the current event
4203 representation depending on its owner.
4205 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
4206 and associate a color for each user login depending on its
4207 position in the list.
4209 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
4210 -currentRowCSSClass]): return the correct class for the current
4211 row depending on the owner of the event.
4213 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4214 -setColors:colors]): new method to associate a color table with
4215 each user in the list.
4217 * SoObjects/Appointments/SOGoAppointmentFolder.m
4218 ([SOGoAppointmentFolder
4219 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
4221 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
4222 NSObject to associate an instance with a user.
4224 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4226 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
4229 * UI/WebServerResources/ContactsUI.js: added handling of
4230 notification of changes to contact selectors.
4232 * UI/WebServerResources/generic.js: added handling of notification
4233 of changes to contact selectors.
4235 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4236 -updateCalendarsAction]): proxy method to update the user
4237 preference table with the new selected calendar uids.
4239 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
4240 -calendarsContactsAction]): new method.
4242 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
4243 ([UIxContactSelector -setHasCheckBoxes:aBool])
4244 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
4245 permit the drawing of checkboxes instead of card icons.
4247 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
4248 wrap a selector the the "Calendars" tab.
4250 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
4251 new user calendar selector.
4253 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4255 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
4256 may cover hour 0 to hour 23.
4258 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4259 -iCalStringFromQueryParameter:format:]): dates explicitly set to
4262 * UI/WebServerResources/SchedulerUI.js: manage both lists of
4263 objects wrt to the toolbar actions.
4265 * UI/WebServerResources/generic.js: added code to the "String"
4266 class to decode number-encoded char entities.
4268 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4269 -batchDeleteAction]): new method to delete selected entries in the
4272 * SoObjects/Appointments/SOGoAppointmentFolder.m
4273 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
4274 that delete identified entries in batch.
4276 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4277 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
4279 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
4280 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4281 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
4282 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4284 return a UIxJSClose component if everything went fine.
4286 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
4289 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
4290 UIxAppointmentEditor.m.
4292 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
4293 a very light page with javascript code to close a window, by
4294 calling a method on the opener if specified. This component is
4295 designed to work as a response to form postings.
4297 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4299 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
4300 SOGoAppointmentObject adapted for the handling of tasks.
4302 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
4303 extracted from SOGoAppointmentObject.
4305 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4306 -saveUrl]): returns the url needed to POST the new form to.
4307 redirect the user to <aptid>/editAsAppointment instead of /edit,
4308 so that SOGoAppointmentFolder can return the correct object type.
4310 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
4311 -compareAptsAscending:_other]): accept empty start or end dates.
4313 * SoObjects/Appointments/SOGoAppointmentFolder.m
4314 ([SOGoAppointmentFolder
4315 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): added a "component" parameter to match the query against the specified component types. Made startDate and endDate optional by ignoring them altogether in the query whenever one of them is nil.
4316 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
4317 components of type "vtodo" as well as "vevent".
4318 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
4319 url specified ends with AsTask or AsAppointment, returns the
4320 an object of the appropriate class, otherwise deduce it from its
4321 content if the HTTP method is "PUT", otherwise read its type from
4324 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4325 -extractQuickFieldsFromTodo:_task]): extract quick fields from
4328 * UI/Scheduler/UIxCalView.m ([UIxCalView
4329 -fetchCoreAppointmentsInfos]): replacement methods for
4330 fetchCoreInfos but by retrieving object with component "vevent".
4331 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
4334 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
4335 UIxCalAptListView adapted for the handling of tasks.
4337 * UI/Scheduler/UIxTaskProposal.[hm],
4338 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
4339 clones of the UIxAppointment* classes for the handling of tasks.
4341 * UI/WebServerResources/UIxTaskEditor.js: clone of
4342 UIxAppointmentEditor adapted for the handling of tasks.
4344 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
4345 Scroll the daily view to the appropriate hour when an appointment
4346 is selected in the appointments list.
4348 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4350 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4351 -setDayStartHour:aStartHour]): specifies the user timezone on the
4354 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
4357 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
4358 ([NSCalendarDate -driftedDate]): methods made useless by a better
4359 comprehension of the NSTimeZone API...
4361 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4363 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
4364 new methods from the NSCalendarDate methods.
4366 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
4367 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
4369 +dateFromShortDateString:dateStringandShortTimeString:timeStringinTimeZone:timeZone]): new method that generates a date from two short string formatted as follow: "yyyymmdd" and "hhmm". Thismethod replaces a similar method from UIxComponent (noted below).
4370 ([NSCalendarDate -adjustedDate]): this method returns another
4371 instance set to the correct hour after the original date was set
4372 from a non-GMT timezone. This date can be used for storage.
4373 ([NSCalendarDate -driftedDate]): this method does exactly the
4374 opposite of -adjutedDate, that is, it enables the method
4375 hourOfDay, minuteOfHour etc... to return the values according to
4376 the original date's timezone. This date CANNOT be used for storage.
4378 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
4379 -shortDateString]): new method that will return a "short date
4380 string" (yyyymmdd) from a calendar date object.
4382 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4383 -_cDateFromShortDateString:dateStringandShortTimeString:timeString]): new method to compute the selected date from the "day" and "hm" query parameters (if found). This method replaces the old algorithm that was found in the "selectedDate" method.
4385 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
4386 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
4388 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4390 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
4391 view of the day at the height of hour 8:00.
4393 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
4394 ([UIxCalView -dayEndHour]): returns 24.
4396 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
4397 ([UIxContactFoldersView -newAction]): invoke
4398 _selectActionForApplication: on self with the proper attribute too.
4400 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
4401 we now use the action mechanism in UIxContactsListView to keep the
4402 same view for the contact selectors and the regular contact view.
4404 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
4405 UIxContactsListViewContainerBase.[hm]
4407 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
4409 * UI/WebServerResources/generic.js: generalized emailstring
4410 handling functions. Generalized address book access functions.
4412 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4413 -isPopup]): return YES if the "popup" query parameter is set.
4415 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4416 -defaultAction]): keep the url parameters when redirecting.
4417 ([UIxContactFoldersView -selectForSchedulerAction])
4418 ([UIxContactFoldersView -selectForMailerAction]): new action
4419 methods for the /scheduler-contacts and /mailer-contacts invocations.
4421 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
4422 newly available NSString+URL category.
4424 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
4425 -asURLParameters]): handle dictionary entries which could be
4426 instances of NSArray rather than NSString.
4428 * SoObjects/SOGo/NSString+URL.m ([NSString
4429 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
4430 ([NSString -urlWithoutParameters]): new method that returns the
4431 url without its parameters.
4433 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
4435 * SoObjects/SOGo/NSDictionary+URL.[hm],
4436 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
4438 * UI/WebServerResources/UIxMailEditor.js: add support for
4439 additions of different types (to, cc, bcc) of recipients from the
4442 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
4445 * UI/Contacts/UIxContactsMailerSelection.m,
4446 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
4447 UI/Contacts/UIxContactsSelectionView.m to provide a different set
4448 of widgets depending on the application invoking the contact list.
4450 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4452 * UI/WebServerResources/ContactsUI.js: hide the current contact
4453 whenever the user changes of contact folder.
4455 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
4456 now provided by the template when loading the page.
4458 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4459 -iCalPersonWithUid:uid]): new method taken from removed module
4462 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4464 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
4465 -categoriesAsString]): same as below.
4467 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
4468 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
4470 * SoObjects/Appointments/SOGoAppointmentObject.m
4471 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
4472 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
4475 * SoObjects/Appointments/SOGoAppointmentFolder.m
4476 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
4477 hackish test to detect whether the request concernes VEVENT's or
4478 anything else. Return events only in the former case.
4479 ([SOGoAppointmentFolder
4480 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
4481 c_name quickfield so that the calendar list can identify the
4482 appointments with their complete "filename".
4484 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
4485 groupsOfClass:fromSource: to parse the given vcalendar.
4487 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
4489 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
4491 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
4494 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
4496 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4498 * SoObjects/Appointments/SOGoAppointmentFolder.m
4499 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
4500 sensitive to the CalDAV method names.
4501 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
4502 "calendar-query" CalDAV method name.
4504 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
4505 code coming originally from MailerUI.js.
4507 * UI/WebServerResources/UIxContactEditor.js: imitate the
4508 Thunderbird address book by completing the display name with the
4509 content of the first and last name fields, until the display name
4510 is modified manually.
4512 * UI/WebServerResources/generic.js: added a "trim" method to the
4515 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4516 -displayName]): new method that returns the display name from "cn"
4517 or from the "displayName" key if found.
4519 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4520 -initSnapshot]): check if "[card n]" returns anything to avoid a
4523 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
4524 that returns an unparsed doctype definition for the pages.
4526 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4527 -vCard]): set the card's fn to attribute "displayName" if found
4530 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4532 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4533 -vCard]): handle the "streetAddress" and "l" fields.
4535 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
4536 header fields by converting the tables to DIVs and SPANs.
4538 * UI/WebServerResources/generic.css: attempted unification of font
4539 families and size across all the elements. changed the
4540 logConsole's "position" from "fixed" to "absolute" to avoid
4543 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4545 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
4546 empty the contact view when the current contact is being deleted.
4548 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
4549 parse the email field and provide the address full name if found
4550 as the "contactFN" parameter.
4552 * UI/WebServerResources/generic.js (openMailTo): do not give a
4553 name to the opened window so that serveral ones can be opened at
4556 * UI/MailPartViewers/UIxMailPartTextViewer.m
4557 ([UIxMailPartTextViewer -flatContentAsString]): override method by
4558 replacing carriage returns with "<br />" in the result string from
4559 super's implementation.
4561 * UI/Contacts/UIxContactView.m ([UIxContactView
4562 -_urlOfType:aType]): don't manage non-mailto urls through
4563 javascript, let the user decide what's best for him.
4565 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4566 -newAction]): transfer all the query parameters by using the
4567 "asURLParameters"'s result string from [self queryParameters].
4569 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4570 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
4571 query parameters and put their values (if any) into the snapshot.
4573 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
4574 carriage-returns to "<br />".
4575 ([UIxContactView -workCompany]): explicitly initialize company to
4576 nil if org is nil or empty.
4578 * UI/WebServerResources/UIxContactEditor.js: updated validation
4579 code after we added and renamed some fields.
4581 * UI/WebServerResources/ContactsUI.js: added code to cache contact
4582 cards and to handle card updates.
4584 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4586 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
4587 test the length of the returned string since they will never be
4590 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
4591 return self if the process went successful, returns an exception
4592 otherwise (and only otherwise...).
4594 * OGoContentStore/OCSContactFieldExtractor.m
4595 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
4596 adapted method to the new VCard api. Since the cards are stored in
4597 vcard format, we no longer deal with a dictionary but with a
4600 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4602 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
4603 return a string with a "mailto" url.
4604 ([UIxContactView -_urlOfType:aType]): generic method to return a
4605 url string with a html anchor pointing to it.
4607 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
4608 since subclass "UIxContactEditor" did nothing. Implemented code to
4609 display and modify the values parsed from the vcards, displayed in
4610 a way similar to the Thunderbird addressbook.
4612 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4613 -save]): new dummy method.
4615 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4616 -save]): made method void.
4618 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4620 * UI/Contacts/UIxContactView.m: added many wrapper methods to
4621 display blocks of data à la Thunderbird Addressbook. If data is
4622 available, those wrappers (around the NGVCard methods) will
4623 enclose the results in a proper HTML output with the correct label
4624 (if present), otherwise it will return an empty string.
4625 ([UIxContactView -vcardAction]): new action to return the contact
4626 as text/vcard (for exporting).
4628 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4629 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
4631 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4632 -vCard]): create a new NGVCard instance when no data is available
4634 ([SOGoContactGCSEntry -save]): save the vCard using the new
4635 "versitString" API method/message.
4637 * UI/Contacts/UIxContactView.h: separated interface from
4640 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
4641 views and display them beneath the list.
4643 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4645 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
4646 the timezone even when it's the server timezone.
4648 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4649 -privateContacts:inContext:]): no long configure the calendar
4650 object with the user's timezone since it's now accessible
4651 application-wide throught the SOGoObject methods.
4653 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
4654 method. Removed the "backendTimeZone" method.
4656 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
4657 instead of SoComponent.
4659 * SoObjects/Appointments/SOGoAppointmentObject.m:
4660 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
4661 [self serverTimeZone] instead of "EST" (which was removed).
4663 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
4664 "timeZone" ivar and its accessors.
4666 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
4667 centralized method returing the timezone configured in the
4668 userdefaults db or "Canada/Eastern" if missing.
4669 ([SOGoObject -userTimeZone]): new centralized method returing the
4670 timezone of the current user or the server timezone if missing
4671 from the user configuration table.
4673 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4675 * UI/WebServerResources/SchedulerUI.js: implemented caching of
4678 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
4679 return a path based on the object's context instead of the first
4680 level in SOGo's object hierarchy...
4682 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4684 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
4687 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
4688 timezone ([self viewTimeZone]) to the WEMonthOverview component to
4689 avoid a confusion with the days.
4691 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
4694 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
4695 imitate Sunbird's synchronization between the 3 visible views.
4697 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
4698 sure the numbers in dateString are formatted so as to take 4 chars
4699 for the year and 2 for the day and the month, otherwise
4700 NSCalendarDate will return a nil date.
4701 ([UIxComponent -applicationPath]): return a path based on the
4702 object's context instead of the second level in SOGo's object
4705 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4707 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
4708 user's timezone abbreviation to the date string passed as parameter to
4709 NSCalendarDate to generate an accurate date instance. Do the same
4710 when no date is specified and today is chosen.
4712 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
4713 form's time values to integers before comparing them.
4715 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
4716 ([UIxCalAptListView -currentEndTime]): initialize the resulting
4717 dates timezone with [self viewTimeZone].
4719 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
4720 "viewTimeZone" ivar destined to hold an instance of the user's
4722 ([UIxComponent -viewTimeZone]): take the timezone from the user's
4725 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4727 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
4728 rearranged the layout.
4730 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
4731 manage showing and hiding appointment details.
4733 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4734 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
4735 timezone by taking the current user's timezone setting.
4737 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
4739 * SoObjects/Appointments/SOGoAppointmentObject.m
4740 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
4741 set default timezone to EST, although this code should be
4742 rewritten to handle a system and a user default value.
4744 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4745 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
4746 take the values from the hour and minute INPUTs when data is
4747 POSTed since we no longer use the UIxTimeSelector component.
4748 ([UIxTimeDateControl -selectableHours])
4749 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
4750 template SELECTs to display reasonable and acceptable values
4751 instead of all the possibilities.
4753 * UI/WebServerResources/generic.js: adapted code for the new
4754 implementation of the UIxContactSelector component (added a
4755 "remove" button, removed the previous INPUT and replaced them with
4756 links of class "button").
4758 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
4759 UIxTimeDateControl.m.
4761 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
4762 ([UIxCalDayTable -currentAppointmentHour]): new methods that
4763 returns correctly formatted values used as attributes for JS code.
4765 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4766 -initialContactsAsString]): renamed implementation of
4767 initialParticipants.
4768 ([UIxContactSelector -currentContactId])
4769 ([UIxContactSelector -currentContactName]): new methods used when
4770 listing the initial contacts in the widget. Currently, both return
4771 the person's cn but the latter should ultimately return a user
4774 * UI/Contacts/UIxContactSelector.h: separated interface from
4775 UIxContactSelector.m.
4777 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
4778 all javascript code is now put in Scheduler.js/generic.js.
4780 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
4781 moved into NSCalendarDate+Scheduler instead.
4783 * SoObjects/Appointments/SOGoAppointmentFolder.m
4784 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
4785 configure the timezone from SOGoUserFolder when the instance is
4787 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
4788 the value of the new "timezone" ivar.
4790 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4792 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
4793 the date selector in the first page and the container of the
4794 future calendar selector in the second page.
4796 * UI/WebServerResources/generic.js: added code for handling tabbed
4799 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
4800 returns the bundle name associated to the current running product.
4802 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4804 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
4805 exception by invoking a timeout on the opener rather than invoking
4806 the list refresh method.
4808 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
4811 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
4812 ([UIxCalWeekView -prevWeekQueryParameters])
4813 ([UIxCalWeekView -nextWeekQueryParameters])
4814 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
4815 that return the dates relatively to the current day.
4816 ([UIxCalWeekView -lastWeekName])
4817 ([UIxCalWeekView -currentWeekName])
4818 ([UIxCalWeekView -nextWeekName])
4819 ([UIxCalWeekView -weekAfterNextWeekName])
4820 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
4821 methods that returns the label for the corresponding weeks.
4823 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
4824 used by UIxCalDayView and UIxCalWeekView to display the events
4825 occuring in one or more days.
4827 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4829 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
4830 entries in the new "monthMenu" and "yearMenu".
4832 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
4833 method to return the current day as a string formatted depending
4834 on the current locale.
4836 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4837 ([UIxCalAptListView -endDate]): "today" is now the default filter
4838 for displayed events.
4839 ([UIxCalAptListView -currentSerialDay]): new method returning the
4840 date of the current enumerated appointment in serial form
4843 * UI/WebServerResources/SchedulerUI.js: added code to select the
4844 relevant day when an appointment is selected. Added code to popup
4845 a month and a year menu whenever the header entries are clicked in
4846 the calendar widget.
4848 * UI/WebServerResources/generic.js: made addClassName and
4849 removeClassName methods of HTMLElement.
4851 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4853 * UI/WebServerResources/MailerUI.js: fixed the contact creation
4854 from email addresses.
4856 * UI/WebServerResources/generic.js: centralized the search-related
4857 functions here since the same code was used across the 3
4860 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4861 ([UIxCalAptListView -endDate]): return the required dates needed
4862 depending on the value given to the "filterpopup" url parameter.
4864 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
4865 code by invoking UIxComponent's labelForKey:.
4867 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
4868 [self pageResourceManager] instead of [self resourceManager].
4870 * UI/Contacts/UIxContactEditorBase.m: invokes
4871 globallyUniqueObjectId on the clientobject's class instead of the
4872 hardcoded "SOGoFolder".
4874 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4875 -newAction]): redirect the "new" action to the personal (default)
4878 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
4879 +objectWithName:inContainer:]): new constructor.
4881 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4882 -lookupContactWithId:recordId]): always create a contact object,
4883 even if it does not exist.
4885 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4887 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
4888 component that lays out the different components of SOGoCalendar.
4889 Only serves as an Objective-C counterpart to its xml template.
4891 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
4894 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
4895 display a widget to handle the information displayed in the
4896 appointments list. Not currently used, lacks implementation.
4898 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
4899 display a calendar as a dynamic widget from where one can select
4900 the current visible day.
4902 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
4903 extracted from UIxCalInlineMonthOverview.m.
4905 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
4906 calendarPageURL methods. The javascript code is handled by .js
4907 files as much as possible...
4909 * UI/WebServerResources/ContactsUI.js,
4910 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
4913 * UI/WebServerResources/SchedulerUI.js: implemented functions to
4914 handle the new widgets. XmlHTTPRequest code taken from
4917 * UI/WebServerResources/generic.js: put some functions related to
4918 element selections as methods to HTMLElement and HTMLTableElement.
4920 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
4921 display the list of appointments (embodies the code-size of
4922 UIxCalAptListView; answers to the "aptlist" method).
4924 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4926 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
4927 -correctURLAction]): new short action method replacing the method
4928 below by taking far less code.
4930 * SoObjects/Appointments/SOGoAppointmentFolder.m
4931 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
4932 with an action in the view-related code.
4934 * UI/Scheduler/UIxAppointmentEditor.m: invoke
4935 "stringByEscapingHTMLString" on the resulting value to avoid
4936 issues with accented characters.
4937 ([-jsCode]): removed method since the javascript code was merged
4938 into SchedulerUI.js.
4940 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4942 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
4943 new class method that returns an iCalPerson based on the UID given
4946 * UI/Contacts/UIxContactsListViewContainerBase.m:
4947 UIxContactsListViewContainer renamed to serve as a base class for
4948 the contact lists in both the contact editor and the contact
4951 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4952 ([SOGoContactLDAPFolder
4953 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
4954 setUserIdentifier:setRootDN:]): an LDAP field specifying the
4955 loginname of the users can now be specified.
4957 * UI/WebServerResources/generic.js: added code to manage contact
4958 lists through the new implementation of the UIxContactSelector.
4960 * UI/Templates: put the templates related to SchedulerUI in its
4963 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4964 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
4965 entry for "uid" with the field name representing the login name of
4966 the user in the corresponding LDAP branch.
4968 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4970 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4971 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
4972 request is a PUT, always create an entry, even if we're not sure
4975 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4977 * UI/WebServerResources/ContactsUI.js: implemented live-search.
4979 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
4980 -appendSystemSourcesInContext:context]): populated method with
4981 code that creates entries mapped to instances SOGoContactFolder,
4982 based on the configuration found in the NSUserDefaults under the
4983 key "SOGoLDAPAddressBooks".
4984 ([SOGoContactFolders
4985 -lookupName:nameinContext:contextacquire:acquire]):
4986 "contactsources" do not exist anymore, SOGoContactFolder was split
4987 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
4988 and one protocol: SOGOContactFolder, instead.
4989 ([SOGoContactFolders -contactFolders]): new accessor used by the
4990 views of SOGoContactXXXFolder to list the possible sources.
4992 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
4993 defines the methods that UIxContactsView, ..Editor and so on...
4996 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
4997 defines the methods that UIxContactsListViewBase expects as well
4998 as the data fields returned in the contact lists.
5000 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
5001 returns entries an LDAP server. Conforms to the new
5002 SOGOContactFolder protocol.
5004 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
5005 returns a vCard based on contact entries from an LDAP server.
5006 Conforms to the new SOGOContactObject protocol.
5008 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
5009 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
5010 entry for the textual representation of the vCard.
5012 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
5015 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
5016 "SOGoContactObject".
5018 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
5019 method that generates a textual representation of the vcard.
5021 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
5023 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
5024 "SOGoContactFolder".
5026 * SoObjects/Contacts/SOGoContactSource.h,
5027 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
5030 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
5031 -singleAttributeWithName:key]): new method that returns the first
5032 object associated with an ldap key (where generally one value is
5035 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
5036 map the entry into an NSDictionary for processing by
5037 UIxContactsListViewBase.m with the least possible overhead.
5039 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
5042 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5044 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5045 -privateContacts:inContext:]): now returns an instance of
5048 * UI/Contacts/UIxContactsListViewContainer.m
5049 ([UIxContactsListViewContainer -contactFolderName]): new method to
5050 return the absolute path to the current contact folder, called
5051 from within the template.
5053 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
5054 JS code to initialize the 'currentContactFolder' generic var.
5056 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
5057 +contactFolderWithSource:inContainer:andName:]): new class
5058 method meant to return an instance connected to the specified
5059 source. Currently useless but won't be anymore in the next few
5062 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
5063 the "lookupFreeBusyObject" method since it does not exist.
5065 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
5066 as a "view" for the SOGoContactFolders object. Does nothing but
5067 redirect the browser to the URL of the personal address book of
5068 the user. It does not even have a template.
5070 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
5071 implementing the SOGoContactSource protocol. Does nothing
5072 currently but will be used to implement access to the personal
5073 address book of the user stored in the SOGo database.
5075 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
5076 protocol defining an API common to all possible types of contact
5079 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
5080 serving as the root of the contact folders available to the
5081 current user. Correctly lists the contact sources in webdav.
5083 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5085 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
5086 -composeAction]): new action method that permits external object
5087 to write a message from the default (primary) account.
5089 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5090 -initSnapshot]): new method with code taken from "defaultAction"
5091 but needed for others.
5092 ([UIxContactEditorBase -writeAction]): new action designed to
5093 compose the correct URL needed to obtain the MailerUI's email
5094 editor with the correct "mailto" parameter.
5096 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
5097 Common so that other modules can use it.
5099 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
5100 easier to manage both ajax and non-ajax requests.
5102 * UI/Contacts/UIxContactsFilterPanel.m: clone of
5103 UIxMailFilterPanel, but applicable to contact lists.
5105 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
5106 -vcardContentFromSOGoContactRecord]): use the new standard methods
5107 created for each type of entry. If a line is determined to not
5108 contain information, it will be skipped.
5110 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
5111 +initialize]): init defaultMailDomain with the user default
5112 "SOGoDefaultMailDomain".
5114 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5116 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5117 -saveAction]): reorganized methods to only have ONE return point.
5118 Invoke saveRecord: directly on the clientObject instead of
5119 saveContentString, which does the same thing anyway.
5121 * SoObjects/Contacts/NSDictionary+Contact.m
5122 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
5123 method to convert the dictionary returned with the user submission
5124 to a record in VCARD format to be stored in the database.
5126 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5128 * UI/WebServerResources/MailerUI.js: when opening the context menu
5129 of the message list, select the message below the mouse cursor and
5130 deselect the other selected messages temporarily. This mimics the
5131 behaviour of Thunderbird for that matter and was already
5132 implemented for the entries of the folder tree.
5134 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
5135 -iconForMenuItem]): new method that returns the fully qualified
5136 relative URL to the icon representing the mailbox, or the default
5137 mailbox icon if needed.
5139 * UI/SOGoUI/UIxComponent.m ([UIxComponent
5140 -urlForResourceFilename:filename]): automatically return an empty
5141 string whenever the filename passed as argument is nil.
5143 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
5144 "desc" parameter set to 1 so that they are sorted in descending
5145 order by default. Also, added "onHeaderClick()", triggered by
5146 clicking on the message list header elements.
5148 * UI/MailerUI/UIxMailSortableTableHeader.m
5149 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
5151 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5152 -isSortedDescending]): defaults to "YES" when the sort order is
5155 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5157 * UI/WebServerResources/MailerUI.js:
5158 - message cache: set the max num of cached messages to 20. Limit
5159 the cached message size to 30000 bytes.
5160 - ajax: when a message request is called while one is already
5161 being performed, the latter will be cancelled. Idem when
5162 retrieving the content of a mailbox.
5163 - folder tree: when a mailbox is selected because of the URL
5164 requested (initMailboxSelection), the dtree is expanded throughout
5165 the mailbox entry's parent hierarchy to ensure it is made visible
5166 when the page is being displayed. (new function: expandUpperTree).
5167 - mailbox loading: when loading a mailbox where a message was
5168 previously selected, we invoke its url with the "pageforuid"
5169 parameter correctly specified. During callback processing, we scan
5170 the table for the related row and reselect it.
5171 Also, the message area is set blank before loading any mailbox.
5173 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5174 -defaultAction]): if the "pageforuid" parameter is passed in the
5175 url, take its value and invoke [self firstMessageOfPageFor:]
5176 consequently to deduce the first message to display. Otherwise,
5177 set it to "idx", otherwise set it to 0.
5178 ([UIxMailListView -firstMessageOfPageFor:]): new method
5179 that determines the first message of the page where the message
5180 passed as parameter is contained.
5182 * UI/WebServerResources/UIxMailListView.js: removed this module,
5183 its code was put in MailerUI.js instead.
5185 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5187 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
5188 which returns the nodes for the parent specified in "parentMenu".
5189 Used to generate the javascript code for the folder dtree.
5191 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
5192 using that container-template are now using UIxMailMainFrame
5193 since UIxMailPanelFrame had no real interest. File removed.
5195 * UI/WebServerResources/dtree.{css,js}: new files to handle
5196 javascript-generated mailbox tree. Modified from original version
5197 by integrating the previous code with the one we are using for
5198 selections and mailbox handling. Minor visual enhancements too...
5200 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5202 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
5203 returned, put it in an NSArray before returning it (fixes
5206 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5208 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
5209 that returns a url string stripped from its "http://hostname"
5212 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
5214 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
5216 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5218 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
5219 -mailDateFormatter]): retrieve the timezone from the user settings
5220 and pass it to the returned dateFormatter. Also, the dateFormatter
5221 is kept in a static variable to avoid useless
5222 creations/destructions.
5224 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
5225 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
5227 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
5228 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
5229 s/Criteria/Text/ to handle the "criteria" form parameter.
5231 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5233 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
5234 to integrate better with the firefox look&feel. Added entries for
5235 the new "menu" DIV class (popup menus).
5237 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
5238 takes any chunk of text as param, detects the user email and the
5239 optional first and last names and return them in a well-formatted
5240 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
5241 namespace conflict. Added "onMenuClick(node, event, menuId)" to
5242 handle popup menus through "onclick" element attributes (node =
5243 this, event = event and menuId = name of the menu DIV id to
5246 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5247 -snapshot]): add an entry for "email" into the snapshot
5248 dictionary if a "contactEmail" URL parameter was detected and if
5249 the entry for "email" is empty.
5251 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
5252 button now invokes the newContact() js function in ContactsUI.js
5253 instead of opening "new" directly. newContact() pops up a window
5254 stripped from its navigation bar.
5256 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
5257 bundle (AddressBook).
5259 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
5260 "menu" and id "addressMenu" have the header email addresses
5261 display it with the new menu code in generic.js.
5263 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
5264 replaced the body tables with a div of class "pageContent"
5265 (standardization across the page templates).
5267 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
5268 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
5269 those are now inherited from UIxPageFrame.
5271 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
5273 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
5274 a "mailto" URL parameter is detected and the "to" array is empty,
5275 initialize "to" with the value of "mailto" before returning it.
5277 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
5278 -composeAction]): rewrote method in a cleaner way and with usage
5279 of the URL extensions to NSString and NSDictionary (see below).
5280 Also, if a "mailto" url parameter is detected, pass it to the
5283 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
5286 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
5287 returns a parameter string to add to a base URL.
5289 * UI/Common/NSString+URL.m ([NSString
5290 -composeURLWithAction:parameters:andHash:useHash]): new method to
5291 compose a complete URL from an object URL with parameters and an
5292 optional '#' character.
5294 * UI/Common/UIxPageFrame.h: separated interface from
5297 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
5299 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
5301 * UI/WebServerResources/generic.js: added code to manage
5302 selections within HTML containers.
5304 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
5305 added method to determine the possible URL for a product-specific
5306 javascript filename of the forme <productname>.js.
5307 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
5308 ([UIxPageFrame -isPopup]): new method to determine whether the
5309 application navigator bar should be displayed (main page) or not
5312 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
5313 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
5314 the user through LDAP.
5316 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5318 * The toolbar code from the MailerUI product was taken, renamed as
5319 "UIxToolBar" and put into UI/Common. Toolbar plists were created
5320 for the Contacts and Scheduler products and put in their respectir
5321 Toolbars/ subdirectories. Finally,
5322 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
5323 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
5324 and an invocation to the UIxToolbar component was put at the top
5325 of UI/Templaces/UIxPageFrame.wox.
5327 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
5328 within the templates whether a separator should be displayed.
5330 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
5331 that returns NO if the toolbar is empty.
5333 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5335 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
5337 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
5338 new toolbar objects.
5340 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
5342 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
5343 linkbanner as a DIV instead of a TABLE.
5345 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
5347 returns 'YES' to request the display of the navigation bar between
5350 2006-06-15 ludovic@inverse.ca
5352 * It's now possible to set the default
5353 domain using for email using the
5354 SOGoDefaultMailDomain preference key.
5356 2006-06-15 ludovic@inverse.ca
5358 * Initial import of SOGo from trunk.