]> err.no Git - scalable-opengroupware.org/blob - ChangeLog
419b641c02af64d4f2065e6d3400ea43149467e9
[scalable-opengroupware.org] / ChangeLog
1 2007-12-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2
3         * SoObjects/Appointments/SOGoCalendarComponent.m
4         ([SOGoCalendarComponent -contentAsString]): securize the returned content.
5         ([SOGoCalendarComponent -aclsForUser:uid]): check whether the user
6         is an organizer or a participant as well.
7
8         * SoObjects/Appointments/SOGoAppointmentObject.m
9         ([SOGoAppointmentObject -changeParticipationStatus:_status]): the
10         user we should change the status of is not the active user but the
11         owner of the object. This is for delegation.
12
13         * SoObjects/Appointments/SOGoAppointmentFolder.m
14         ([SOGoAppointmentFolder -fetchContentObjectNames]): fetch the
15         elements through the fetchFields:from:to:title:component: method
16         method, so that the result is already filtered depending on the
17         acl.
18
19         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
20         -toolbar]): if the current user is a delegate, take the permission
21         "ModifyComponent" into account. Also, do not let him/her modify an
22         event for which he/she is the organizer.
23
24         * SoObjects/Contacts/SOGoContactLDAPFolder.m
25         ([SOGoContactLDAPFolder -davResourceType]): declared as a carddav
26         addressbook collection.
27
28         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
29         -davResourceType]):  declared as a carddav addressbook collection.
30
31         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davLastModified]):
32         override SoObject's implementation. Otherwise a localized date is returned.
33
34         * UI/Common/UIxPageFrame.m ([UIxPageFrame -isCalendar])
35         ([UIxPageFrame -isContacts], [UIxPageFrame -isMail]): getters to
36         determine which module is the current one.
37
38 2007-12-06  Francis Lachapelle  <flachapelle@inverse.ca>
39
40         * UI/Scheduler/NSArray+Scheduler.m ([NSArray -compareEventsTitleAscending:otherEvent])
41         ([NSArray -compareEventsLocationAscending:otherEvent])
42         ([NSArray -compareEventsEndDateAscending:otherEvent])
43         ([NSArray -reversedArray]): new methods that sort an array of
44         events depending of various parameters.
45
46         * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
47         -eventsListAction]): added support for sorting events.
48
49 2007-12-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
50
51         * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction])
52         ([UIxMailEditor -sendAction]): make sure that the attachments
53         having the same filename are correctly sequenced (ex: base.ext,
54         base-1.ext, base-2.ext).
55
56         * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
57         -fetchBLOB]): added support for quoted-printable decoding. Also,
58         we return nil if the type is not supported.
59
60 2007-12-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
61
62         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -newAction]):
63         create task obejcts with the .ics extension.
64
65         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
66         -newAction]): create appointment objects with the .ics extension.
67
68         * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -newAction]):
69         create objects with the .vcf extension.
70
71         * Main/NSException+Stacktrace.m: added missing symbols from
72         NSException.m and NSDebug.m (GNUstep).
73
74         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
75         -foldersSearchAction]): make use of the new search methods in
76         SOGoUserFolder (see below).
77
78         * UI/Contacts/UIxContactFoldersView.m ([-foldersSearchAction]):
79         moved method into ../MainUI/SOGoUserHomePage.m.
80
81         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
82         -foldersOfType:folderTypeforUID:uid]): only return folders owned
83         by the specified user.
84
85 2007-12-05  Francis Lachapelle  <flachapelle@inverse.ca>
86
87         * SoObjects/Mailer/SOGoDraftObject.m: the condition for replyToAll
88         has to be done later to avoid duplicated to and cc addresses.
89
90 2007-12-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
91
92         * SoObjects/Appointments/SOGoAppointmentFolder.m
93         ([SOGoAppointmentFolder -davCalendarQuery:queryContext]): fixed a leak.
94
95         * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder -davSubscribe:localContext])
96         ([SOGoGCSFolder -davUnsubscribe:localContext]): subscribe an
97         unsubscribe from DAV-based accesses. We could be compatible with
98         Microsoft's extensions but we have no need for a "subcription id",
99         so we implement our own.
100
101         * SoObjects/SOGo/SOGoObject.m ([SOGoObject
102         -POSTAction:localContext]): new method to intercept DAV POSTs,
103         which we now use to implement certain custom commands such as
104         "subscribe" and "unsubscribe".
105
106         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
107         -davNamespaces]): declare the
108         "urn:inverse:params:xml:ns:inverse-dav" xml ns.
109         ([SOGoUserFolder -foldersOfType:folderTypeforUID:uid]): new method
110         designed to replace the UIxContactFoldersView.m mechanism for
111         displaying folders to subcribe to, as a common code base for both
112         Web and DAV-based subscriptions.
113         ([SOGoUserFolder -foldersOfType:typematchingUID:uid]): same as
114         above.
115         ([SOGoUserFolder -davCollectionQuery:queryContext]): new method
116         that implement a custom DAV-based protocol query for querying
117         folder based on specified attributes.
118
119 2007-12-03  Ludovic Marcotte <ludovic@inverse.ca>
120
121         * Main/NSException+Stacktrace.{h,m} - new files
122         to handle automatic stack trace generation
123         upon an uncaught exception.
124
125         * Updated the templates and Localizable.string files
126         to fix typos and add new strings.
127
128         * SoObjects/Mailer/SOGoMailBodyPart.m
129         Fixed attachment retreival when the first character
130         is a digit.
131
132         * SoObjects/SOGo/SOGoGCSFolder.m
133         Fixed the sending of emails when folders are created/removed.
134         Notifications are sent if the defaults SOGoFoldersSendEMailNotifications
135         is set to YES.
136
137         * UI/Common/UIxUserRightsEditor.m
138         * UI/Templates/SOGoACLEnglishModificationAdvisory.wox
139         * UI/Templates/SOGoACLFrenchModificationAdvisory.wox
140         * UI/Templates/SOGoACLGermanModificationAdvisory.wox
141         Added the capabilities to email notifications when ACLs have
142         changed on a DAV collection or an IMAP mailbox. Also added
143         new templates (3 .wox) to deal with this. 
144
145         * UI/WebServerResources/ContactsUI.js
146         UI/WebServerResources/SchedulerUI.js
147         Added warnings on operations w/o selection.
148
149 2007-11-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
150
151         * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
152         -appendSubscribedSources]): don't include sources for which we
153         don't have the SOGoPerm_AccessObject permission.
154
155         * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
156         -rfc822DateString]): we want positive timezones to be specified
157         with a leading "+" too.
158
159 2007-11-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
160
161         * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
162         +folderWithSubscriptionReference:referenceinContainer:aContainer]):
163         return nil if the subscribed folder has no display name (meaning
164         it no longer exists).
165
166         * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
167         -appendPersonalSources]): don't include sources which are no
168         longer existing.
169
170         * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
171         -ocsPathOfContainer]): return the intended value, not that of
172         ocsPath...
173
174         * SoObjects/Appointments/SOGoCalendarComponent.m
175         ([SOGoCalendarComponent -sendResponseToOrganizer]): send the
176         message only of sendEMailNotifications is set.
177
178         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -subscriptionRoles]):
179         new method that returns the roles that qualifies for adding the
180         special "authorized subscribed" sogo role.
181
182 2007-11-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
183
184         * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
185         -aclsForUser:uid]): copy all the roles from the container. If the
186         object is new, make sure the roles contain "ObjectEditor" if and
187         only if "ObjectCreator" is present.
188
189         * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
190         -aclsForUser:uid]): no longer take the "ObjectReader" role into
191         account.
192
193         * UI/Common/UIxFolderActions.m ([UIxFolderActions
194         -canAccessContentAction]): always return HTTP status 204. We want
195         this because we are relying on the SOPE access control manager to
196         grant access to this method. This requires a fine-tuned access
197         control in SOGo itself...
198
199         * UI/Contacts/UIxContactsUserRightsEditor.m ([-userCanReadObjects])
200         ([-setUserCanReadObjects:userCanReadObjects]): removed methods.
201
202         * UI/MailerUI/UIxMailUserRightsEditor.m ([UIxMailUserRightsEditor
203         -updateRights]): no longer take the "ObjectReader" role into account.
204         ([-userCanReadMails], [-setUserCanReadMails:userCanReadMails]):
205         removed methods.
206
207         * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
208         -fetchFreeBusyInfosFrom:_startDateto:_endDate]): specify context
209         when looking up the Calendar folder.
210
211 2007-11-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
212
213         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): same as below.
214
215         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
216         -event]): create the event if it doesn't exist.
217
218         * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -userHasCalendarAccess])
219         ([UIxPreferences -userHasMailAccess]): same as below, for
220         displaying preference tabs.
221
222         * UI/Common/UIxPageFrame.m ([UIxPageFrame
223         -userHasCalendarAccess]): new accessor for the link banner.
224         ([UIxPageFrame -userHasMailAccess]): same as above.
225
226         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
227         -toManyRelationshipKeys]): do not report the path to modules to
228         which the user has no access. No longer cache this information
229         statically, the array will be generated at each call.
230         ([SOGoUserFolder -lookupName:_keyinContext:_ctxacquire:_flag]):
231         ignore the path to modules to which the user has no access.
232
233         * SoObjects/SOGo/SOGoUser.m ([SOGoUser -canAccessModule:module]):
234         new method that returns whether the user has access to the
235         specified module.
236
237         * SoObjects/SOGo/LDAPSource.m ([LDAPSource
238         -initFromUDSource:udSource]): take a new parameter named
239         'ModulesContraints' that defines a set of constraints for
240         accessing specified named modules. This is an optout, meaning the
241         modules will be present unless a constraint is specified.
242
243         * SoObjects/Appointments/SOGoAppointmentFolder.m
244         ([SOGoAppointmentFolder
245         -roleForComponentsWithAccessClass:accessClassforUser:uid]): cache
246         acl to reduce method calls.
247         ([SOGoAppointmentFolder
248         -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
249         if the user is not the current user, we strip the useless info
250         from the meta data.
251
252         * UI/Common/WODirectAction+SOGo.m ([WODirectAction
253         -labelForKey:key]): new category method.
254
255         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
256         -event]): same as below.
257
258         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): request a
259         secured version of the component.
260
261         * UI/MailPartViewers/UIxMailPartViewer.m
262         ([-fallbackStringEncoding]): removed method.
263         ([UIxMailPartViewer -flatContentAsString]): we no longer use [self
264         fallbackStringEncoding]. Instead we directly specify
265         NSISOLatin1StringEncoding if UTF-8 has failed.
266
267         * UI/MailPartViewers/UIxMailPartICalViewer.m
268         ([-fallbackStringEncoding]): removed method.
269
270 2007-11-25  Ludovic Marcotte <ludovic@inverse.ca>
271
272         * SoObjects/Mailer/SOGoMailForward.m
273         Use [sourceMail decodedSubject] instead of [sourceMail subject]
274         Signature fix in -signature - see the comment
275         for SOGoMailReply.
276
277         * SoObjects/Mailer/SOGoMailObject.m
278         Improved -stringFromData: to try UTF-8 then fallback to Latin1
279
280         * SoObjects/Mailer/SOGoMailReply.m
281         Modified -messageBody to strip the signature from the reply.
282         Also modified -signature to add "-- \n%@" instead of the
283         broken ""--\r\n%@" pattern.
284
285         * UI/MailPartViewers/UIxMailPartAlternativeViewer.m
286         We now favor text/calendar parts over text/html and
287         text/plain parts when viewing a multipart/alternative mail.
288         This allows us to show the email invitations coming from
289         Microsoft Outlook.
290
291         * UI/MailerUI/UIxMailAccountActions.m
292         Signature fix in -composeAction - see the comment
293         for SOGoMailReply.
294
295         * UI/MailPartViewers/UIxMailPartViewer.m
296         Modified -flatContentAsString to use UTF-8 as the
297         default fallback encoding for 8-bit content.
298
299         * SoObjects/Mailer/SOGoDraftObject.m
300         Modified _fillInReplyAddresses:replyToAll:envelope:
301         so that if there's no recipient, we add at least
302         ourself to the list.    
303         Fixed a mem leak in the same method.
304         
305 2007-11-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
306
307         * UI/MailPartViewers/UIxMailRenderingContext.m
308         ([UIxMailRenderingContext -viewerForBodyInfo:_info]): same as below.
309
310         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
311         -plainTextContentFetchKeys]): same as below.
312
313         * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
314         +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): accept the
315         application/ics type from Google Calendar.
316
317         * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
318         +distantFuture]): rewrote method to return an object that is
319         compatible with NSCalendarDate, unlike the implementation in
320         GNUstep.
321         ([NSCalendarDate +distantPast]): same as above.
322
323 2007-11-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
324
325         * UI/MailPartViewers/UIxMailPartHTMLViewer.m: fixed infinite loop
326         when charset is us-ascii, match it to ascii rather than none.
327
328         * SoObjects/Appointments/SOGoAppointmentFolder.m
329         ([SOGoAppointmentFolder
330         -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
331         added search on the c_title column too.
332
333         * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
334         -eventsListAction]): take the "search" url parameter into account.
335         ([UIxCalListingActions -eventsListAction]): fetch events matching
336         the title filter too.
337
338         * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -connectAction]): the
339         user infos are now posted as "application/x-www-form-urlencoded".
340         So we have to have like a form has been posted.
341
342 2007-11-21  Francis Lachapelle  <flachapelle@inverse.ca>
343
344         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
345         -calendarList]): also returns the calendar of the current
346         event. This is required so the proper calender is selected when
347         you view an event to which you don't have write access.
348
349         * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]): 
350         also returns true for super users.
351
352 2007-11-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
353
354         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
355         -lookupImap4BodyPartKey:inContext:]): return a correct body part
356         when "0" is requested, taking its mime-type into account.
357
358         * UI/MailPartViewers/UIxMailRenderingContext.m
359         ([UIxMailRenderingContext -flatContentForPartPath:_partPath]):
360         return content for part "0", which would be the message body.
361
362 2007-11-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
363
364         * UI/MailPartViewers/UIxMailPartHTMLViewer.m
365         ([_UIxHTMLMailContentHandler
366         -setContentEncoding:newContentEncoding]): new method that
367         specifies an xml charset to return to the parser.
368         ([UIxMailPartHTMLViewer -flatContentAsString]): specifies the
369         charset to the content handler before parsing.
370
371         * SoObjects/Appointments/SOGoAppointmentObject.m: don't take an
372         empty c_name as a valid response when looking up an event. Create
373         one in that case instead.
374
375 2007-11-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
376
377         * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -signature]):
378         returns the signature for the default identity of the default
379         accouunt...
380         ([UIxPreferences -setSignature:newSignature]): accessor that sets
381         the default signature.
382
383         * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
384         -composeAction]): append the message signature to the new draft.
385
386         * SoObjects/Mailer/SOGoMailReply.m ([SOGoMailReply -signature]):
387         same as above.
388
389         * SoObjects/Mailer/SOGoMailForward.m ([SOGoMailForward
390         -signature]): new method that takes the user's signature and put
391         it at the end of the message, if exists.
392
393         * UI/Common/UIxPageFrame.m ([UIxPageFrame -isSuperUser]): new
394         accessor that forwards the call to the active user.
395
396         * SoObjects/SOGo/SOGoUser.m ([SOGoUser -signature]): returns the
397         user default signature.
398         ([SOGoUser -isSuperUser]): declares whether the user is listed
399         among the super users.
400
401         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
402         -setComponent:newComponent]): retain the component object.
403         ([UIxComponentEditor -organizerIdentity]): new accessor method to
404         handle list of possible organizers.
405
406         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
407         -event]): retain the returned event object.
408
409         * SoObjects/Appointments/SOGoAppointmentObject.m
410         ([SOGoAppointmentObject -saveComponent:newEvent]): reset the
411         organizer only if there are no attendees AND the owner of the
412         component is not the organizer him-/herself.
413
414         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
415         -toolbar]): rewrote in a way that ensures that each case is
416         handled properly.
417
418         * SoObjects/SOGo/SOGoUser.m ([SOGoUser -isEqual:otherUser]): new
419         override method.
420
421         * UI/Scheduler/UIxTaskEditor.m ([-acceptAction])
422         ([-declineAction]): commented out unused methods.
423
424         * UI/MailPartViewers/UIxMailPartICalActions.m
425         ([UIxMailPartICalActions -deleteFromCalendarAction]): actually
426         delete the found object.
427
428 2007-11-18  Ludovic Marcotte <ludovic@inverse.ca>
429
430         * SoObjects/Mailer/SOGoMailBodyPart.m
431         SoObjects/Mailer/SOGoMailObject.m
432         UI/MailPartViewers/UIxMailPartViewer.m
433         Added support of messages containing non-textual
434         content and no parts.
435
436         * UI/MailerUI/UIxMailView.m
437         SoObjects/Mailer/SOGoMailObject.m
438         UI/Templates/MailerUI/UIxMailView.wox
439         Added support for the Reply-To header upon
440         message display.
441
442 2007-11-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
443
444         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]):
445         invoke saveComponent:.
446
447         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -hasOrganizer])
448         ([UIxComponentEditor -organizerName]): new template accessor
449         related to displaying the event's organizer.
450         ([-containsConflict:_component]): removed method.
451         ([UIxComponentEditor -takeValuesFromRequest:_rqinContext:_ctx]):
452         set RSVP to "TRUE" on each attendee.
453
454         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
455         -saveAction]): invoke saveComponent:.
456
457         * UI/MailPartViewers/UIxMailPartICalViewer.m
458         ([UIxMailPartICalViewer -isLoggedInUserTheOrganizer]): make use of
459         the -userIsOrganizer: category method.
460         ([-isLoggedInUserAnAttendee]): make use of -userIsParticipant:.
461         ([UIxMailPartICalViewer -hasSenderStatusChanged]): new template
462         accessor that determines whether the "Update" button should be
463         displayed.
464
465         * UI/MailPartViewers/UIxMailPartICalActions.m
466         ([UIxMailPartICalActions -deleteFromCalendarAction]): implemented
467         action.
468         ([UIxMailPartICalActions -updateUserStatusAction]): implemented
469         action.
470
471         * UI/Common/UIxPageFrame.m ([UIxPageFrame
472         -setCssFiles:newCSSFiles]): new accessor that enables the
473         sub-templates to specify extra CSS files to load.
474
475         * SoObjects/SOGo/SOGoUser.m ([SOGoUser
476         -homeFolderInContext:context]): cache the home folder of the user
477         object instead of the current user.
478
479         * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
480         -deleteEntriesWithIds:ids]): invokes the "prepareDelete" optional
481         method if the child object implements it.
482
483         * SoObjects/SOGo/SOGoContentObject.m ([-setContentString:])
484         removed method.
485
486         * SoObjects/SOGo/LDAPSource.m ([LDAPSource
487         -setBaseDN:newBaseDNIDField:newIDFieldCNField:newCNFieldUIDField:newUIDFieldmailFields:newMailFieldsandBindFields:newBindFields]):
488         take a new "mailFields" parameter defining an array of fields
489         where to look at when searching the user's emails. It defaults to
490         the standard "mail" LDAP field.
491
492         * SoObjects/Appointments/SOGoAptMailICalReply.[hm]: new
493         SoComponent implementing a template for ITIP replies.
494
495         * SoObjects/Appointments/iCalPerson+SOGo.m ([iCalPerson
496         -mailAddress]): new method that returns a properly formatted email
497         address for the specified person entry.
498         ([iCalPerson -uid]): new method that tests whether the user is
499         known to the system and if so, returns its user id.
500
501         * SoObjects/Appointments/iCalPerson+SOGo.[hm]: new category module.
502
503         * SoObjects/Appointments/iCalEventChanges+SOGo.m
504         ([iCalEventChanges -sequenceShouldBeIncreased]): determine whether
505         the changes involved need a sequence inscrease, based on the
506         RFC2446 (ITIP).
507
508         * SoObjects/Appointments/iCalEventChanges+SOGo.[hm]: new category
509         module.
510
511         * SoObjects/Appointments/iCalEvent+SOGo.m ([iCalEvent
512         -isStillRelevant]): new overriden method determining the relevance
513         of the current event based on its end date.
514
515         * SoObjects/Appointments/iCalEvent+SOGo.[hm]: new category module.
516
517         * SoObjects/Appointments/iCalEntityObject+SOGo.m
518         ([iCalEntityObject -attendeeUIDs]): new category methods that
519         returns an array containing the uids of the system-know attendees.
520         ([iCalEntityObject -isStillRelevant]): new template method.
521         ([iCalEntityObject -itipEntryWithMethod:method]): clone the
522         current entry calendar with the specified ITIP method.
523         ([iCalEntityObject -attendeesWithoutUser:user]): returns an array
524         of attendees while making sure the specified user is not listed.
525
526         * SoObjects/Appointments/SOGoCalendarComponent.m
527         ([SOGoCalendarComponent -calendar:create:secure]): new name for
528         -calendar:. Added a "secure" parameter that specifies whether a
529         stripped calendar instance is needed or not. Also, we no longer
530         cache the content to simplify handling of new data.
531         ([SOGoCalendarComponent -component:create:secure]): same as above.
532         ([SOGoCalendarComponent
533         -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
534         test whether the component is "still relevant" before sending an
535         email...
536         ([SOGoCalendarComponent -sendResponseToOrganizer]): new method for
537         sending ITIP replies.
538         ([SOGoCalendarComponent -getUIDsForICalPerson:iCalPerson]):
539         removed method. Replaced with -[iCalPerson uid] category method.
540
541         * SoObjects/Appointments/SOGoAppointmentObject.[hm]: rewrote
542         class. No longer override saveContentString:,
543         saveContentString:baseSequence:, .... Implemented the
544         saveComponent: and the prepareDelete methods instead. Those
545         methods are called only from the web methods. This avoids the
546         risks related to email sending and changes propagation.
547
548         * UI/Common/UIxTabItem.m: removed useless class module.
549
550         * UI/Common/UIxTabView.[hm]: removed useless class module.
551
552         * UI/Common/UIxPrintPageFrame.m: removed useless class module.
553
554         * UI/Common/UIxAppNavView.m: removed useless class module.
555
556 2007-11-16  Ludovic Marcotte <ludovic@inverse.ca>
557
558         * SoObjects/Mailer/SOGoMailBaseObject.m
559         Fixed typo.
560
561         * SoObjects/Mailer/SOGoMailBodyPart.m
562         We also grok image/jpeg and return the SOGoMailBodyPart
563         for attachments fetching.
564
565         * SoObjects/Mailer/SOGoMailObject+Draft.m
566         Prevent a crash in case body decoding failed during
567         a reply.
568
569         * SoObjects/Mailer/SOGoMailObject.m
570         Improved body decoding during a reply to also try
571         latin1 as an encoding.
572
573         * UI/MailPartViewers/UIxMailRenderingContext.m
574         Greatly improved the display mechanisms for emails.
575         Also properly consider the content disposition for
576         most content types.
577
578         * UI/MailerUI/UIxMailToSelection.m
579         Removed worthless code.
580
581         * UI/WebServerResources/MailerUI.css
582         CSS fix for table views.
583
584 2007-11-15  Ludovic Marcotte <ludovic@inverse.ca>
585
586         * UI/WebServerResources/MailerUI.js
587         We now check for empty selection and warn the
588         user about it when deleting messages
589  
590         * SoObjects/Mailer/SOGoDraftObject.m
591         Correctly check for the presence of a subject
592         before attempting to forward a message from
593         the Drafts folder.
594
595         * SoObjects/Mailer/SOGoMailObject+Draft.m
596         We no longer use "[Fwd: ]" but simply "Fwd:"
597         when forwarding email messages.
598  
599         * SoObjects/SOGo/SOGoUser.m
600         Modified the default forwarding format to be
601         inline instead of "attachment".
602  
603         * SoObjects/Mailer/SOGoDraftObject.m
604         We now create and use a NGMimeContentDispositionHeaderField
605         in order to avoid encoding the whole Content-Disposition
606         header in case a non-ASCII char is present!
607
608 2007-11-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
609
610         * SoObjects/SOGo/iCalEntityObject+Utilities.m ([iCalEntityObject
611         -findParticipant:user]): new method based on the one removed from
612         SOGoCalendarComponent below.
613
614         * SoObjects/SOGo/iCalEntityObject+Utilities.[hm]: new category
615         module for iCalEntityObject.
616
617         * SoObjects/Appointments/SOGoCalendarComponent.m
618         ([-findParticipant:user]): removed method.
619
620         * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
621         -setContentString:newContent]): new accessor method.
622         ([SOGoContentObject
623         -saveContentString:newContentbaseVersion:newBaseVersion]): invoke
624         -[self setContentString:].
625
626         * UI/MailPartViewers/UIxMailPartICalViewer.m
627         ([UIxMailPartICalViewer -authorativeEvent]): returns the most
628         up-to-date event.
629         ([-isLoggedInUserTheOrganizer]): make use of -[SOGoUser
630         hasEmail:].
631
632         * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
633         -stringByConvertingCRLNToHTML]): fixed crashes due to overflows in
634         temporary buffer we are handing.
635
636         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
637         -setComponent:newComponent]): check that newComponent is non-nil
638         before replacing the default values.
639         ([UIxComponentEditor -calendarList]): privacy is already an ivar.
640         We don't need to refetch it.
641
642 2007-11-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
643
644         * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
645         -fetchMailForReplying:sourceMailtoAll:toAll]): remove the current
646         user from the list of recipients and make sure no other address is
647         counted twice.
648
649         * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
650         -stringByConvertingCRLNToHTML]): build the returned NSString
651         without the ending \0.
652
653 2007-11-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
654
655         * UI/MailPartViewers/UIxMailPartICalViewer.m
656         ([UIxMailPartICalViewer -acceptLink])
657         ([UIxMailPartICalViewer -declineLink])
658         ([UIxMailPartICalViewer -tentativeLink]): removed useless methods.
659
660         * UI/MailPartViewers/UIxMailPartICalAction.m
661         ([UIxMailPartICalAction -addToCalendarAction])
662         ([UIxMailPartICalAction -deleteFromCalendarAction]): new stub
663         methods.
664
665         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
666         -lookupImap4BodyPartKey:]): make use of the new method below.
667
668         * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
669         +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): new method
670         that returns an appropriate Class depending on a given mime type.
671
672         * UI/SOGoUI/UIxComponent.m ([UIxComponent -canCreateOrModify]):
673         new boolean accessor that determines whether someone can create
674         (i.e. modify a new entry) or modify an existing entry.
675
676         * SoObjects/SOGo/SOGoObject.m ([SOGoObject
677         -lookupName:lookupNameinContext:localContextacquire:acquire]):
678         overriden method to bind looked up keys to So methods but by
679         avoiding a call to toOneRelationshipKeys. This will be the top
680         method of the chain, meant to override SoObject's behaviour.
681
682         * SoObjects/Contacts/SOGoContactLDAPFolder.m
683         ([SOGoContactLDAPFolder
684         -lookupName:objectNameinContext:lookupContextacquire:acquire]):
685         removed hack to prevent [super lookupName...] to read the entire
686         LDAP directory when looking up a record.
687
688 2007-11-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
689
690         * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
691         +folderWithSubscriptionReference:referenceinContainer:aContainer]):
692         fixed a leak.
693
694         * UI/MailPartViewers/UIxMailPartHTMLViewer.m
695         ([UIxMailPartHTMLViewer -_attachmentIds]): the reference was one
696         character too short, which cause the images not to be displayed
697         sometimes and crashes to happen whenever the references on a
698         message were wrong (due to bugs in SOPE).
699
700         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
701         -hasMessageAttachment]): consider an attachment any content that
702         has a non-nil disposition.
703
704         * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
705         -newFolderWithName:nameandNameInContainer:newNameInContainer]):
706         fixed method to make use of the parameters instead of the useless
707         remains that weren't even initialized.
708
709         * SoObjects/Appointments/SOGoAppointmentObject.m
710         ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
711         don't propagate the event among the attendees if this is not an
712         "so" request.
713         ([SOGoAppointmentObject -deleteWithBaseSequence:]): same as above.
714
715         * Main/SOGo.m ([SOGo -authenticatorInContext:context]): make use
716         of the new category method below.
717
718         * SoObjects/SOGo/WORequest+SOGo.m ([WORequest
719         -handledByDefaultHandler]): new method that returns whether this
720         is an "so" or alike request.
721
722         * SoObjects/SOGo/WORequest+SOGo.[hm]: new category module.
723
724         * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
725         -newFolderWithName:nameandNameInContainer:newNameInContainer]):
726         write the new folder's name in the folder cache.
727
728         * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
729         -calendars]): same as below.
730
731         * UI/Contacts/UIxContactsListViewContainer.m
732         ([UIxContactsListViewContainer -currentContactFolderName]):
733         translate the display name if its the default one.
734
735         * SoObjects/Appointments/SOGoAppointmentFolder.m
736         ([SOGoAppointmentFolder -create]): overriden method that invokes
737         its ancestor and then activate itself within the user settings.
738
739         * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
740         -appendPersonalSources]): when the user is the owner of the
741         current folder, we create the "personal" folder if it doesn't
742         exist by invoking "create".
743
744         * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
745         -primaryFetchProfile]): when no row is returned, we initialize
746         "values" to a new dictionary. This solves a bug where the defaults
747         would not be initialized properly.
748
749 2007-11-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
750
751         * SoObjects/SOGo/SOGoGCSFolder.m ([-compare:otherFolder]): method
752         moved into the SOGoFolder class.
753
754         * SoObjects/Appointments/SOGoAppointmentObject.m
755         ([SOGoAppointmentObject -saveContentString:_iCalinUIDs:_uids]):
756         simplified method by directly building a similar appointment
757         object with the current folder as container.
758
759         * SoObjects/Contacts/SOGoContactLDAPFolder.m
760         ([SOGoContactLDAPFolder
761         -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
762         take the content of an object returned by
763         lookupName:inContext:acquire: instead of the dictionary passed as
764         parameter since it represents a flattened entry return by
765         lookupContactsWithFilter...
766
767         * SoObjects/Contacts/SOGoFolder+CardDAV.m: NSObject+CardDAV
768         category renamed to SOGoFolder+CardDAV.
769
770         * SoObjects/SOGo/SOGoParentFolder.m: no longer a subclass of
771         SOGoObject, but of SOGoFolder instead.
772
773         * SoObjects/SOGo/SOGoUserFolder.m: no longer a subclass of
774         SOGoGCSFolder, but of SOGoFolder instead.
775
776         * SoObjects/Appointments/SOGoAppointmentFolder.m
777         ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): fixed
778         to take the new SOGoParentFolder class into account. Also, create
779         the personal folder if it doesn't exist.
780
781         * SoObjects/SOGo/SOGoFolder.[hm]: new class module implementing
782         the parent of all SOGo containers.
783
784         * SoObjects/SOGo/SOGoGCSFolder.[hm]: SOGoFolder class renamed to
785         SOGoGCSFolder.
786
787 2007-11-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
788
789         * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection
790         -getAddressesFromFormValues:_dict]): take NSString and NSArray
791         values. Ignore addresses with a length of 0.
792
793         * SoObjects/SOGo/SOGoUser.m ([SOGoUser -mailAccounts]): we now
794         fetch the accounts from the user defaults and create default
795         values if missing.
796
797 2007-11-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
798
799         * UI/MailPartViewers/UIxMailPartTextViewer.m
800         ([UIxMailPartTextViewer -flatContentAsString]): re-added
801         conversion of line-break to sequences of HTML "BR", with a fast
802         algorithm in C.
803
804         * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
805         -flatContentAsString]): simplified method now that we know
806         -[NSString stringWithData:usingEncodingNamed:] has a more robust
807         implementation.
808
809         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
810         -showToAddress]): the answer is cached.
811
812         * UI/Common/UIxObjectActions.m ([UIxObjectActions +initialize]):
813         read "SOGoACLsSendEMailNotifications" from the user defaults to
814         determiner whether to send an email when a user is added or
815         removed from an object's acl.
816
817         * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
818         -contentForEditing]): make sure the htmlContent flag is set to NO
819         when we select the textual part. Also we select only the relevant
820         keys for fetching.
821
822         * UI/MailerUI/WOContext+UIxMailer.m ([-mailSubjectFormatter]):
823         removed method.
824
825         * UI/MailerUI/UIxMailView.m ([UIxMailView -messageSubject]): new
826         method replacing -objectTitle, written like the ones below.
827
828         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
829         -messageSubject]): rewrote method to act the one below.
830
831         * UI/MailPartViewers/UIxMailPartMessageViewer.m
832         ([UIxMailPartMessageViewer -messageSubject]): new method that
833         returns the decoded mail subject or "Untitled" if the subject is
834         empty.
835
836         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
837         -decodedSubject]): new method that invoke -decodedSubject from the
838         NSString and NSData class, depending on the identity of the
839         subject obtained from the envelope.
840
841         * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
842         -subjectForReply]): take the value of -[SOGoMail decodedSubject]
843         instead of the subject of the envelope.
844         ([SOGoMailObject -filenameForForward]): same as above.
845         ([SOGoMailObject -subjectForForward]): same as above.
846
847         * SoObjects/Mailer/NSString+Mail.m ([NSString -decodedSubject]):
848         same as below for NSString.
849
850         * SoObjects/Mailer/NSData+Mail.m ([NSData -decodedSubject]): new
851         method that decodes the subject of a mail taken as an NSData
852         instance. Handling the exceptions and the badly formatted headers.
853
854         * UI/MailerUI/UIxSubjectFormatter.[hm]: dropped class module.
855
856 2007-11-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
857
858         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
859         -deleteEntriesWithIds:ids]): make sure the objects returned by
860         lookupName:... are not instances of NSException.
861
862 2007-11-03  Ludovic Marcotte  <ludovic@inverse.ca>
863
864         * UI/Scheduler/UIxAppointmentEditor.m
865         Fixed monthly recurrences support. 
866
867 2007-11-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
868
869         * SoObjects/Appointments/SOGoAppointmentObject.m
870         ([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
871         sent when modifying an event, when the event was considered
872         relevant. The same thing is now implemented for event deletion.
873
874         * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
875         -primaryFetchProfile]): make sure that the deserialized "values"
876         is an instance of NSMutableDictionary, otherwise we override it
877         with one.
878
879         * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
880         -contentForReply]): make use of the SOGoMailReply WO page.
881
882         * SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
883         from SOGoMailForward to handle mail replies instead. Only three
884         methods remaining: date, from and messageBody. The latter is
885         quoted properly.
886
887         * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
888         -fetchMailForForwarding:sourceMail]): fetch attachments for
889         forwarded messages.
890
891         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
892         -hasMessageAttachment]): initialize hasAttachment with "NO" to
893         avoid false positives.
894
895         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
896         ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
897         set title to an empty string where the event/task summary is null.
898
899         * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
900         -setHeaders:newHeaders]): make sure there is a message id in the
901         headers dictionary, if not, generate one.
902         ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
903         message id from the existing draft.
904         ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
905         message id in the header map.
906
907         * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
908         -deleteFolderAction]): no longer prefix the target folder with
909         "folder".
910
911         * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
912         -listMailboxesAction]): base the folder type on the folder
913         traversal path.
914
915         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
916         -lookupName:_keyinContext:acquire:_acquire]): compare the full
917         traversal to the potential looked up folder with the special
918         folder names and return an object with the appropriate
919         SOGoMailFolder subclass.
920
921         * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
922         -traversalFromMailAccount]): don't prepend the whole string with
923         "/".
924
925         * SoObjects/Mailer/SOGoMailAccount.m
926         ([-lookupSentFolder:_keyinContext:_ctx])
927         ([-lookupDraftsFolder:_keyinContext:_ctx])
928         ([-lookupTrashFolder:_keyinContext:_ctx])
929         ([-lookupFiltersFolder:_key:_ctx]): removed methods.
930         ([SOGoMailAccount -inboxFolderNameInContext:])
931         ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
932         ([SOGoMailAccount -sentFolderNameInContext:])
933         ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
934         the resulting name with "prefix" since we might return a nested
935         foldername.
936         ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
937         names with "/". Sorts the resulting folder list with
938         localizedCaseInsensitiveCompare: instead of
939         caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
940         that were removed, instead, we choose the appropriate class
941         depending on the folder name. And since we are in SOGoMailAccount,
942         we don't have to compute a traversal path to match the key with
943         the foldernames.
944         ([SOGoMailAccount
945         -folderWithTraversal:traversalandClassName:className]): new method
946         that returns an instance of the specified SOGoMailFolder subclass,
947         based on the traversal path passed as parameter.
948         ([SOGoMailAccount -inboxFolderInContext:_ctx])
949         ([SOGoMailAccount -draftsFolderInContext:_ctx])
950         ([-sentFolderInContext:_ctx])
951         ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
952         -folderWithTraversal:andClassName: method described above.
953
954         * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
955         -primaryFetchProfile]): make use of -[NSPropertyListSerialization
956         propertyListFromData:mutabilityOption:format:errorDescription:] to
957         deserialize the plist. Removed variant for libFoundation since it
958         should support the above.
959         ([AgenorUserDefaults -generateSQLForInsert])
960         ([AgenorUserDefaults -generateSQLForUpdate]): make use of
961         -[NSPropertyListSerialization
962         dataFromPropertyList:format:errorDescription:] to serialize the
963         plist. Removed variant for libFoundation since it should support
964         the above. Escape the backslashes from the resulting string.
965
966 2007-10-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
967
968         * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
969         SOGoMailFolder: SOGoMailSpecialFolder.
970
971         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
972         -traversalFromMailAccount]): overridden method that returns the
973         initialized mutable string.
974         ([SOGoMailAccount -allFolderPaths]): take the special folder paths
975         with -traversalFromMailAccount and reposition them at the
976         beginning of the list. By creating the special folders during that
977         request, we also make sure that the folder exists thanks to the
978         new initialisation method of the new "SOGoSpecialMailFolder"
979         class.
980         ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
981         method.
982         ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
983         method.
984         ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
985         longer use lookupImap4Folder.
986         ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
987         method.
988
989         * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
990         -traversalFromMailAccount]): new method that returns the full
991         IMAP4 path to the object.
992
993         * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
994         "superUsernames" after fetching it from the ud.
995
996 2007-10-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
997
998         * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
999         -eventsListAction]): substitude the start and end date with their
1000         UTC counterpart, taking into account the offset from UTC related
1001         to those dates instead of the current one. This renders
1002         -[UIxCalMainView -userUTCOffset] obsolete because the computings
1003         that occured in javascript are now done server-side.
1004
1005         * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
1006         removed obsolete method.
1007
1008         * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
1009         method converting html content to plain text.
1010
1011         * SoObjects/Mailer/NSString+Mail.[hm]: new category module
1012         enhancing NSString with utility methods pertaining to mail handling.
1013
1014         * SoObjects/Mailer/SOGoMailObject.m
1015         ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
1016         ([SOGoMailObject
1017         -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
1018         modified method to be always recursive and to take an array of the
1019         accepted mime-types as parameter. The returned array now contains
1020         the mime-type as well as the part keys.
1021
1022         * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1023         -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
1024         ([SOGoMailObject -contentForEditing]): rewrote method to take into
1025         account the first text/plain part or the first text/html part
1026         converted to text/plain with our new -[NSString htmlToText]
1027         category method.
1028
1029         * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
1030         "replyToAll:" with YES as parameter instead of NO.
1031
1032 2007-10-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1033
1034         * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1035         -davContentType]): ignore any possible parameter taken from the
1036         mime-info of the body part.
1037
1038         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1039         -lastFirstMessageNumber]): new accessor that returns the first
1040         message number of the last series of messages.
1041         ([UIxMailListView -fetchKeys]): request the bodystructure for each
1042         listed message.
1043         ([UIxMailListView -hasMessageAttachment]): extract the attachment
1044         information from the message bodystructure.
1045
1046 2007-10-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1047
1048         * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1049         -GETAction:]): use the "application/octet-stream" mime type for
1050         elements of type "application/x-xpinstall" to avoid confusing
1051         Firefox.
1052
1053         * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
1054         ([UIxPreferences -itemMessageCheckText])
1055         ([UIxPreferences -userMessageCheck])
1056         ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
1057         methods for handling the retrieval of new messages automatically.
1058
1059         * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
1060         that returns the interval of time between automatic message
1061         retrievals.
1062
1063         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1064         -defaultAction]): now expunges the last folder marked for expunge.
1065
1066         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1067         -trashInContext:_ctx]): now marks the container folder for
1068         expunge.
1069
1070         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1071         -markForExpunge]): new method that marks the folder for the next
1072         automatic expunge operation in the user settings.
1073         ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
1074         takes the last folder marked for expunge, expunges it and removes
1075         it from the user settings, if it exists.
1076
1077 2007-10-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1078
1079         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1080         -messageSubjectCellStyleClass]): added support for replied,
1081         forwarded, forwarded and replied mails.
1082
1083         * SoObjects/Mailer/NSData+Mail.m ([NSData
1084         -bodyDataFromEncoding:encoding]): new utility method that decodes
1085         the NSData instance properly depending on the encoding string
1086         passed as parameter.
1087
1088         * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1089         -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
1090
1091         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1092         -stringForData:_datapartInfo:_info]): simplified by invoking
1093         -bodyDataFromEncoding: from our new NSData category methods.
1094
1095         * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1096         -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
1097         where only the body part of the first of the keys fetched was
1098         returned. Also decodes the body parts properly following their
1099         encoding.
1100
1101         * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
1102         extends the NSData class with utility methods useful for handling
1103         mail.
1104
1105 2007-10-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1106
1107         * SoObjects/SOGo/NSArray+Utilities.m
1108         ([NSArray -stringsWithFormat:format]): replace instances of NSNull
1109         with empty strings.
1110
1111         * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1112         -keysWithFormat:keyFormat]): replace instances of NSNull with
1113         empty strings.
1114
1115         * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
1116         empty, use "c_cn" instead.
1117
1118         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1119         ([SOGoMailAccount -draftsFolderInContext:_ctx])
1120         ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
1121         of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
1122         no always be specified from the root instead of sometimes from the
1123         INBOX.
1124
1125 2007-10-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1126
1127         * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
1128         ([UIxPageFrame -productLocalizableStrings]): invoke the new
1129         +[SOGoUser language] method if the user is nil.
1130
1131         * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
1132         that returns any generically-found language.
1133         ([SoUser -language]): modified to call the above.
1134         ([SOGoUser -language]): modified to call the above if the user
1135         language has a null length.
1136
1137         * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
1138         -davEntityTag]): modified to return the "hash" of the vCard string.
1139
1140         * UI/MailerUI/UIxMailActions.m ([UIxMailActions
1141         -removeAllLabelsAction]): new method that removes all label flags
1142         from the associated message.
1143         ([UIxMailActions -addLabel1Action]
1144         [UIxMailActions -addLabel2Action]
1145         [UIxMailActions -addLabel3Action
1146         [UIxMailActions -addLabel4Action]
1147         [UIxMailActions -addLabel5Action]): new methods that adds label
1148         flags to the associated message.
1149         ([UIxMailActions -removeLabel1Action]
1150         [UIxMailActions -removeLabel2Action]
1151         [UIxMailActions -removeLabel3Action
1152         [UIxMailActions -removeLabel4Action]
1153         [UIxMailActions -removeLabel5Action]): new methods that removes
1154         label flags from the associated message.
1155
1156         * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
1157         new accessor that returns the labels associated with the message.
1158
1159         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1160         -allFolderPaths]): new method that returns all the paths of all
1161         the subfolders of the folder object.
1162         ([SOGoMailFolder -allFolderURLs]): new method replacing
1163         subfoldersURL.
1164
1165         * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1166         -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
1167         role from its parent folder.
1168
1169 2007-10-19  Francis Lachapelle  <flachapelle@inverse.ca>
1170
1171         * SoObjects/SOGo/SOGoUser.m 
1172         ([SOGoUser -rolesForObject:objectinContext:context]): allow
1173         multiple super usernames to be defined. The user default 
1174         SOGoSuperUsername is renamed SOGoSuperUsernames and must be
1175         an array.
1176
1177 2007-10-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1178
1179         * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1180         -userInContext:]): override the super method by returning
1181         anonymous if the super returns nil.
1182
1183         * UI/Common/UIxPageFrame.m ([UIxPageFrame
1184         -productLocalizableStrings]): new method that returns the
1185         product-specific translation dictionary as a JSON hash.
1186         ([UIxPageFrame -commonLocalizableStrings]): same as above but for
1187         the "Common" framework.
1188         ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
1189         the requestor components to require additional Javascript files.
1190         This is useful now that all the scripts are loaded at the end of
1191         the HTML code.
1192         ([UIxPageFrame -additionalJSFiles]): new getter related to the
1193         above.
1194
1195 2007-10-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1196
1197         * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
1198         implemented new web method.
1199
1200         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1201         -copyToFolderNamed:folderNameinContext:]): new method with the
1202         code cut/pasted from -moveToFolderNamed:inContext:.
1203         ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
1204         modified to use the code from -copyToFolderNamed:inContext:, which
1205         is common between the two actions.
1206
1207         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1208         ([SOGoMailAccount -sentFolderNameInContext:])
1209         ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
1210         the user settings into account.
1211
1212         * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
1213         ([UIxMailFolderActions -setAsSentFolderAction])
1214         ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
1215         that change the purpose of the active folder to "Sent", "Drafts"
1216         or "Trash".
1217
1218         * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]): 
1219         returns the subject as quoted-printable.
1220
1221         * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
1222         SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
1223         the "aclMethod" method for the subsequent language-dependent
1224         subclasses.
1225
1226         * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
1227         returns the subject as quoted-printable.
1228
1229         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1230         -dealloc]): release item, aptStartDate and aptEndDate.
1231
1232 2007-10-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1233
1234         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1235         -initWithName:newNameinContainer:newContainer]): the owner of a
1236         shared folder is set to "nobody" by default.
1237
1238         * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
1239         that returns whether the object has an owner or not.
1240
1241 2007-10-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1242
1243         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1244         the folder even if the current user is not its owner.
1245
1246 2007-10-10  Ludovic Marcotte  <ludovic@inverse.ca>
1247
1248         * We now send advisory emails when folders
1249           are created / deleted.
1250
1251         * Fixed the sending of advisory emails upon
1252           ACL changes on folders.
1253
1254 2007-10-10  Ludovic Marcotte  <ludovic@inverse.ca>
1255
1256         * UI/Scheduler/UIxComponentEditor.m
1257         Implemented event/task priority support.
1258
1259         * SoObjects/Contacts/SOGoContactGCSFolder.m
1260         Added CardDAV support. 
1261
1262         * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
1263         Implemented From: based on LDAP results based on
1264         the MailFieldNames attribute (an array) specified
1265         in every LDAP-based authentication sources.
1266
1267         * UI/MailPartViewers/UIxMailPartTextViewer.m and
1268           UI/WebServerResources/MailerUI.css
1269         We avoid replacing "\r\n" and "\n" with <br /> and
1270         rather use CSS capabilities for proper formatting.
1271         This is _WAY_ faster on very large mails.
1272  
1273 2007-10-10  Francis Lachapelle  <flachapelle@inverse.ca>
1274
1275         * UI/Scheduler/UIxComponentEditor.m
1276         ([UIxComponentEditor -componentCalendar]): returns the calendar
1277         object of the current event.
1278
1279 2007-10-05  Ludovic Marcotte  <ludovic@inverse.ca>
1280
1281         * UI/WebServerResources/MailerUI.js
1282         We check if at least one message is selected
1283         before performing a Reply/Reply All/Forward
1284         
1285         * SoObjects/Appointments/SOGoAppointmentFolder.m
1286         and others - implemented support for recurring
1287         events (with some known limitations right now,
1288         all soon to be fixed).
1289         
1290 2007-10-04  Francis Lachapelle  <flachapelle@inverse.ca>
1291
1292         * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
1293         the constraint that a username can't start with a digit.
1294
1295 2007-10-02  Francis Lachapelle  <flachapelle@inverse.ca>
1296
1297         * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
1298         repository to Inverse's branch.
1299
1300 2007-09-28  Francis Lachapelle  <flachapelle@inverse.ca>
1301
1302         * SoObjects/Mailer/SOGoDraftObject.m 
1303         ([SOGoDraftObject -isValidAttachmentName:_name]): removed
1304         constraint on space in file name.
1305         ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
1306         now removes from file name all characters preceding a backslash.
1307         This happens with IE7 because the complete attachment file path
1308         is sent.
1309
1310 2007-09-25  Francis Lachapelle  <flachapelle@inverse.ca>
1311
1312         * SoObjects/Appointments/SOGoAptMailNotification.m 
1313         ([SOGoAptMailNotification -appointmentURL]): set personal as the
1314         default calendar where to add the event.
1315
1316         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]): 
1317         activate the SOGoUIxDefaultModule user defaults.
1318
1319 2007-09-21  Francis Lachapelle  <flachapelle@inverse.ca>
1320
1321         * UI/SOGoUI/UIxComponent.m 
1322         ([UIxComponent -shortUserNameForDisplay]): returns the string
1323         "wrongusernamepassword" when authentication failed.
1324
1325 2007-09-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1326
1327         * UI/MailPartViewers/UIxMailPartICalViewer.m
1328         ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
1329         entry of the Calendars parent folder.
1330
1331         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1332         -messageSubject]): new accessor method to work-around a problem
1333         within SOPE where a subject could be returned as an NSData.
1334
1335         * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1336         -appendPersonalSources]): make sure the value of the "c_path4" of
1337         the returned rows are not NSNull, otherwise, discard them.
1338
1339 2007-09-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1340
1341         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1342         -compare:otherFolder]): new overriden method that compares two
1343         contact foldes based on their class and then transfer the control
1344         to the super method in SOGoFolder.
1345
1346         * SoObjects/Contacts/SOGoContactLDAPFolder.m
1347         ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
1348         compare two contact folders based on their class and then their
1349         display name.
1350
1351         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
1352         new method for sorting folders. The folders are compared based on
1353         their ownership, whether they are a main folder and finally
1354         depending on their display name.
1355
1356         * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1357         -pathArrayToSOGoObject]): do not reorder the paths if the third
1358         element is an instance of NSNull.
1359
1360         * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1361         -subFolders]): returns a sorted array using the "compare:"
1362         selector.
1363
1364 2007-09-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1365
1366         * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1367         -calendars]): also returns the owner of the listed folders.
1368
1369         * SoObjects/Appointments/SOGoAppointmentFolder.m
1370         ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
1371
1372         * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
1373         method into UIxFolderActions.
1374
1375         * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1376         -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
1377         freebusy info from the "personal" calendar.
1378
1379         * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
1380         -createFolderAction]): new standardized method for requesting
1381         folder creations among gcs-based modules.
1382
1383         * UI/Common/UIxParentFolderActions.[hm]: new action class module.
1384
1385         * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
1386         module, equivalent to the SOGoParentFolder's child
1387         SOGoContactFolders, but for calendars.
1388
1389         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
1390         method that returns translated strings for controller bundles
1391         (same as what UIxComponent does for view bundles).
1392         ([SOGoObject -pathArrayToSOGoObject]): new method that returns
1393         the real path to a subscribed folder (if subscribed).
1394         ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
1395         ([SOGoObject -globallyUniqueObjectId]): new instance method
1396         calling its class equivalent.
1397
1398 2007-09-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1399
1400         * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
1401         whether the user is logged in and if so, redirect to his/her
1402         homepage.
1403         ([SOGoRootPage -appendToResponse:inContext:]): removed useless
1404         method.
1405
1406 2007-09-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1407
1408         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1409         +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1410         new method.
1411         ([SOGoFolder -displayName]): new method.
1412         ([SOGoFolder -delete]): accept to proceed only if nameInContainer
1413         != "personal".
1414
1415         * SoObjects/Contacts/SOGoContactLDAPFolder.m
1416         ([SOGoContactLDAPFolder
1417         +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1418         renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
1419
1420         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1421         +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1422         removed method, reimplemented in SOGoFolder.
1423         ([SOGoContactGCSFolder -displayName]): removed method,
1424         reimplemented in SOGoFolder.
1425         ([-delete]): removed method, modified in SOGoFolder.
1426
1427         * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
1428         a subclass of SOGoParentFolder.
1429
1430         * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
1431         from SOGoContactFolders and modified to be more content-independent.
1432
1433         * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
1434         ([UIxMailActions -markMessageReadAction]): new methods moved from
1435         UIxMailListView and adapted to invoke the client object directly,
1436         since the previous versions had to to a lookup from the parent
1437         SOGoMailFolder.
1438
1439         * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
1440         method into UIxMailActions.
1441         ([-markMessageReadAction]): same as above.
1442         ([-viewAction]): removed useless method.
1443         ([-javaScriptOK]): removed useless method.
1444         ([-isJavaScriptRequest]): removed useless method.
1445         ([-lookupActiveMessage]): removed useless method.
1446
1447         * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1448         -responseWithStatus:status]): new method that returns a WOResponse
1449         initialized with the specified status code.
1450         ([WODirectAction -responseWith204]): new method that invokes the
1451         above one with "204" as parameter.
1452         ([WODirectAction -redirectToLocation:newLocation]): rewrote method
1453         to make use of -responseWithStatus:.
1454
1455         * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
1456         method that returns a WOResponse initialized with the 204 status
1457         code.
1458         
1459         * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
1460         always use a "not deleted" search qualifier along with the user
1461         qualifier (if present).
1462
1463 2007-09-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1464
1465         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1466         -contactSearchAction]): only return the records which have an
1467         email set.
1468
1469         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1470         -trashInContext:_ctx]): no longer expunge the mailbox after
1471         marking a message deleted.
1472         ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
1473         as above.
1474
1475         * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
1476         ([-trashAction]): moved method into UIxMailActions.
1477         ([-moveAction]): moved method into UIxMailActions.
1478
1479 2007-09-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1480
1481         * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1482         ([_UIxHTMLMailContentHandler
1483         -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
1484         comments from the CSS code, do not add the CSS code to the body
1485         content and remove references of body from the CSS declarations.
1486         ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
1487         ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
1488         common with cssContent in a different method and invoke it only
1489         once.
1490
1491         * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
1492         instead of UIxPageFrame.
1493
1494 2007-09-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1495
1496         * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
1497         ([-appendToResponse:responseinContext:ctx]): commented out.
1498         ([SOGoRootPage -connectURL]): new accessor that returns the full
1499         url the the "connect" method.
1500         ([-connectAction]): rewrote method to return a properly formatted
1501         auth. cookie based on the username and password passed as
1502         parameter.
1503
1504         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1505         set the value of the cookie to "discard" and set its expiration
1506         date to yesterday.
1507
1508         * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1509         -preprocessCredentialsInContext:context]): consider the user
1510         anonymous if the cookie value is "discard".
1511         ([SOGoWebAuthenticator
1512         -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1513         set the expiration date of the cookie to yesterday.
1514
1515         * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
1516         returns the path to the application if the clientObject is not a
1517         SOGoObject.
1518
1519         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
1520         moved the requirement of authentication from the SOGo application
1521         class to here.
1522
1523         * SoObjects/Appointments/SOGoAppointmentObject.m
1524         ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
1525         check whether the new appointment object is still relevant before
1526         sending a notification.
1527
1528 2007-09-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1529
1530         * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1531         -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1532         render the login page through the SoDefaultRenderer.
1533
1534         * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
1535         -isPublicInContext:localContext]): new overriden method that
1536         returns YES.
1537
1538         * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1539         -currentCalendarLogin]): replace css-unsafe characters with _.
1540
1541         * UI/SOGoUI/UIxComponent.m ([UIxComponent
1542         -shortUserNameForDisplay]): simplified method.
1543         ([-user]): removed method since [context activeUser] is as useful.
1544
1545 2007-09-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1546
1547         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1548         set the cookie path to "/".
1549
1550         * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
1551         authenticator based on the request handler key. "dav" returns the
1552         SOGoDAVAuthenticator, anything else returns the Web authenticator.
1553
1554         * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
1555         "SOGoAuthenticator".
1556
1557         * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
1558         implementing a subclass of SoCookieAuthenticator, designed for
1559         web-based cookie authentication of users.m
1560
1561         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1562         new method that resets the authentification cookie.
1563
1564 2007-08-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1565
1566         * SoObjects/SOGo/LDAPSource.m ([LDAPSource
1567         -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
1568         didBind to NO to make sure no false authentication is returned if
1569         the bind operation is not executed.
1570
1571 2007-08-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1572
1573         * SoObjects/Mailer/SOGoDraftObject.m: added support for the
1574         "In-Reply-To" header field when replying.
1575
1576         * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
1577         table field names that are queried.
1578
1579         * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1580         -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
1581         add the "c_" prefix to the quick table field names that are
1582         queried.
1583
1584 2007-08-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1585
1586         * SoObjects/Appointments/SOGoAppointmentFolder.m
1587         ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
1588         "personal" to the ocs path of the appointment folder.
1589
1590         * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1591         -flatContentAsString]): use latin1 when the encoding is not
1592         specified, and to reencode data chunk which were not correctly
1593         decoded with the original charset.
1594
1595         * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
1596         ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
1597         ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
1598         ([SOGoAppointmentFolder
1599         -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
1600         override those methods to use the "personal" additional directory.
1601
1602         * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
1603         append "/personal" to the calendar path to simulate a single
1604         calendar in a choice of many.
1605
1606         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1607         -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
1608         methods back here. Moved the folder existence check here, and do
1609         it on self only when the lookup happens for a non-folder object.
1610         This permits to accept entries for folders with parents who
1611         don't really exist.
1612
1613 2007-08-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1614
1615         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1616         -shouldTakeValuesFromRequest:requestinContext:context]): same as
1617         below.
1618
1619         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1620         -shouldTakeValuesFromRequest:requestinContext:context]):
1621         redesigned method since any method called can be received from a
1622         POST or a GET. Instead we check the method call itself and we
1623         accept only if it has the "save" prefix.
1624
1625         * SoObjects/Appointments/SOGoAptMailNotification.m
1626         ([SOGoAptMailNotification -getSubject]): returns the subject an a
1627         quoted-printable encoded string, if needed.
1628
1629         * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1630         -asQPSubjectString:encoding]): moved method into
1631         NSString+Utilities.m.
1632
1633 2007-08-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1634
1635         * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1636         -messageForwardingList])
1637         ([UIxPreferences -itemMessageForwardingText])D
1638         ([UIxPreferences -userMessageForwarding])
1639         ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
1640         new template methods for manage the user preference regarding
1641         message forwarding.
1642
1643         * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
1644         algorithm to return, in order, the user's defined language or the
1645         first browser language or, finally, the default language.
1646         ([SOGoUser -messageForwarding]): new method that returns the user
1647         preference for message forwarding: "inline" or "attached",
1648         defaulting to "attached".
1649
1650         * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1651         -contentForInlineForward]): new method that returns the content of
1652         the message for inline forwarding based on the SOGoMailForward
1653         templates.
1654
1655         * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1656         -fetchMailForForwarding:sourceMail]): check the user preference
1657         for message forwarding and compose inline forwarded messages if required.
1658
1659         * SoObjects/Appointments/SOGoCalendarComponent.m
1660         ([SOGoCalendarComponent
1661         -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1662         now use a template based on the language returned from the
1663         SOGoUser object.
1664
1665         * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
1666         a subclass of SOGoMailForward for English locale.
1667
1668         * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
1669         a subclass of SOGoMailForward for French locale.
1670
1671         * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
1672         helps build template for inline forwarded messages.
1673
1674 2007-08-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1675
1676         * UI/SOGoElements/SOGoIEConditional.m: new extension module class
1677         to handle "<var:if-ie>" template tags.
1678
1679         * UI/SOGoElements: new extension bundle containing sogo-specific
1680         dynamic elements.
1681
1682         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1683         -takeValuesFromRequest:_rqinContext:_ctx]): save the category
1684         selected in the dialog.
1685         ([UIxComponentEditor -setComponent:newComponent]): retrieve the
1686         first category, if ever, of the calendar entity.
1687
1688         * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1689         -composeAction]): restored method since it is needed by the
1690         address book.
1691
1692         * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1693         -composeAction]): the address fields should be arrays and not
1694         simple strings.
1695
1696         * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
1697         that returns the build date of SOGo in the template.
1698
1699 2007-08-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1700
1701         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1702         -_flattenedRecords:records]): when the c_cn field is empty,
1703         returns set a formatted string with the concatenation of
1704         c_givenname and c_sn as the displayName.
1705
1706         * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1707         -isValidMailAccountName:_key]): prevent unknown accounts from
1708         being accessed.
1709
1710         * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1711         -pathToAttachmentObject]): we no longer need the filename
1712         extension for SoLookup...
1713
1714         * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1715         -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
1716         filename to have an extension, and thus accept any filename.
1717
1718         * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1719         -currentCName]): new method that returns the c_name of the
1720         contact, correctly escaped to be passed by url afterwards.
1721
1722         * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1723         ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
1724         instance of [self decodedFlatContent] instead of the buggy
1725         NSString from [super flatContentAsString] to the parser.
1726
1727 2007-08-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1728
1729         * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
1730         new category method to reponds to the "delete" web command on
1731         drafts.
1732         ([UIxMailActions -deleteAttachmentAction]): new category method to
1733         reponds to the "deleteAttachment" web command on drafts, taking
1734         the "filename" url parameter into account.
1735
1736         * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1737         -contentForEditing]): new method that retrieve the editable mail
1738         content.
1739         ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
1740         returns the body keys for attached files (parts with a "filename"
1741         attribute).
1742
1743         * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1744         -asQPSubjectString:encoding]): do not change the string if the
1745         encoded string has the same length (which means it is already
1746         7bit-safe).
1747         ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
1748         that retrieve a draft along with its attachments for editing.
1749         ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
1750         choke if the "to" header field is empty.
1751         ([SOGoDraftObject -delete]): new method to delete the draft folder
1752         whenever operations are done.
1753
1754 2007-08-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1755
1756         * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
1757         useless stub method, of which the intention was implemented in
1758         SOGoDraftObject.
1759         ([-lookupSentFolderUsingAccount]): removed obsolete method.
1760         ([-selectedMailIdentity]): removed obsolete method.
1761         ([-lookupSentFolderUsingFrom]): removed obsolete method.
1762         ([-storeMailInSentFolder:_path]): removed obsolete method, of
1763         which the mechanism has been put in -[SOGoDraftObject sendMail]
1764         method.
1765         ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
1766         ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
1767         adapted algorithms to the new SOGoDraftObject methods.
1768         ([-deleteAction]): removed method since local draft objects cannot
1769         be removed by the user.
1770
1771         * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1772         -expungeAction]): new method replacing the one previously found in
1773         UIxMailListView.
1774         ([UIxMailFolderActions -createFolderAction])
1775         ([UIxMailFolderActions -renameFolderAction])
1776         ([UIxMailFolderActions -deleteFolderAction])
1777         ([UIxMailFolderActions -emptyTrashAction])
1778         ([UIxMailFolderActions -subscribeAction])
1779         ([UIxMailFolderActions -unsubscribeAction]): error situations
1780         should have http return code 500 instead of 403.
1781
1782         * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1783         -composeAction]): new method replacing the one previously in
1784         UIxMailMainFrame.
1785
1786         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1787         -imap4URLString]): removed overriden method (see below).
1788
1789         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
1790         cache the mailbox acl.
1791         ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
1792         ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
1793         acl cache.
1794         ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
1795         the new method of determining the users mail accounts.
1796
1797         * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
1798         longer adds a "/" at the end of the string (the default for
1799         folders), therefore this will be overriden in SOGoMailFolder
1800         rather than in SOGoMailObject.
1801
1802         * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
1803         method, moved into the new UIxMailActions module class.
1804
1805         * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
1806         -newDraft]): new method that returns a new SOGoDraftObject
1807         instance with a unique filename based on the current timestamp and
1808         the "newDraft" prefix.
1809         ([SOGoDraftsFolder
1810         -lookupName:nameinContext:localContextacquire:acquire]): overriden
1811         method by detecting local drafts with their "newDraft" prefix.
1812         ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
1813
1814         * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
1815         from scratch by making it a subclass of SOGoMailFolder.
1816
1817         * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
1818         module.
1819
1820         * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
1821         module.
1822
1823         * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
1824         module.
1825
1826         * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
1827         new method, initializing the new ivars: IMAP4ID, headers, text,
1828         sourceURL and sourceFlag.
1829         ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
1830         ([-_ensureUserSpoolFolderPath])
1831         ([-saveMimeMessageToTemporaryFileWithHeaders:])
1832         ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
1833         ([-deleteTemporaryMessageFile:], [-delete], [-content])
1834         ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
1835         ([-uid], [-flags], [-size], [-envelope]): removed methods.
1836         ([SOGoDraftObject -storeInfo]): rewrote method to take the new
1837         ivars into account.
1838         ([SOGoDraftObject -setSourceURL:newSourceURL])
1839         ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
1840         methods to store the url of the original message between accesses
1841         so that, depending on the action taken (forward or reply), the
1842         correct flag can be given.
1843         ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
1844         the imap4 id that is returned for the message whenever it is saved
1845         into the drafts folder.
1846         ([SOGoDraftObject -save]): new method that takes in charge the
1847         saving of the message in the IMAP drafts folder.
1848         ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
1849         new method that fills the original data of the new message with
1850         the reply content of the original message.
1851         ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
1852         above for message forwarding.
1853         ([-spoolFileManager]): removed useless method (only returned the
1854         default filemanager...)
1855         ([SOGoDraftObject -mimeMessageAsData]): new method that returns
1856         the resulting message as an NSData chunk.
1857
1858         * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
1859         containing a rewrite of the mail action methods found in
1860         UI/Mailer/, that needed to be put in the SOGoMailObject class.
1861         ([SOGoMailObject -subjectForReply]): new method that returns a
1862         subject suitable for replies.
1863         ([SOGoMailObject -contentForReply]): new method that returns the
1864         textual content of an email, quoted for replying.
1865         ([SOGoMailObject -filenameForForward]): new method that returns
1866         the name of the filename that should contain the forwarded
1867         message, based on its subject.
1868         ([SOGoMailObject -subjectForForward]): explicit.
1869
1870 2007-08-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1871
1872         * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1873         -mailAccounts]): rewrote method to return the name of the mail
1874         accounts now available with the -[SOGoUser mailAccounts] method.
1875         ([UIxMailMainFrame -showLinkBanner]): removed method.
1876         ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
1877         ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
1878         ([UIxMailMainFrame -rootURL]): removed method.
1879         ([UIxMailMainFrame -userRootURL]): removed method.
1880         ([UIxMailMainFrame -calendarRootURL]): removed method.
1881         ([UIxMailMainFrame -contactsRootURL]): removed method.
1882         ([UIxMailMainFrame -hasErrorText])
1883         ([UIxMailMainFrame -errorText])
1884         ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
1885         ([-composeAction]): removed method. Now provided by
1886         UIxMailAccountActions.
1887         ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
1888         ([UIxMailMainFrame -hideFolderTree]): removed method.
1889         ([UIxMailMainFrame -treeRootClassName]): removed method.
1890         ([UIxMailMainFrame +initialize]): removed method.
1891         SOGoMailTreeRootClass userdefaults will no longer have any effect.
1892
1893         * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1894         -redirectToLocation:newLocation]): new method that implements the
1895         same functionality as WOComponent.
1896
1897         * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
1898
1899         * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
1900         method that returns whether the current mail is store in the
1901         drafts folder hierarchy.
1902
1903         * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
1904         ([-primaryEmail]): removed method.
1905         ([SOGoUser -primaryIMAP4AccountString]): removed method.
1906         ([SOGoUser -mailAccounts]): new method that returns an array
1907         containing description dictionaries for all the user mail
1908         accounts. Each account also contain the user's identities for that
1909         account.
1910         ([SOGoUser -allIdentities]): new utility method that returns all
1911         the user identities on all accounts.
1912         ([SOGoUser -primaryIdentity]): new method return the first
1913         identity of the first account.
1914
1915         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): 
1916
1917         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1918         -isInDraftsFolder]): returns NO.
1919         ([-preferredIdentity]): removed method, replaced with -[SOGoUser
1920         primaryIdentity].
1921         ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
1922
1923         * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1924         -isInDraftsFolder]): new method that detects if self is contained
1925         by the drafts folder by calling itself on the container object.
1926
1927         * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
1928         removed method.
1929         ([-fetchIdentitiesWithEmitterPermissions]): removed method.
1930         ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
1931         return the name of the mail accounts now available with the
1932         -[SOGoUser mailAccounts] method.
1933
1934         * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
1935         extension module.
1936
1937         * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
1938         module.
1939
1940         * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1941         -keysWithFormat:format]): method that forward the method of the
1942         same name to each member of the array, considering they all are
1943         instances of NSDictionary.
1944         ([NSArray -objectsForKey:key]): same principle as above.
1945         ([NSArray -flattenedArray]): new method that transforms an array
1946         of arrays into a single array containing all the elements of the
1947         subarrays.
1948
1949         * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1950         -keysWithFormat:keyFormat]): new method inspired by the python
1951         string formatting system and which replaces occurences of "%{key}"
1952         by the corresponding keys.
1953
1954 2007-08-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1955
1956         * Main/SOGo.m ([SOGo -run]): check for channel-type specific
1957         sql script before the generic one when initializing mandatory
1958         system tables.
1959
1960 2007-08-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1961
1962         * SoObjects/SOGo/NSString+Utilities.m ([NSString
1963         -pureEMailAddress]): new utility method inspired by the
1964         "_rawSender" private method in SOGoDraftObject, which it now
1965         replaces.
1966
1967         * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
1968         provides a common API for sending emails, no matter what the
1969         transport is.
1970
1971 2007-08-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1972
1973         * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1974         -quotasAction]): invoke "relativeImap4Name" instead of
1975         "nameInContainer" since the latter also returns the "folder"
1976         prefix.
1977
1978         * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1979         -listMailboxesAction]): declare the output as text/plain in UTF-8.
1980
1981         * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1982         -deleteFolderAction]): fixed the url of the destination folder.
1983
1984         * Main/SOGo.m ([SOGo +initialize]): show the build date and
1985         hostname at startup.
1986
1987 2007-08-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1988
1989         * SoObjects/Appointments/SOGoCalendarComponent.m
1990         ([SOGoCalendarComponent
1991         -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1992         set the mail date to the current date string returned by our
1993         rfc822DateString extension method.
1994
1995         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1996         -_gcsFoldersFromFolder:): ignore the personal folders who are
1997         returned but don't really exist.
1998
1999 2007-08-02  Francis Lachapelle  <flachapelle@inverse.ca>
2000
2001         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
2002         has to return only one element.
2003
2004 2007-08-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2005
2006         * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
2007         -content]): new method returning the decoded content of the
2008         corresponding attachment as an NSData instance.
2009         ([UIxMailPartViewer -filename]): if the "filename" parameter of
2010         the metadata parameterList is empty, try to find out the filename
2011         from the "disposition" metadata returned with the BODYSTRUCTURE
2012         imap4 tag.
2013
2014         * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
2015         -composeAction]): prefix the INBOX folder with "folder".
2016
2017         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
2018         -relativeImap4Name]): return nameInContainer stripped from its
2019         first 6 characters since all folder names are prefixed with
2020         "folder".
2021
2022         * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2023         -imap4URLString]): invoke -relativeImap4Name instead of
2024         "nameInContainer" since the former will return the fixed IMAP4
2025         foldername and the latter the SoObject name.
2026
2027         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2028         +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
2029
2030         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
2031         ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
2032         ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
2033         ([SOGoMailAccount -sentFolderNameInContext:])
2034         ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
2035         names with "folder".
2036         ([SOGoMailAccount -inboxFolderInContext:_ctx])
2037         ([SOGoMailAccount -sentFolderInContext:_ctx])
2038         ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
2039         the folder names with "folder" since they are prefixed earlier.
2040
2041 2007-07-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2042
2043         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
2044         ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
2045         all starts with "folder".
2046
2047         * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
2048         longer declare security info from here.
2049
2050         * SoObjects/Mailer/SOGoMailFolder.m
2051         ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
2052         ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
2053         folder names now always start with "folder".
2054
2055         * SoObjects/Mailer/SOGoMailAccount.m
2056         ([-lookupName:inContext:acquire:]): folder names now always start
2057         with "folder".
2058
2059 2007-07-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2060
2061         * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
2062         -forwardAction]): adapted to the new saveAttachment:withMetadata:
2063         method (see below).
2064
2065         * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
2066         code to save the attached filenames with the filename returned by
2067         the web server as well as their mime types.
2068
2069         * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
2070         ([UIxMailPartMessageViewer -toAddresses])
2071         ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
2072         the corresponding fields separated with a ", " (if needed).
2073
2074         * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
2075         -saveAttachment:_attachwithMetadata:metadata]): new method
2076         replacing -saveAttachment:withName: and which takes a dictionary
2077         as parameter with the filename and the mime type of the
2078         attachment.
2079         The mimetype is then saved in a hidden text file.
2080         ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
2081         take the mime type from the hidden text file related to the
2082         attachment.
2083
2084         * SoObjects/Contacts/SOGoContactGCSFolder.m ()
2085         ([SOGoContactGCSFolder
2086         -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2087         return records if the db records are > 0 and not just > 1...
2088
2089 2007-07-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2090
2091         * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
2092         method.
2093         ([UIxContactsListView -defaultSortKey]): changed to "displayName".
2094
2095         * SoObjects/Contacts/SOGoContactLDAPFolder.m
2096         ([SOGoContactLDAPFolder
2097         -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2098         translate the returned records to a normalized form.
2099
2100         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2101         -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2102         translate the returned records to a normalized form.
2103
2104         * UI/Scheduler/UIxCalListingActions.m,
2105         UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
2106         SoObjects/SOGo/AgenorUserDefaults.m,
2107         SoObjects/Contacts/SOGoContactGCSFolder.m,
2108         SoObjects/Appointments/SOGoAppointmentFolder.m,
2109         OGoContentStore/OCSiCalFieldExtractor.m,
2110         OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
2111         table fields with "c_".
2112
2113 2007-07-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2114
2115         * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
2116         the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
2117         the application settings. If set, both limit will influence the
2118         maximum size of the resultsets and the time taken to solve them.
2119         ([LDAPSource -_initLDAPConnection]): initialize the limits.
2120
2121 2007-07-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2122
2123         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
2124         method that declares the DAV namespace related to CardDAV.
2125         ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
2126         method that declares the "access-control" and "addressbook-access"
2127         classes to the list.
2128
2129         * SoObjects/Appointments/SOGoAppointmentFolder.m
2130         ([-lookupActionForCalDAVMethod:]): removed method.
2131         ([SOGoAppointmentFolder -davNamespaces]): added new overriden
2132         method that declares the DAV namespace related to CalDAV.
2133
2134         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
2135         optional method for subclasses which handle specific extensions to
2136         the DAV protocol: CardDAV or CalDAV.
2137         ([SOGoFolder
2138         -lookupName:lookupNameinContext:localContextacquire:acquire]):
2139         new overriden method that handles dav invocations for extensions
2140         to DAV by returning an appropriate SoSelectorInvocation.
2141
2142         * SoObjects/SOGo/NSString+Utilities.m ([NSString
2143         -asDavInvocation]): new method returning a dictionary with a "ns"
2144         key representing the dav namespace and a "method" key representing
2145         the dav method name of the request.
2146
2147         * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
2148         +initialize]): scan the value of SOGoUIxUserCanChangePassword.
2149         Default is "no".
2150         ([UIxPreferences -shouldDisplayPasswordChange]): new template
2151         method that returns the value of SOGoUIxUserCanChangePassword.
2152
2153         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
2154         scan the value of SOGoUIxDefaultModule. If not set, the default
2155         module defaults to "Calendar".
2156         ([SOGoUserHomePage -defaultAction]): redirect the user to the
2157         value of "SOGoUIxDefaultModule".
2158
2159 2007-07-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2160
2161         * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2162         -contactInfos]): cache the results to avoid multiple invocations.
2163
2164         * SoObjects/Contacts/SOGoContactLDAPFolder.m
2165         ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
2166         really should return something or if we fake to return nil...
2167
2168 2007-07-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2169
2170         * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
2171         acceptAnyUser to YES only when the SOGoAuthentificationMethod user
2172         default is set to "bypass".
2173
2174         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2175         -checkLogin:_loginpassword:_pwd]): accepts unverified connections
2176         when authMethod is set to "bypass" from now on. This would avoid a
2177         security concern with a default installation of SOGo.
2178         AuthentificationMethod is now prefixed with "SOGo" for better
2179         clarity.
2180
2181 2007-07-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2182
2183         * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2184         -quotasAction]): new method that returns a json representation of
2185         the mailbox quotas.
2186
2187 2007-07-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2188
2189         * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2190         -imap4URL]): rewrote method to support accented mailbox names.
2191         ([SOGoMailBaseObject imap4Password]): rewrote to simply use
2192         SOGoAuthenticator's passwordInContext:.
2193
2194         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2195         -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
2196         start and due dates to nil if hasStartDate and hasDueDate are
2197         false.
2198
2199         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2200         -passwordInContext:context]): made method public.
2201
2202         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2203         -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
2204         to false to avoid a null violation.
2205
2206 2007-07-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2207
2208         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2209         -contentAsString]): returns the message encoded in ISO Latin 1
2210         again.
2211
2212         * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
2213         SOGoSuperUsername user defaults.
2214         ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
2215         method.
2216         ([SOGoUser -rolesForObject:objectinContext:context]): if the
2217         current user is the superuser, grant him/her the "owner" role.
2218
2219         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
2220         the folder only if the current user is the owner of the future
2221         folder.
2222
2223         * SoObjects/Appointments/SOGoCalendarComponent.m
2224         ([SOGoCalendarComponent -contentAsString]): we return the content
2225         based on the permissions returned by the security manager instead
2226         of by looking at the user roles.
2227
2228         * SoObjects/Appointments/SOGoAppointmentFolder.m
2229         ([SOGoAppointmentFolder -calendarFolders]): read the calendar
2230         folders of the user to whom this folder belongs instead of the
2231         active user. This way, a delegate user will be able to have the
2232         same view that the original user has if he connects from his user
2233         directory.
2234
2235         * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
2236         user exists before creating the SOGoUserFolder instance. If not,
2237         returns nil.
2238
2239         * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
2240         return the message source code in plain text.
2241
2242         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2243         -contentAsString]): returns the message encoded in UTF8.
2244
2245 2007-07-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2246
2247         * OGoContentStore/iCalRepeatableEntityObject+OCS.m
2248         ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
2249         leading tagname into account when serializing the element values.
2250
2251         * Main/SOGoProductLoader.m: only load bundle directories ending
2252         with the "SOGo" extension.
2253
2254         * Main/SOGo.m ([SOGo
2255         -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
2256         result set if the query has caused no exception. Otherwise we get
2257         an "evaluation is in progress exception".
2258
2259 2007-06-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2260
2261         * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2262         -generateSQLForInsert]): initialize error to nil before the
2263         serialization. Otherwise the method can get confused if it ever is
2264         initialized to something else.
2265
2266         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
2267         -folderIsMandatory]): returns NO unconditionnally.
2268
2269         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2270         -appendPersonalSources]): add the "personal" folder to the list of
2271         user folders even if it doesn't exist, so that it is created when
2272         the user accesses it.
2273
2274         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2275         -folderIsMandatory]): returns YES if nameInContainer is set to
2276         "personal", which is the default address book.
2277
2278         * SoObjects/Appointments/SOGoAppointmentFolder.m
2279         ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
2280         users must have one Calendar folder (one and only one).
2281         ([SOGoAppointmentFolder -_privacySqlString]): unescape the
2282         escaping '\' so make the carriage return a real one. This way,
2283         PgSQL 8 won't complain about escaping the string.
2284
2285         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
2286         method that create the folder if considered mandatory.
2287         ([SOGoFolder -folderIsMandatory]): new method that determines
2288         whether the folder should be created automatically or not. To be
2289         overriden by subclasses.
2290
2291         * Main/SOGo.m ([SOGo -run]): override method and create the
2292         missing system tables if needed.
2293
2294 2007-06-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2295
2296         * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
2297         -mailDateFormatter]): returns the user's date formatter.
2298
2299         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
2300         applies the user timezone to the date object before returning it.
2301
2302         * UI/Common/UIxSortButton.m: removed useless class module.
2303
2304         * UI/Common/UIxSortableTableHeader.m: removed useless class
2305         module.
2306
2307         * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2308         -contactInfos]): use the "asc" url parameter instead of "desc" to
2309         determine the ordering.
2310         ([-sortOrdering]): removed method.
2311         ([UIxContactsListView -init]): removed the "searchText" ivar.
2312         (general): the template no longer use the UIxSortableTableHeader
2313         components.
2314
2315         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
2316         -defaultSortKey]): default sort following the messages arrival
2317         instead of their date.
2318         ([-isSortedDescending]): removed method.
2319         ([-imap4SortOrdering]): use the "asc" url parameter instead of
2320         "desc" to determine the ordering.
2321         (general): the template no longer use the UIxSortableTableHeader
2322         components.
2323
2324 2007-06-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2325
2326         * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
2327         removed method.
2328         ([-setQualifier:_msg], [-qualifier]): removed methods.
2329         ([UIxMailListView -defaultAction]): added code to handle the
2330         search criteria and value passed as url parameters. Also, we now
2331         handle the same search criterias as Thunderbird/Icedove.
2332
2333 2007-06-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2334
2335         * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
2336         -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
2337         the string instead of the string itself.
2338         ([UIxJSONPreferences -jsonSettingsAction]): same as above.
2339
2340         * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
2341         bool var "acceptAnyUser" that is set when the AuthenticationMethod
2342         user default is nil.
2343         ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
2344         unconditionnally returns an instance whenever acceptAnyUser is set.
2345
2346 2007-06-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2347
2348         * Main/sogod.m (main): prevent SOGo from running as root.
2349
2350 2007-06-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2351
2352         * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2353         -setCurrentPassword:newPassword]): new stub method.
2354         ([SOGoUser -dateFormatterInContext:context]): new method that
2355         returns an instance of SOGoDateFormatter configured based on the
2356         user defaults.
2357
2358         * UI/Common/UIxPageFrame.m ([UIxPageFrame
2359         -relativePreferencesPath]): new method.
2360
2361         * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
2362         removed useless method.
2363
2364         * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
2365         different configurable formats (long and short date + time).
2366
2367         * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
2368
2369         * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2370         -isInternetRequest]): removed method.
2371
2372         * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2373         -jsonRepresentation]): new method with an explicit name.
2374
2375         * UI/PreferencesUI/product.plist: new bundle that provides a web
2376         ui for handling user defaults.
2377
2378         * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
2379
2380         * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
2381
2382         * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
2383
2384 2007-06-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2385
2386         * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
2387
2388 2007-06-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2389
2390         * UI/Scheduler/NSArray+Scheduler.m ([NSArray
2391         -compareEventsAscending:otherEvent]): no longer use compare: on
2392         the time objects since one of them could be an NSNull, which
2393         crashes when comparing with anything.
2394
2395         * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2396         -eventsListAction]): sort events from here.
2397         ([UIxCalListingActions -tasksListAction]): sort tasks from here.
2398
2399         * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
2400         module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
2401
2402         * SoObjects/Appointments/SOGoAppointmentFolder.m
2403         ([SOGoAppointmentFolder
2404         -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
2405         no longer sort elements from here.
2406
2407 2007-06-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2408
2409         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2410         -aclsForUser:uid]): implemented method by forwarding the request
2411         to the container. This fixes a bug where users could no longer
2412         read emails from shared folders.
2413
2414         * SoObjects/Appointments/SOGoCalendarComponent.m
2415         ([SOGoCalendarComponent -init]): "isNew" is no longer defined
2416         here, but rather in its parent class.
2417
2418         * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
2419         -stringForSecondsSinceThe70s:seconds]): new utility method.
2420
2421         * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2422         -eventsListAction]): no longer reduce the end day of one day for
2423         all day events since everything has been fixed in
2424         OCSiCalFieldExtractor.
2425
2426         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2427         -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
2428         the end date of all day events of 1 so that they stay on their
2429         real last day.
2430
2431 2007-06-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2432
2433         * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
2434
2435         * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
2436         removed method.
2437         ([-fetchCoreTasksInfos]): removed method.
2438
2439         * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2440         -init]): initialize an instance of SOGoDateFormatter.
2441         ([UIxCalListingActions -eventsListAction]): the display start and
2442         end dates are added to the listing for each event.
2443
2444         * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
2445
2446         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2447         -isAllDay]): returns YES if the "hm" url parameter is set to
2448         "allday".
2449         ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
2450         is displayed one day earlier.
2451
2452 2007-06-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2453
2454         * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2455         -_setupContext]): take the range of dates specified by the popup
2456         into account.
2457
2458         * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
2459         WODirectAction that returns WOResponse objects with the events or
2460         todos satisfying the parameters passed in the url.
2461
2462         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2463         -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
2464         "isAllDay" into account and compute the amount of days to pass to
2465         the iCalEvent.
2466
2467 2007-06-06  Francis Lachapelle <flachapelle@inverse.ca>
2468
2469         * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
2470         * SoObjects/SOGo/NSNull+Utilities.m: initial import.
2471         * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]): 
2472         new method that returns a json-formatted array of the visible tasks
2473         for the current user.
2474
2475 2007-06-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2476
2477         * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
2478         object must be present in the list of UIDs we delete the object
2479         from. Otherwise Calendar objects having no organizer and no
2480         attendees will remain in their owner's Calendar.
2481
2482         * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2483         -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
2484         first 3 elements of the path array if the url returned by
2485         baseURLInContext: returns a hostname.
2486
2487         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2488         -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
2489         nil, in which case a crash happens when calling hasPrefix:.
2490         ([SOGoMailFolder -_sharesACLs]): same as above.
2491         ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
2492         otherUsersFolderName is nil, we return nil.
2493         ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
2494         nil from [self otherUsersPathToFolder], we return nil too.
2495
2496 2007-06-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2497
2498         * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2499         -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
2500         the result of [self baseURLInContext:] to avoid a double escaping
2501         in the resulting string.
2502
2503         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
2504         the user has the "ObjectReader" role on the parent container, then
2505         he is granted the "ObjectViewer" role on this object. Same for
2506         "ObjectEraser", although this might change later.
2507
2508         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2509         -toolbar]): determine the toolbar filename based on the
2510         permissions declared by the securitymanager. The role mechanism
2511         has been adjusted on a lowerlevel so we can simplify the code.
2512
2513         * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2514         -initWithName:newNameinContainer:newContainer]): read the content
2515         directly from here. That way we can determine whether the object
2516         is being created.
2517         ([SOGoContentObject -aclsForUser:uid]): if the object is new and
2518         the ObjectCreator role is enabled, we also grant the ObjectEditor
2519         role to the current user.
2520
2521         * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
2522         changed the method paradigm to only return HTTP code 204. Not test
2523         is done whatsoever since the security manager does it for us.
2524
2525         * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
2526         removed method because the same exists in UIxFolderActions.m
2527
2528         * UI/Contacts/UIxContactsUserRightsEditor.m
2529         ([UIxContactsUserRightsEditor
2530         -setUserCanReadObjects:userCanReadObjects]): new method.
2531
2532         * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
2533         "FolderEraser" and special permission "Access Object". Removed
2534         role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
2535         can be used instead. Removed "FolderReader" since it is useless.
2536
2537         * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2538         -vCard]): directly use the "content" ivar since it is initialized
2539         during object creation.
2540
2541         * SoObjects/Contacts/SOGoContactLDAPFolder.m
2542         ([SOGoContactLDAPFolder -init]): no longer handle the
2543         nameInContainer no the container ivars. They were removed because
2544         this class is a descendant of SOGoObject which already has them.
2545         ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
2546         returning "displayName".
2547         ([SOGoContactLDAPFolder -isFolderish]): new overriden method
2548         returning "YES".
2549
2550         * SoObjects/Appointments/SOGoCalendarComponent.m
2551         ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
2552         ([SOGoCalendarComponent -findParticipant:user]): new name for
2553         method "participant:".
2554         ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
2555         findparticipant but taking a uid string as parameter.
2556         ([SOGoCalendarComponent -contentAsString]): don't regenerate the
2557         iCalendar automatically. Instead, this is done only when the user
2558         is a "date and time viewer".
2559         ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
2560         (modifier and responder) into account by compiling them with the
2561         owner's roles.
2562
2563         * SoObjects/Contacts/SOGoContactFolder.h: removed
2564         "nameInContainer" from the list of required methods.
2565
2566         * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
2567         -davContentType]): returns "text/calendar".
2568
2569         * SoObjects/Contacts/SOGoContactLDAPFolder.m
2570         ([SOGoContactLDAPFolder -davResourceType]): declare the correct
2571         groupdav resource-type.
2572
2573         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2574         -davContentType]): same as below.
2575
2576         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2577         -initWithName:newNameinContainer:newContainer]): new overriden
2578         method setting the custom owner directly.
2579
2580         * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2581         -davContentType]): same as below.
2582
2583         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2584         -davContentType]): same as below.
2585
2586         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
2587         declare "httpd/unix-directory".
2588
2589         * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
2590         "UTC" as fallback timezone instead of "Canada/Eastern".
2591         ([-hasEmail:email]): make use of the new NSArray's
2592         containsCaseInsensitiveString: method.
2593
2594         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2595         -davContentType]): declare "message/rfc822" as content type.
2596
2597         * SoObjects/Appointments/SOGoAppointmentFolder.m
2598         ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
2599         ivar in SOGoObject.
2600         ([SOGoAppointmentFolder
2601         -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
2602         ([-fetchContentObjectNames]): commented out method since it was
2603         usefull only for testing Funambol.
2604
2605         * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
2606         -containsCaseInsensitiveString:match]): an enhanced version of
2607         containsObject:.
2608
2609         * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
2610         useless method.
2611         ([-showMarkDeletedButton]): removed useless method.
2612         ([-showTrashButton]): removed useless method.
2613
2614         * SoObjects/Appointments/iCalEntityObject+SOGo.m
2615         ([iCalEntityObject -userIsParticipant:user]): new proxy method
2616         that invoked isParticipant on self for each possible email
2617         addresses of the user passed as parameter.
2618         ([iCalEntityObject -userIsOrganizer:user]): same as above.
2619
2620         * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
2621         extension module.
2622
2623         * SoObjects/Appointments/SOGoAppointmentObject.m
2624         ([SOGoAppointmentObject
2625         -saveContentString:contentStringbaseVersion:baseVersion]): remove
2626         method since an event may not have an organizer.
2627
2628         * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2629         -GETAction:localContext]): clarified method. Added support for
2630         content-type (thanks to Helge Hess).
2631         ([SOGoObject -initWithName:_nameinContainer:_container]):
2632         initialize and retain the owner.
2633         ([SOGoObject -davContentType]): returns "text/plain".
2634
2635 2007-05-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2636
2637         * UI/Common/UIxObjectActions.m ([UIxObjectActions
2638         -addUserInAclsAction]): send an acl addition mail.
2639         ([UIxObjectActions -removeUserFromAclsAction]): send an acl
2640         removal mail.
2641
2642         * UI/Common/UIxFolderActions.m ([UIxFolderActions
2643         -_realActionWithFolderName:folderDict]): handle the possible
2644         presence of the "mail-invitation" url parameter. If present, the
2645         user will be redirected to the relevant folder.
2646
2647         * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
2648         ([SOGoUser -language]): new method that returns the user's
2649         preferred language, or the system's if none has been set yet.
2650
2651         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
2652         that returns the full dav url to self.
2653         ([SOGoObject -soURL]): same as above but for the so url (Web UI).
2654         ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
2655         returns the full so url to the base of the SOGo module to which
2656         self belongs, and for the specified user.
2657         ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
2658         but for the current user.
2659         ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
2660         required by the acl advisory templates and which returns a link
2661         the target user can click to activate its new subscription.
2662         ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
2663         but for inclusion of the application/x-sogo-notification part,
2664         which will be handled by the Lightning enhancer plugin.
2665
2666         * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction]) 
2667         ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
2668         do nothing yet since imap folder subscription is not handled yet.
2669
2670         * SoObjects/SOGo/SOGoContentObject.m
2671         ([-hasSupportForDefaultRoles]): removed method.
2672
2673         * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2674         -getFullEmailForUID:uid]): new method that returns the username +
2675         email pair.
2676
2677         * SoObjects/Appointments/SOGoCalendarComponent.m
2678         ([SOGoCalendarComponent +initialize]): the default language for
2679         mail templates is now set to English.
2680
2681         * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
2682         SOGoACLAdvisory implementing the french template for user removal
2683         from acls.
2684
2685         * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
2686         SOGoACLAdvisory implementing the french template for user
2687         additions to acls.
2688
2689         * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
2690         SOGoACLAdvisory implementing the english template for user removal
2691         from acls.
2692
2693         * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
2694         SOGoACLAdvisory implementing the english template for user
2695         additions to acls.
2696
2697         * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
2698         supercall of all the acl advistory templates. The model is based
2699         on SOGoAptMailNotification except that the template encapsulates
2700         the message to be sent. Later, we might create a superclass common
2701         to all template-based emails.
2702
2703         * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2704         -addRange:newRange]): new method that store a string
2705         representation of the NSRange passed as parameter.
2706         ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
2707         any range contained in self intersect with the one passed as parameter.
2708
2709         * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
2710         store ranges in an array to prevent them from intersecting with
2711         each other during the passes.
2712
2713 2007-05-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2714
2715         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2716         -primaryFetchMailboxInfo]): useless method. Removed.
2717
2718 2007-05-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2719
2720         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2721         -toManyRelationshipKeys]): invoke [self subfolders].
2722         ([SOGoMailFolder -subfolders]): new method containing what used to
2723         be in toManyRelationshipKeys.
2724         ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
2725         urls.
2726
2727         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2728         -allFolderPaths]): renamed version of "allFolderPathes", sorted by
2729         named and at the beginning of which we put the predefined folders.
2730
2731         * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2732         -emptyTrashAction]): new method inspired by a similar one from
2733         UIxMailListView, to which we added the ability to remove
2734         subfolders.
2735
2736         * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
2737         method. Replaced with a similar one in UIxMailFolderActions.
2738
2739         * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2740         -renameFolderAction]): implemented method.
2741         ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
2742         specified folder. Instead, we put it in the trash folder.
2743
2744         * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
2745         method, replaced with a similar method in the new
2746         UIxMailFolderAction class module.
2747         ([-deleteFolderAction]): idem.
2748
2749         * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2750         -createFolderAction]): new method implementing subfolder creation.
2751         ([UIxMailFolderActions -renameFolderAction]): new method
2752         implementing subfolder renaming (basic implementation to be
2753         finalized later).
2754         ([UIxMailFolderActions -deleteFolderAction]): new method
2755         implementing folder deletion.
2756
2757         * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
2758         web actions related to the handling of imap folder.
2759
2760 2007-05-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2761
2762         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2763         -ownerInContext:localContext]): overriden method because we are an
2764         IMAP4 client and we need a bit more intelligence to deduce the
2765         owner of the current folder.
2766         ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
2767         return an NSException so we need to be careful here to avoid a
2768         crash.
2769         ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
2770         NSException so we need to be careful here to avoid a crash.
2771
2772         * SoObjects/Mailer/SOGoMailAccounts.m
2773         ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
2774         there is no longer any concept of Intranet or Internet connection
2775         handling.
2776
2777         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2778         -sharedFolderName]): new method.
2779         ([SOGoMailAccount -otherUsersFolderName]): new method.
2780
2781         * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
2782         new javascript code and the new UIxMailAccountActions class.
2783
2784         * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
2785         javascript code and the new UIxMailAccountActions class.
2786
2787         * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
2788         new javascript code and the new UIxMailAccountActions class.
2789
2790         * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2791         -listMailboxesAction]): new method that returns a json-formatted
2792         tree of all the mailboxes available to the current user.
2793
2794         * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
2795         web actions related to the handling of mail accounts.
2796
2797         * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
2798         module.
2799
2800         * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
2801         -jsonRepresentation]): new interface method meant to be overriden
2802         by the primitive classes.
2803
2804 2007-05-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2805
2806         * UI/MailerUI/UIxMailSplashView.m: removed.
2807
2808         * SoObjects/Appointments/SOGoCalendarComponent.m
2809         ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
2810         the uid to the list only when the user email is recognized by the
2811         user manager.
2812
2813 2007-05-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2814
2815         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2816         -isDeletionAllowed]): completed method with the new imap acl api.
2817
2818         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
2819         removed method.
2820
2821         * SoObjects/SOGo/SOGoPermissions.m: added the new role
2822         "SOGoMailRole_MessageEraser".
2823
2824         * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID]) 
2825         ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
2826         "defaultUserID" method into account.
2827
2828         * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser]) 
2829         ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
2830         "defaultUserID" method into account.
2831
2832         * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
2833         methods to support the IMAP acls mentionned in the RFC 4314,
2834         removed the ones specific to Cyrus.
2835
2836         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
2837         mandatory method for subclasses. Removed the SOGoDefaultUserID
2838         global var.
2839
2840         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
2841         overriden method to return @"<default>".
2842
2843         * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2844         -defaultUserID]): overriden method to return @"<default>".
2845
2846         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2847         -aclsForUser:uid]): overriden method.
2848         ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
2849         ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
2850         ([SOGoMailFolder -defaultUserID]): overriden method.
2851         ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
2852
2853 2007-05-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2854
2855         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2856         -aclUsersForObjectAtPath:objectPathArray]): new method that being
2857         forwarded the calles to aclUsers for the GCS-based subclasses of
2858         SOGoObject.
2859
2860         * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
2861         methods that would have been used to support IMAP acls. Replaced
2862         them with the new protocol for them that has been implemented in
2863         SOGo during the last few weeks.
2864
2865         * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2866         -hasSupportForDefaultRoles]): override method by returning "YES".
2867
2868         * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2869         -addObjectUniquely:object]): new method with an explicit name.
2870
2871         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
2872         "acl" to "aclUsers". Now designed to return only the uid of the
2873         users involved in an ACL.
2874         ([SOGoObject -hasSupportForDefaultRoles]): new method returning
2875         "NO" by default. To indicate to the acl editor that we don't want
2876         to handle a default user.
2877
2878         * SoObjects/SOGo/SOGoPermissions.[hm]: added the
2879         SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
2880         symbols.
2881
2882         * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
2883         provides a view to the IMAP acls.
2884
2885         * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
2886
2887         * UI/WebServerResources/MailerUI.js: replaced all invocations of
2888         addEventListener to the use of prototype's Event object. Also,
2889         configured all menus programmatically following descriptions lists
2890         containing their callbacks, or nulls, submenus id or separators.
2891
2892 2007-05-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2893
2894         * UI/Common/UIxObjectActions.m ([UIxObjectActions
2895         -addUserInAclsAction]): save the previous roles of the user
2896         (unlikely) or the default roles, or None instead of saving the
2897         roles that should appear the first time in the role editor when no
2898         default has been set...
2899
2900         * SoObjects/SOGo/SOGoObject.m: defined a new constant
2901         "SOGoDefaultUserID".
2902
2903         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2904         -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
2905         ignore the "AuthorizedSubscriber" role and add the "None" role
2906         when no other role is found.
2907
2908         * UI/Common/UIxAclEditor.m: added a button for the new default
2909         user roles feature.
2910
2911         * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2912         -_initRights]): don't take the "None" role into account when
2913         initializing the list of current roles.
2914
2915         * SoObjects/SOGo/SOGoPermissions.m: added a new void role
2916         "SOGoRole_None".
2917
2918 2007-05-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2919
2920         * SoObjects/SOGo/NSString+Utilities.m ([NSString
2921         -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
2922         There is no need to subscract the start from the length if a space
2923         is not found since the range has not changed either. Finally, the
2924         first character before the url might also be a tab or a cr, so we
2925         match it against the "urlAfterEndingChars" custom NSCharacterSet.
2926         ([NSString -stringByDetectingURLs]): modified to handle email
2927         addresses and add a correct "mailto:" link.
2928
2929 2007-05-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2930
2931         * SoObjects/Appointments/SOGoAppointmentFolder.m
2932         ([SOGoAppointmentFolder -fetchContentObjectNames]): override
2933         method to return the events in the range of 2 weeks ago up to 4
2934         weeks from "now".
2935
2936         * UI/MailPartViewers/UIxMailPartTextViewer.m
2937         ([UIxMailPartTextViewer -flatContentAsString]): use the new
2938         "stringByDetectingURLs" method to offer clickable urls.
2939
2940         * SoObjects/SOGo/NSString+Utilities.m ([NSString
2941         -stringByDetectingURLs]): this new method replaces passive URLS
2942         with active ones for HTML resolution of the text.
2943
2944 2007-05-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2945
2946         * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2947         -asQPSubjectString:encoding]): simplified method.
2948         The headers indicates "utf-8" again thank to our fix in
2949         sope-mime.
2950
2951         * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
2952         being used.
2953
2954 2007-05-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2955
2956         * UI/Common/UIxObjectActions.m ([UIxObjectActions
2957         -removeUserFromAclsAction]): implemented this method which was
2958         missing and is required to remove users from ACLs.
2959
2960         * UI/Common/UIxFolderActions.m ([UIxFolderActions
2961         -subscribeAction]): folderDict was not autoreleased, resulting in
2962         a leak...
2963
2964         * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2965         -primaryFetchProfile]): when building with libFoundation, don't
2966         use the "propertyList" method from NSString. Rather, we convert
2967         the string to an NSData instance and passit as parameter to
2968         NSDeserializer. This way, we obtain a mutable dictionary rather
2969         than an immutable one.
2970
2971         * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText]) 
2972         ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
2973         constant string "contentTypeValue".
2974         contentTypeValue is now set back to iso-8859-1 since NGMime
2975         converts extracts the data in that encoding.
2976
2977 2007-05-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2978
2979         * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2980         -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
2981         "bindFields" value is present in the user defaults, use the
2982         specified fields to find the dn of the user to bind.
2983         ([LDAPSource -allEntryIDs]) 
2984         ([LDAPSource -fetchContactsMatching:match]) 
2985         ([LDAPSource -lookupContactEntry:entryID]) 
2986         ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
2987         bind and unbind the connection on each request.
2988
2989         * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
2990
2991         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2992         -contactSearchAction]): simplified method to use the facilities
2993         provided by the LDAPUserManager. No longer takes care of the
2994         "ldap-only" url parameter since all requests are handled by the
2995         usermanager now.
2996
2997         * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2998         -primaryFetchProfile]): check that the value returned is not null
2999         before interpreting it.
3000
3001         * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
3002         -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
3003         ([LDAPUserManager -_fillContactMailRecords:contact]): if the
3004         system email is already present, remove it before adding it.
3005
3006         * SoObjects/SOGo/LDAPSource.m ([LDAPSource
3007         -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
3008         loginToCheck is not empty.
3009         ([LDAPSource -fetchContactsMatching:match]): check that match is
3010         not empty.
3011         ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
3012         not empty.
3013         ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
3014         uid is not empty.
3015
3016 2007-05-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3017
3018         * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
3019         for "mail" method.
3020         ([SOGoUser -systemEmail]): returns the email formed from the
3021         username and the default mail domain.
3022         ([SOGoUser -hasEmail:email]): test whether the user has the
3023         specified email, in a case-insensitive way.
3024
3025         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3026         -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
3027         check login information.
3028
3029         * SoObjects/Contacts/SOGoContactLDAPFolder.m
3030         ([SOGoContactLDAPFolder
3031         +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
3032         no longer manage LDAP connections. The requests are forwarded to
3033         the relevant LDAPSource instead.
3034
3035         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3036         -appendSystemSources]): pass LDAPSource objects to
3037         SOGoContactLDAPFolder instances.
3038
3039         * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
3040         address of the "from" field before sending the message. Otherwise,
3041         sending the mail won't work.
3042
3043         * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
3044         rewrote this method to request all the available email identities
3045         for the current user. Also, the from field also contains the full
3046         name of the user, not just his/her email address.
3047
3048         * SoObjects/Appointments/SOGoCalendarComponent.m
3049         ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
3050         from the previous module iCalEntityObject+Agenor.
3051         ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
3052         ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
3053         idem.
3054
3055         * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
3056         replacing the SOGoContactLDAPEntry module. It was renamed as such
3057         because it now receives a dictionary instead of an NGLdapEntry.
3058         It thus can now handle data from any source of LDIF data, not
3059         only coming from LDAP.
3060
3061         * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
3062         implementing most of what used to be the AgenorUserManager class.
3063         The difference is that users are cached in the forme of
3064         dictionaries and many sources are used. Also, it can be used to
3065         search LDAP contacts.
3066
3067         * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
3068         the concept of "ldap source", to be used by all the classes
3069         needing access to LDAP-provided information: addressbooks and the
3070         user manager. Most the method thereing are transcriptions of
3071         methods previously found in SOGoContactLDAPFolder. It also contain
3072         utility methods for user matching and authentification.
3073
3074         * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
3075         module, rendered useless by code refactoring.
3076
3077         * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
3078         with the freshly written "LDAPUserManager".
3079
3080 2007-05-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3081
3082         * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
3083         SOGOContactLDIFEntry.
3084
3085         * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
3086         module, obsoleted by code in SOGo/LDAPSource.[hm].
3087
3088 2007-05-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3089
3090         * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
3091         new method with an explicit name.
3092
3093 2007-05-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3094
3095         * SoObjects/Appointments/SOGoCalendarComponent.m
3096         ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
3097         replacing "isOrganizer:orOwner:" by taking only one instance of
3098         SOGoUser as parameter.
3099         ([SOGoCalendarComponent -participant:user]): new method replacing
3100         the previous "isParticipant" boolean method by returning the first
3101         participant matching the user passed as parameter. This method is
3102         used so that both the regular email address and the "system email
3103         address" of the user are matched against the participants emails.
3104
3105         * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3106         -getSystemEMailForUID:uid]): new method that returns the email
3107         formed with the user's uid and the default mail domain.
3108
3109         * SoObjects/Appointments/SOGoCalendarComponent.m
3110         ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
3111         was previously commented out.
3112
3113         * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
3114         forwared to [AgenorUserManager getSystemEmailForUID:].
3115
3116         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3117         -toolbar]): method replacing the one with the same name in the
3118         task and appointment editor classes. This method makes also use of
3119         the new method "isOrganizerOrOwner:" and "participant:" in
3120         SOGoCalendarComponent.
3121
3122         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3123         -toolbar]): removed method, replaced with a method with the same
3124         name in UIxComponentEditor.
3125
3126         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
3127         method, replaced with a method with the same name in
3128         UIxComponentEditor.
3129
3130         * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3131         -primaryFetchProfile]): the values returned from the database are
3132         converted to a put dictionary first, since the dictionary returned
3133         is actually an immutable one, which can cause a crash afterwards.
3134
3135 2007-04-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3136
3137         * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
3138         and "SOGoRole_ObjectEditor".
3139
3140         * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
3141         -prepareRightsForm]): this method is no longer mandatory.
3142
3143         * UI/Contacts/UIxContactsUserRightsEditor.m
3144         ([UIxContactsUserRightsEditor
3145         -setUserCanCreateObjects:userCanCreateObjects]): new subclass
3146         module to handle acls related to the address books. Partial
3147         implementation.
3148
3149         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3150         -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
3151         newly set roles.
3152         ([SOGoFolder
3153         -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
3154         specified roles from cache.
3155         ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
3156         put resulting roles in cache.
3157
3158         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
3159         initWithName:inContainer:. Instead, directly initialize the ivars
3160         as it is supposed to be to avoid an infinite loop whenever one of
3161         those two methods are overriden.
3162
3163         * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
3164         removed method.
3165
3166         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3167         -aclsForUser:uid]): override method so that SOGo won't crash when
3168         loading the contact card.
3169
3170 2007-04-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3171
3172         * SoObjects/Appointments/SOGoAppointmentFolder.m
3173         ([SOGoAppointmentFolder -_privacySqlString]): the string for the
3174         "freebusy" special user should only require opaque elements.
3175
3176 2007-04-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3177
3178         * SoObjects/Appointments/SOGoAppointmentFolder.m
3179         ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
3180         our double declaration where the resulting XML would be screwed.
3181         There is only one collection per namespace.
3182
3183         * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
3184         rfc822DateString]): new method that returns a string conform to
3185         rfc 822 and suitable for email headers.
3186
3187         * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
3188         "rfc822DateString" category method on the date we put in the
3189         header.
3190
3191 2007-04-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3192
3193         * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction]) 
3194         ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
3195         which should never be overriden.
3196         ([UIxUserRightsEditor -appendRight:newRight]) 
3197         ([UIxUserRightsEditor -removeRight:right]) 
3198         ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list]) 
3199         ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
3200         methods that can be used by the subclasses.
3201         ([UIxUserRightsEditor -prepareRightsForm]): new method that should
3202         mandatorily be overriden to prepare the elements of the subclassed
3203         form.
3204         ([UIxUserRightsEditor -updateRights]): new method that should
3205         mandatorily be overriden to update the user rights from the
3206         elements of the subclassed form.
3207
3208         * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
3209         check if the uid is already listed before adding it to our array.
3210         This is because the acl table can contain more than one record per
3211         user/object relationship.
3212
3213         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3214         -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
3215         "roles" parameter is now an NSArray instead of a string. Therefore
3216         we loop throughout the array to populate the table. All the
3217         relevant records are removed prior to the addition of the new
3218         rights.
3219
3220         * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
3221         -aclsForUser:uid]): new override that returns nil until we add
3222         support for IMAP acls.
3223
3224         * SoObjects/Mailer/SOGoMailAccounts.m
3225         ([SOGoMailAccounts -aclsForUser:uid]): same as below.
3226
3227         * SoObjects/Contacts/SOGoContactLDAPFolder.m
3228         ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
3229
3230         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3231         -aclsForUser:uid]): override this method which will always return
3232         nil.
3233
3234         * SoObjects/SOGo/SOGoPermissions.[hm]: added
3235         [Public,Private,Confidential]
3236         x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
3237         SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
3238         ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
3239
3240         * SoObjects/Appointments/SOGoAppointmentFolder.m
3241         ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
3242         that defines default roles for new elements in the acl.
3243
3244         * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
3245         module and subclass of UIxUserRightsEditor specific to the
3246         handling of user rights on calendar folders.
3247
3248 2007-04-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3249
3250         * SoObjects/Appointments/SOGoAppointmentFolder.m
3251         ([SOGoAppointmentFolder -groupDavResourceType]): return both
3252         "vevent-collection" and "vtodo-collection".
3253
3254         * UI/Common/UIxUserRightsEditor.[hm]: new template class module
3255         that implements the detailed editor of user rights per-object.
3256
3257 2007-04-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3258
3259         * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3260         -rolesForObject:objectinContext:context]): no longer query objects
3261         for "roleForUser:". Instead, all objects should implement
3262         "rolesForUser:".
3263
3264         * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
3265         new method to comply with the new acl "protocol" in SOGoObject.
3266         Uses SOGoFolder's new facilities for ACLS.
3267         ([SOGoContentObject -aclsForUser:uid]): idem.
3268         ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
3269         ([SOGoContentObject -removeAclsForUsers:users]): idem.
3270
3271         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3272         -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
3273         based folders. This method is derived from the code that was in
3274         UIxAclFolder before its removal.
3275         ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
3276         idem.
3277         ([SOGoFolder
3278         -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
3279         ([SOGoFolder
3280         -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
3281         ([SOGoFolder -setRoleForUsers:uidsto:role]) 
3282         ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
3283
3284         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
3285         that requires overriding by subclasses.
3286         ([SOGoObject -aclsForUser:uid]): idem.
3287         ([SOGoObject -defaultAclRoles]): idem.
3288         ([SOGoObject -setRoles:rolesforUser:uid]): idem.
3289         ([SOGoObject -removeAclsForUsers:users]): idem.
3290
3291         * UI/Common/UIxObjectActions.m: new module implementing the web
3292         actions common to SOGoObject and all its subclasses.
3293         ([UIxObjectActions -addUserInAclsAction]): new method that adds a
3294         user with the clientObject defaults user rights to the object's
3295         acl.
3296
3297         * UI/Common/UIxAclEditor.m: modified module so as to simplify it
3298         to the point where it will only list the users (and their name)
3299         associated with an object acl.
3300
3301         * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
3302         methods have been moved into SOGoObject and SOGoFolder during a
3303         refactoring.
3304
3305         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3306         -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
3307         method made useless by the programmatic handling of iCalendar
3308         objects.
3309         ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
3310         ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
3311         ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
3312
3313         * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
3314         drop on all folder nodes, not just on leaves.
3315
3316         * SoObjects/Contacts/SOGoContactLDAPFolder.m
3317         ([SOGoContactLDAPFolder
3318         -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
3319
3320 2007-04-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3321
3322         * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
3323         debugging facilities when the SOGoDebugObjectAllocation user
3324         default is set.
3325
3326 2007-04-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3327
3328         * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
3329         method that SOGo will need with non-gnustep Foundation
3330         implementation.
3331         ([NSString -stringByAppendingPathComponent:component]): new method
3332         that SOGo will need when building with libFoundation. Method
3333         removed later since it is available from
3334         Foundation/NSPathUtilities.h.
3335
3336         * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
3337         from SOGoObject.m.
3338
3339         * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
3340         every subclass to access [WOApplication context] without having to
3341         invoke it more than once.
3342
3343         * SoObjects/Appointments/SOGoCalendarComponent.m
3344         ([SOGoCalendarComponent -changeParticipationStatus:_status]):
3345         moved method from SOGoTaskObject and SOGoAppointmentObject up to
3346         their parent class.
3347
3348         * UI/Scheduler/UIxCalSelectTab.m: removed module.
3349
3350 2007-04-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3351
3352         * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
3353         -vCard]): test the prefix of the card in a case-independent way.
3354
3355         * OGoContentStore/OCSContactFieldExtractor.m
3356         ([OCSContactFieldExtractor
3357         -extractQuickFieldsFromContent:content]): we no longer accept
3358         records in a format other than versit vCard so we can get rid of a
3359         lot of code.
3360
3361 2007-04-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3362
3363         * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3364         -selectorComponentClass]): restored method.
3365
3366 2007-04-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3367
3368         * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
3369         -shouldDisplayCurrentTask]): the current task is not displayed if
3370         it is NOT completed or if the "showCompletedTasks" flag is set.
3371         The logic was inverted in Lightning and is now in SOGo too.
3372
3373 2007-04-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3374
3375         * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
3376         want the "work" url instead of the "home".
3377
3378         * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3379         -_saveSnapshot]): save url values from snapshot.
3380         ([UIxContactEditor -initSnapshot]): load url values from snapshot.
3381
3382         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3383         -calendarList]): new method replacing "availableCalendars".
3384
3385         * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
3386         -calendarFolders]): we now take the list of subscribed calendar
3387         from the container.
3388
3389         * SoObjects/Appointments/SOGoAppointmentFolder.m
3390         ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
3391         method derived from and replacing [UIxCalView calendarFolders].
3392
3393 2007-03-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3394
3395         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3396         -toManyRelationshipKeys]): don't put the predefined folders in the
3397         list if they are returned by the server.
3398
3399         * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
3400         longer store the "flattenedBlocks" in a dictionary since the
3401         object will be deleted anyway and we don't need to put the folders
3402         in cache.
3403
3404         * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3405         ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
3406         attachment path into account when computing the part urls.
3407
3408 2007-03-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3409
3410         * UI/Contacts/UIxContactsListViewContainer.m
3411         ([UIxContactsListViewContainer -additionalFolders]): take the list
3412         of subscribed folders from the new property list used for the user
3413         settings. The value of its key is SubscribedFolders for the
3414         dictionary entry named "Contacts".
3415
3416         * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3417         -canAccessContentAction]): new method to override the one from
3418         UIxFoldersActions by taking into account the fact that, this time,
3419         the clientObject is an ldap folder. Removed many method that used
3420         to be related to the handling of the user selector.
3421
3422         * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
3423         to make sure they can be removed.
3424
3425         * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
3426         populate the calendar entries based on the user settings plist.
3427
3428         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3429         -selectForMailerAction]): restored method.
3430
3431         * UI/Scheduler/UIxCalendarSelector.m: new template module derived
3432         from a simplified version of the old UIxContactEditor (removed).
3433
3434         * UI/Contacts/UIxContactsUserFolders.m: new template module for
3435         selecting users or user folders through an LDAP search of which
3436         the results are displayed as a tree.
3437
3438         * UI/WebServerResources/UIxMailEditor.js: moved previous generic
3439         method "onContactAdd" here since the Mailer is now the only module
3440         to use it when composing emails.
3441
3442         * UI/WebServerResources/generic.js: added code for handling the
3443         new scheme used for describing SOGo folders, common code to handle
3444         folder addition or removal.
3445
3446         * UI/Common/UIxFolderActions.m ([UIxFolderActions
3447         -activateFolderAction]): new method that change the "active"
3448         settings in the folder-related fields in the user settings.
3449         ([UIxFolderActions -deactivateFolderAction]): see above.
3450
3451         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3452         -checkRightsAction]): removed method.
3453
3454         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3455         -updateAdditionalAddressBooksAction]): removed method.
3456
3457         * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3458         -updateCalendarsAction]): removed method.
3459
3460 2007-03-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3461
3462         * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3463         -checkRightsAction]): removed method.
3464
3465         * UI/Common/UIxFolderActions.m ([UIxFolderActions
3466         -canAccessContentAction]): new method designed to replace
3467         [UIxCalMainView checkRightsAction] in a more universal way.
3468
3469 2007-03-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3470
3471         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3472         -roleOfUser:uidinContext:context]): take all the subkeys into
3473         account, not only the "personal" folder.
3474
3475         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3476         -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
3477         to the new components.
3478
3479         * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
3480         (see below).
3481
3482         * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3483         -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
3484         field of the sogo_user_profile table, where the user-customizable
3485         changes will be saved.
3486         ([AgenorUserManager -getUserSettingsForUID:uid]): new method
3487         similar to the one above, using the "settings" field where the
3488         automatic settings will be saved.
3489
3490         * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
3491         module to bind the userdefaults to a property list contained in a
3492         specified field of the sogo_user_profile table.
3493         ([AgenorUserDefaults
3494         -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
3495         added a "fieldName" parameter.
3496
3497         * UI/Common/UIxFolderActions.m: new module implementing web
3498         actions common to all GCS-based folders.
3499
3500 2007-03-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3501
3502         * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
3503         put a carriage return after the day name.
3504
3505         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3506         -readFreeBusyAction]): restored method.
3507
3508 2007-03-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3509
3510         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3511         -defaultAction]): remade module to redirect automatically to the
3512         Calendar url.
3513
3514         * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
3515
3516 2007-03-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3517
3518         * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3519         -deleteAction]): new web method to delete personal addressbook
3520         folders.
3521
3522         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3523         -delete]): override method to refuse the deletion of the folder if
3524         its nameInContainer is "personal".
3525
3526         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
3527         that forwards the deletion request to the folder manager.
3528
3529 2007-03-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3530
3531         * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
3532         -zoomList]): new method that returns the list of available zoom factors.
3533
3534         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3535         -changeStatusAction]): rewrote method.
3536
3537         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3538         -_handleAttendeesEdition]): make sure "attendeesNames" has a
3539         length > 0 before computing the attendees. Otherwise there will be
3540         an invalid empty entry.
3541         ([UIxComponentEditor -_handleOrganizer]): new method that adds the
3542         organizer when there are attendees and remove it when the
3543         attendees are removed.
3544
3545 2007-03-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3546
3547         * UI/Scheduler/UIxAttendeesEditor.m): new component.
3548
3549         * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
3550         the task and appointment editors. Now a container component
3551         handling the common elements of tasks and events.
3552
3553         * UI/Scheduler/UIxTaskEditor.m: same as below.
3554
3555         * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
3556         a subclass of UIxComponentEditor but a subcomponent of it.
3557
3558         * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
3559         toolbar can have the special value "none" to indicate there is
3560         none attached to the window.
3561
3562         * SoObjects/Appointments/SOGoCalendarComponent.m
3563         ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
3564         method.
3565         ([SOGoCalendarComponent -isParticipant:email]): new method.
3566         ([SOGoCalendarComponent -calendar:create]): takes one parameter
3567         "create" which is a boolean indicating whether we want to create
3568         the calendar if it does not exist.
3569
3570 2007-03-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3571
3572         * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
3573         of a table, the same way the dayly and weekly views have been for
3574         a few months now.
3575
3576 2007-02-09  Helge Hess  <helge.hess@opengroupware.org>
3577
3578         * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
3579           resourcetype
3580
3581         * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
3582           property to point at the user folder
3583
3584 2007-03-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3585
3586         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3587         -userInContext:]): returns "SOGoUser".
3588
3589         * SoObjects/Appointments/SOGoCalendarComponent.m
3590         ([SOGoCalendarComponent -contentAsString]): overriden method that
3591         takes the privacy into account and discard the relevant fields if
3592         needed by generating a new content string and caching it.
3593         ([SOGoCalendarComponent
3594         -saveContentString:contentStringbaseVersion:baseVersion]): if the
3595         new method above has cached a content string, release it and set
3596         it to nil so that it will have to be regenerated in the case it is
3597         requested further.
3598         ([SOGoCalendarComponent -_filterPrivateComponent:component]):
3599         discard the fields that have to be hidden when the card is
3600         private.
3601
3602         * SoObjects/Appointments/SOGoAppointmentFolder.m
3603         ([SOGoAppointmentFolder
3604         -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
3605         sure the cards are now handled as instances of
3606         SOGoCalendarComponent instead of SOGoContentObject so that their
3607         content string is taking the privacy classifiction into account.
3608         ([SOGoAppointmentFolder -_privacySqlString]): new method that
3609         generates a query to determine what information can be given and
3610         if the card itself has to be shown.
3611
3612         * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3613         -getICalPersonsFromValue:selectorValue]): removed useless
3614         "isAccessRestricted" method.
3615
3616         * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3617         -setStyle:_style]): test whether the values of orgmail and
3618         partmails are null before manipulating them, otherwise SOGo sends
3619         a "rangeOfString:" message to an NSNull, which makes it crashes.
3620
3621         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3622         -extractQuickFieldsFromEvent:_event]): we now use the new
3623         "symbolicAccessClass" method from iCalEntity to determine the
3624         value of the "classifiction" field.
3625         ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
3626         as above.
3627
3628 2007-03-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3629
3630         * SoObjects/Appointments/SOGoAppointmentFolder.m
3631         ([SOGoAppointmentFolder
3632         -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
3633         see below, the query is adapted consequently.
3634
3635         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3636         -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
3637         renamed to "classification" and can any integer as value.
3638         ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
3639         idem.
3640
3641 2007-02-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3642
3643         * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3644         ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
3645         don't prepend anything to the class and id named. Instead, we
3646         make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
3647         class.
3648
3649 2007-02-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3650
3651         * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
3652         -rolesOfUser:logininContext:context]): if object does not exists
3653         (for example when it's being created), the current user has the
3654         same rights on it than he/she has on its parent container.
3655
3656         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3657         -nameExistsInFolder:objectName]): methods that tests if a c_name
3658         corresponding to the name passed as parameter is present in the db
3659         folder.
3660
3661 2007-02-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3662
3663         * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3664         -rolesForObject:objectinContext:context]): test for
3665         "rolesOfUser:inContext:" in addition to "roleOfUser:...".
3666
3667         * SoObjects/Appointments/SOGoCalendarComponent.m
3668         ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
3669         returns the roles of the user on the container object if the event
3670         is uncreated.
3671
3672 2007-02-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3673
3674         * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
3675         alternativeViewer a multipart/related message is being handled.
3676
3677         * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
3678         from scratch.
3679
3680         * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
3681         text/html component before text/plain.
3682
3683         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3684         -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
3685         fetching of HTML parts.
3686
3687         * SoObjects/Appointments/SOGoCalendarComponent.m
3688         ([SOGoCalendarComponent -componentTag]): new template method that
3689         returns the vcalendar tag of the current object.
3690         ([SOGoCalendarComponent -component]): new method that returns the
3691         first object matching [self componentTag] within the current
3692         calendar object. This method replaces 'firstEventInCalendar:' as
3693         well as "firstTaskInCalendar:".
3694         ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
3695         moved method from SOGoAppointmentObject.m.
3696
3697 2007-02-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3698
3699         * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
3700         module which shows each selected user's calendar in a different
3701         column instead of mixing their events together.
3702
3703         * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
3704         replaced use of [NSString stringByTrimmingWhiteSpaces] with
3705         [NSString stringByTrimmingSpaces].
3706
3707         * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
3708         "cnWithoutQuotes" instead of "cnForDisplay", which no longer
3709         exists.
3710
3711         * UI/Scheduler/UIxCalDayOverview.m,
3712         UI/Scheduler/UIxCalDayChartview.m,
3713         UI/Scheduler/UIxCalDayListview.m,
3714         UI/Scheduler/UIxCalWeekOverview.m,
3715         UI/Scheduler/UIxCalWeekChartview.m,
3716         UI/Scheduler/UIxCalWeekListview.m,
3717         UI/Scheduler/UIxCalInlineMonthOverview.m,
3718         UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
3719
3720 2007-02-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3721
3722         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3723         -appendPersonalSourcesInContext:context]): release connectoin
3724         channel when everything is done.
3725
3726         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3727         -newAbAction]): new action method to crate a new contact folder
3728         from the web UI.
3729
3730         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
3731         that requests the folder manager to create a folder table with the
3732         specified type at the specified path. The type is taken from [self
3733         folderType].
3734
3735         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3736         -folderType]): implemented.
3737
3738         * SoObjects/Appointments/SOGoAppointmentFolder.m
3739         ([SOGoAppointmentFolder -folderType]): implemented.
3740
3741         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3742         -appendPersonalSourcesInContext:context]): we now fetch all
3743         folders with type "Contact" that belong to the current user.
3744         ([SOGoContactFolders -newFolderWithName:name]): new method to
3745         create a new contact folder.
3746
3747         * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
3748         resulting url with [NSString+Utilities hostlessURL] instead of
3749         using NSURL. This is because the url in question sometimes has a
3750         hostname and sometimes not. "hostlessURL" ensure the hostname is
3751         removed anyway.
3752         ([UIxComponent -applicationPath]): same as above.
3753
3754 2007-02-08  Ludovic Marcotte <ludovic@inverse.ca>
3755
3756         * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
3757         folders before doing the one on messages.
3758
3759 2007-02-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3760
3761         * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
3762         makeObjectsPerform:withObject:withObject: for GNUstep
3763         compatibility.
3764         
3765         * OGoContentStore/GNUmakefile, Protocols/common.make,
3766         SoObjects/common.make, UI/common.make: install in
3767         GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
3768
3769 2007-02-07  Ludovic Marcotte <ludovic@inverse.ca>
3770
3771         * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
3772         "Agendas"
3773
3774 2007-02-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3775
3776         * UI/MailerUI/UIxMailTree.m ([UIxMailTree
3777         -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
3778         for the moment.
3779
3780         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3781         -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
3782         password would be accepted anyway as long as its length was > 0.
3783         This can be the case ONLY when LDAP is disabled otherwise we have
3784         a serious security issue...
3785
3786         * SoObjects/Appointments/SOGoAppointmentObject.m
3787         ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
3788         user is not an organizer nor a participant, he is declared as
3789         "Owner" if he owns the calendar the entry where the entry is
3790         contained. Other cases should not be possible.
3791
3792 2007-02-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3793
3794         * UI/Contacts/UIxContactEditor.m: display and handle the new
3795         Freebusy URL entry.
3796
3797         * SoObjects/Contacts/SOGoContactLDAPFolder.m
3798         ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
3799         from the server.
3800
3801         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3802         -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
3803         entry.
3804
3805 2007-01-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3806
3807         * SoObjects/Appointments/SOGoCalendarComponent.m
3808         ([SOGoCalendarComponent -sendEMailNotifications]): new method that
3809         returns the value of ud "SOGoAppointmentSendEMailNotifications"
3810         (iMIP/iTIP).
3811         ([SOGoCalendarComponent
3812         -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
3813
3814 2007-01-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3815
3816         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3817         -defaultAction]): invoke "flushMailCaches" on [self clientObject]
3818         so that the mailbox cache is refreshed everytime the user presses
3819         on "get mail". I doubt a mailbox cache really is useful in general
3820         anyway.
3821
3822 2007-01-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3823
3824         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3825         -userInContext:]): if the lookup is on "freebusy.ifb" and the
3826         username is "anonymous" the user is automatically set to
3827         "freebusy".
3828
3829 2007-01-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3830
3831         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3832         -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
3833         user with password "freebusy".
3834
3835         * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
3836         -contentAsString]): the default timerange is now 14 days before
3837         currentday and 1 month after.
3838
3839 2007-01-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3840
3841         * SoObjects/Appointments/SOGoAppointmentFolder.m
3842         ([SOGoAppointmentFolder
3843         -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
3844         escape the record string in a way suitable with XML encoding.
3845
3846 2007-01-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3847
3848         * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
3849         calendar view would not be updated properly.
3850
3851 2007-01-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3852
3853         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3854         -newStartDate]): fix the handling of the component start date
3855         depending on the "hm" and the "day" parameters.
3856
3857         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3858         -roleOfUser:uidinContext:context]): set role of current user to
3859         "Assistant" if the object that is accessed is "freebusy.ifb".
3860
3861         * SoObjects/Appointments/SOGoAppointmentFolder.m
3862         ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
3863         moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
3864         ([SOGoAppointmentFolder
3865         -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
3866         lookupCalendarFolderForUID: method, which doesn't do security
3867         checks.
3868
3869 2007-01-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3870
3871         * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
3872         accessor that returns the comma-separated list of users with role
3873         "Assistant".
3874         ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
3875         ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
3876         "checkedUsers". Instead, each user is either classified in the
3877         list of assistants or the list of delegates.
3878
3879 2006-12-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3880
3881         * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
3882         -composeAction]): method imported from removed container modules.
3883         ([UIxMailMainFrame -mailFolderName]): method imported from removed
3884         container modules.
3885
3886         * UI/MailerUI/UIxMailPopupView.m: a new special popup component
3887         for wrapping UIxMailView with the "popupview" action.
3888
3889         * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
3890         since its the component that displays the same splash screen than
3891         the one in Thunderbird/Icedove.
3892
3893         * UI/MailerUI/UIxMailAccountViewContainer.[hm],
3894         UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
3895         UI/MailerUI/UIxMailListViewContainer.[hm],
3896         UI/MailerUI/UIxMailViewContainer.[hm]: removed
3897
3898 2006-12-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3899
3900         * UI/WebServerResources/HTMLElement.js: replaced the functional
3901         selectNode() and deselectNode() functions with select() and
3902         deselect() methods of HTMLElement.
3903
3904         * UI/WebServerResources/ContactsUI.js: cleanup, most of the
3905         events are initialized from here now instead of in the HTML code.
3906
3907         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3908         -checkRightsAction]): new method similar to the one with the same
3909         name in UIxCalMainView.m.
3910
3911         * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
3912         code to handle the publishing of freebusy information.
3913
3914 2006-12-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3915
3916         * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3917         -checkRightsAction]): new action method that returns a
3918         comma-separated list of boolean values matching the right of the
3919         current user to "view" (as a permission) each foreign calendar
3920         stored in his preferences.
3921
3922         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
3923         new method that sets a customOwner, which can be returned with
3924         ownerInContext it set.
3925
3926         * SoObjects/Appointments/SOGoAppointmentFolder.m
3927         ([SOGoAppointmentFolder
3928         -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
3929
3930 2006-12-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3931
3932         * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
3933         below, but for the Contacts and Calendar collections.
3934
3935         * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
3936         new acl facilities method from sope-gdl/GCSFolder.m.
3937
3938         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3939         -roleOfUser:uidinContext:context]): new method that returns
3940         SOGoRole_Assistant when the user is an assistant or a delegate on
3941         the "personal" ab object. This is so that setting roles on the
3942         SOGoContactFolders object is not required.
3943
3944 2006-12-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3945
3946         * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
3947
3948         * UI/Contacts/UIxContactsAclsSelection.m: new component specific
3949         to the handling of the user selection for the acls.
3950
3951         * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
3952         values from SoPermissions with ones specific to SOGo.
3953
3954         * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
3955         handles the storage for the acls.
3956
3957         * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
3958         class for SOGoAppointmentObject and SOGoTaskObject.
3959
3960         * UI/Common/UIxAclEditor.[hm]: new component that provides a
3961         general editor for folder acls.
3962
3963         * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
3964         renamed.
3965         ([NSString -davMethodToObjC]): method that returns the method name 
3966         for a DAV property implementation.
3967
3968         * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
3969         NSArray.
3970         ([NSArray -stringsWithFormat:format]): new method that returns
3971         formatted occurences of the strings stored in the array.
3972
3973         * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
3974         +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
3975         subclass module of SoWebDAVValue that supports collections of
3976         properties of the same type.
3977
3978 2006-11-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3979
3980         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3981         -lookupFolder:ofClassNamed:inContext:]): added the ability to
3982         configure the name of the SOGoDraftFolders with the ud var
3983         "SOGoDraftsFolderName".
3984
3985 2006-11-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3986
3987         * SoObjects/SOGo/SOGoObject.m ([SOGoObject
3988         -userTimeZone:username]): new method that returns the timezone for
3989         the specified user depending on his preferences and the server
3990         defaults
3991
3992         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3993         -stringForData:partInfo:]): take the encoding into account and
3994         translate the text to "normal" before processing the charset data.
3995
3996 2006-11-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3997
3998         * UI/WebServerResources/generic.js: the progress indicator is on
3999         when loading the page so we turn it off, and we turn it back on
4000         whenever we switch to another module...
4001
4002         * UI/WebServerResources/SchedulerUI.js: make sure the day view
4003         synchronization mechanism works everywhere.
4004
4005         * UI/WebServerResources/generic.js: the log window is not only
4006         visible when UIxDebugEnabled is set.
4007
4008         * UI/WebServerResources/SchedulerUI.js: the month overview's day
4009         cells are now initialized with the DOM event interface methods
4010         instead of with html attributes.
4011
4012         * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
4013         headers (should be made configurable at some point)...
4014
4015         * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
4016         "not null" constraint on startdate, enddate, isopaque,
4017         participants and partmails.
4018
4019 2006-11-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4020
4021         * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
4022         -hoursToDisplay]): prevent a crash by retaining the
4023         "hoursToDisplay" array after it's created.
4024         ([UIxCalDayTable -clickableHourCellClass]): new method for the new
4025         clickable hours DIV.
4026
4027         * UI/WebServerResources/SchedulerUI.js: made the event
4028         participation status modification asynchronous, which also fixes a
4029         bug where the window would sometimes close before the accept or
4030         decline action was completed. Also, adapted the event handling
4031         related to the days or weeks view with the new DIV-based layout.
4032
4033         * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
4034
4035         * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
4036         DIV-based presentation of the days and weeks.
4037
4038         * SoObjects/Appointments/SOGoTaskObject.m: same as below...
4039
4040         * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
4041         might return an exception so we have to handle it if we don't
4042         wanna crash...
4043
4044 2006-11-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4045
4046         * UI/WebServerResources/SchedulerUI.js: updated the list
4047         initialization code to use the new event management scheme, adding
4048         what was missing to be able to delete events and tasks again.
4049
4050         * UI/WebServerResources/MailerUI.js: added code to activate the
4051         "Get mails" button. Fixed a bug which prevented messages to be
4052         deleted.
4053
4054         * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
4055         navigation and focus handling of INPUTs.
4056
4057 2006-11-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4058
4059         * UI/WebServerResources/MailerUI.js: added code to handle the
4060         possible drag and drop events to manager in the mail module.
4061         Moving messages, opening parent folders, ...
4062
4063         * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
4064         the drag and drop manager as well as the interface to HTMLElement
4065         to trigger drag and drop events.
4066
4067         * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
4068         action to move the current message to the mailbox named after the
4069         value of parameter "tofolder".
4070
4071         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
4072         -moveToFolderNamed:folderNameinContext:]): new method base on
4073         -trashInContext:.
4074
4075 2006-11-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4076
4077         * UI/WebServerResources/generic.js: added and activated many
4078         "load" handlers to configure generic widgets used across the
4079         modules. More events are now handled in a DOM-fashion way instead
4080         of by setting the relative attributes in the templates.
4081
4082         * UI/Templates/UIxSortableTableHeader.wox: all the events are
4083         declared from the javascript DOM onload handlers.
4084
4085         * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
4086         library.
4087
4088         * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
4089         declared from the javascript DOM onload handlers.
4090
4091         * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
4092         we want everything to be separated from each other, as much as
4093         possible.
4094
4095         * UI/WebServerResources/SOGoDragHandles.js: new module containing
4096         the "SOGoDragHandlesInterface", implementing methods that can be
4097         attributed to DIV so that they can be used as drag handles.
4098
4099         * SoObjects/Mailer/SOGoDraftObject.m ([NSString
4100         -asQPSubjectString]): initialize the tmp strings with '0' to make
4101         sure they don't contain garbage.
4102
4103 2006-11-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4104
4105         * UI/WebServerResources/MailerUI.js: register the messageList
4106         table as a dragging source and the leaf of the navigation tree as
4107         dnd destinations to the DNDManager.
4108
4109         * UI/WebServerResources/generic.js: initialize tabs from the
4110         "unload" event listener that is added programmatically instead of
4111         from the template... Also, added the new DNDManager object.
4112
4113         * UI/WebServerResources/HTMLTableElement.js: added code to
4114         simulate XUL drag n drop events. This code will possibly be moved
4115         to HTMLElement.js instead later...
4116
4117         * SoObjects/Contacts/SOGoContactLDAPFolder.m
4118         ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
4119         below.
4120
4121         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4122         -_qualifierForFilter:filter]): only search records which starts
4123         with the specified pattern.
4124
4125 2006-11-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4126
4127         * SoObjects/Mailer/SOGoDraftObject.m ([NSString
4128         -asQPSubjectString]): new method that returns the special QP
4129         string with its qp declaration for email subjects.
4130         ([SOGoDraftObject -bodyPartForText]) 
4131         ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
4132         double-encode data in UTF-8.
4133
4134         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4135         -newStartDate]): new method to determine the start date depending
4136         on the URL parameters, the current day and the current time.
4137         ([UIxComponentEditor -toolbar]): new method to determine the
4138         filename of the toolbar that should be drawn depending on the
4139         ownership and the list of attendees of the task/event wrt to the
4140         current user...
4141
4142         * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4143         -setDayStartHour:aStartHour]): adjust the minutes to the next
4144         quarter of hour, if not already set to a quarter.
4145
4146         * UI/WebServerResources/UIxAppointmentEditor.js,
4147         UI/WebServerResources/UIxTaskEditor.js: added code to manage start
4148         date change.
4149
4150 2006-11-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4151
4152         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4153         -loadValuesFromComponent:component]): handles access class
4154         (privacy) and status.
4155
4156         * UI/Contacts/UIxContactsListViewContainer.m
4157         ([UIxContactsListViewContainer -additionalFolders]): return nil if
4158         [self additionalAddressBooks] returns an empty string.
4159
4160 2006-11-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4161
4162         * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
4163         rangesOf7Days]): enhanced and debugged algorithm to feed the array
4164         with slices where the first day is still in the requested month.
4165
4166         * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
4167         non-popup pages.
4168
4169         * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
4170         of events in the day boxes of the calendar's monthly view.
4171
4172         * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
4173         -davContentType]): declare "text/calendar".
4174
4175         * SoObjects/Appointments/SOGoAppointmentObject.m
4176         ([SOGoAppointmentObject -davContentType]): declare
4177         "text/calendar".
4178
4179         * SoObjects/Appointments/SOGoAppointmentFolder.m
4180         ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
4181         HTTP methods are handled by SOPE and requires nil to be returned,
4182         this method now invokes the new
4183         "requestNamedIsHandledLater:inContext:" method to check that.
4184         ([SOGoAppointmentFolder
4185         -requestNamedIsHandledLater:nameinContext:context]): new methods
4186         that returns "YES" only for the "OPTIONS" http method (for now...).
4187         ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
4188         overloaded method to append the "access-control" and
4189         "calendar-access" DAV abilities to the initial declaration.
4190
4191         * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
4192         imitate the look of Sunbird/Lightning's monthly view.
4193
4194         * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
4195         UIxCalMonthViewOld.[hm].
4196
4197 2006-11-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4198
4199         * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
4200         ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
4201         method.
4202         ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
4203         returns an image name based on the participation status of the
4204         current attendee.
4205
4206         * UI/WebServerResources/SchedulerUI.js: same strip down as for
4207         generic.js below.
4208
4209         * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks]) 
4210         ([UIxContactsListViewContainer -additionalFolders]) 
4211         ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder]) 
4212         ([UIxContactsListViewContainer -currentAdditionalFolder]): new
4213         methods to handle the external addressbooks a user has subscribed
4214         too, by retriving them from his preferences.
4215
4216         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4217         -updateAdditionalAddressBooksAction]): new method that updates the
4218         user settings with the list of addressbook he has subscribed to.
4219
4220         * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
4221         module for the address book selector.
4222
4223         * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
4224         a toolbar with two buttons ("add" and "remove") to manage the
4225         additional addressbooks a user might subscribe to.
4226
4227         * UI/WebServerResources/ContactsUI.js: added code to handle
4228         "external addressbooks" from the Javascript point-of-view, by
4229         extending existing methods and adding code for the "add ab" and
4230         "remove ab" buttons.
4231
4232         * UI/WebServerResources/generic.js: moved extensions methods to
4233         DOM elements to separate files for better clarity.
4234
4235         * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
4236         new method that returns "pageContent" as class, but also "popup"
4237         for the DIV where the page content lies, so that we can manipulate
4238         the content of popup's with CSS identifiers.
4239
4240 2006-10-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4241
4242         * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4243         -displayStyle]): new method that returns a string containing the
4244         css style relative to the current appointment cell. This code is
4245         currently inactive but might be reused later.
4246
4247         * UI/WebServerResources/SchedulerUI.js: added code to handle the
4248         display of the selected day (the day pointed by the mouse, or the
4249         current day when changing the view).
4250
4251         * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
4252         -dayCellClasses]): new method that returns a string containing the
4253         css classes applicable to the current cell, depending on the
4254         position of the day in the week, the day of today and the
4255         requested day.
4256
4257         * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
4258         -currentContactAptBorder]): new method that returns the
4259         appropriate border color for the specified user.
4260
4261         * SoObjects/Appointments/SOGoAppointmentObject.m
4262         ([SOGoAppointmentObject
4263         -saveContentString:contentStringbaseVersion:baseVersion]):
4264         overloaded method that parse new events and detects if they have
4265         an organizer or not. If they are new and have no organizer set
4266         (Sunbird/Lightning...), the owner of the event is set as
4267         organizer.
4268
4269         * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
4270         category that provides facility methods and interfaces to the
4271         AgenorUserManager.
4272
4273         * SoObjects/Contacts/product.plist: give full access to ANY
4274         authenticated user, not just the owner (to every objects...).
4275
4276 2006-10-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4277
4278         * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
4279         every replica widgets are declared as such to their master
4280         counterpart. Take the days into account when displaying the time
4281         range taken by the appointment.
4282
4283         * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
4284         -getICalPersonsFromValue:selectorValue]): method taken from
4285         UIxFreeBusyUserSelector, that is shared both by
4286         UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
4287
4288         * SoObjects/Appointments/SOGoAppointmentFolder.m
4289         ([SOGoAppointmentFolder
4290         -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.
4291
4292         * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
4293         derived and taken as a subset of UIxFreeBusyUserSelector that
4294         implements the table part of the FreeBusy view. Most of the
4295         methods of UIxFreeBusyUserSelector relative to that table were
4296         moved into UIxFreeBusyUserSelectorTable, which can also be used as
4297         a standalone view for AJAX operations.
4298
4299 2006-10-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4300
4301         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4302         -vCard]): change reverted.
4303
4304         * UI/Contacts/UIxContactEditor.m: check whether the client contact
4305         folder has selector "globallyUniqueObjectId" before calling that
4306         method.
4307
4308         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4309         -vCard]): the "setVClass" NGVCard method really is "setClass"
4310         instead.
4311
4312         * SoObjects/Contacts/SOGoContactLDAPFolder.m
4313         ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
4314         request the "streetAddress" instead of the "streetaddress".
4315         ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
4316         mails that *contain*, and not just *start with* the search
4317         pattern.
4318
4319         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4320         -vCard]): mark address returned from LDAP as the work address.
4321
4322         * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
4323         span covered with the anchor, not only the textual information
4324         within.
4325
4326         * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
4327         argument (event or task) to newEvent in the appointmentListMenu.
4328         Make the appointmentsListView display the appointmentsListMenu.
4329
4330         * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
4331         12 to 50 before displaying "...".
4332         ([SOGoAptFormatter -fullDetailsForApt::]): display location only
4333         if its length > 0, whether location itself is nil or not...
4334         ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
4335         of which the length > 0.
4336
4337 2006-10-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4338
4339         * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
4340         french and ISO dates.
4341
4342         * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
4343         from UIxContactSelector to handle contact lists (current and
4344         additional contacts).
4345
4346         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4347         -_freeBusyAsText]): added handling of an "additional"-named query
4348         parameter that describe the number of additional days after
4349         enddate that should be returned.
4350
4351         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4352         -_responseForResults:results]): give priority to results with
4353         "c_uid" fields. If none returned, use the first contact received.
4354
4355         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4356         -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
4357         2 and "CANCELLED" to 0.
4358
4359 2006-10-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4360
4361         * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
4362         of start and end dates to short string dates.
4363
4364         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4365         -readFreeBusyAction]): new method that returns an array of numbers
4366         corresponding to the state in the freebusy of each "quarter of an
4367         hour" between the "sday" and "eday" date parameters passed in the
4368         url. This permits to handle the display of the freebusy with Ajax
4369         mechanisms.
4370         ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
4371         since the free busy displays 2 days ahead.
4372
4373         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4374         -contactSearchAction]): new action that returns the uid and the
4375         username + email of the user whose name contain the value of the
4376         "search" url parameter.
4377
4378         * SoObjects/Appointments/SOGoAppointmentFolder.m
4379         ([SOGoAppointmentFolder
4380         -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
4381         useful for the computing of the status of the freebusy.
4382
4383         * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
4384         -init]): new component that incarnates a user selector for events
4385         inspired by the new one found in Thunderbird Lightning.
4386
4387 2006-10-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4388
4389         * UI/WebServerResources/generic.js: added code to enable or
4390         disable anchor visually (following our internal algorithm).
4391
4392         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
4393         added new "url" ivar with its classic accessors.
4394         ([UIxComponentEditor -urlButtonClasses]): new method that returns
4395         the class strings for the url button on the appointment/task
4396         editor (depending on the validity of the url).
4397
4398         * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
4399         UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
4400         the template to match the Lightning's new task/appointment editor.
4401
4402         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
4403
4404         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
4405
4406 2006-10-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4407
4408         * SoObjects/Contacts/SOGoContactLDAPFolder.m
4409         ([SOGoContactLDAPFolder
4410         -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
4411
4412         * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
4413         iCalEntityObject instances instead of just iCalEvent's.
4414
4415         * SoObjects/Appointments/SOGoAppointmentFolder.m
4416         ([SOGoAppointmentFolder
4417         -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
4418
4419         * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
4420         bad way of handling ownership that way.
4421
4422         * SoObjects/Contacts/SOGoContactLDAPFolder.m
4423         ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
4424         on "cn", just like Mozilla.
4425
4426 2006-10-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4427
4428         * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
4429         "to" should be retained, otherwise it will be autoreleased and a
4430         crash will occur.
4431
4432         * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4433         -writeAction]): updated method to fetch the card before initing
4434         the snapshot.
4435
4436         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4437         -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
4438         of NSNotFound.
4439
4440         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
4441         -iCalStringTemplate]): start and due date are now optional.
4442
4443         * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4444         -setDayStartHour:aStartHour]):  added a new "isDisabled" ivar with
4445         appropriate accessors to be settable through the templates.
4446
4447         * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
4448         new "isDisabled" ivar with appropriate accessors to be
4449         settable through the templates.
4450
4451         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4452         -availableCalendars]): new method that list the calendars to which
4453         the user has subscribed.
4454         ([UIxComponentEditor -componentOwner]): returns the owner of the
4455         editted object.
4456
4457         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4458         -extractQuickFieldsFromTodo:_task]): set the start and enddate of
4459         quickentries to null whenever each or all of them are null, by
4460         providing an impossible timestamp from with NSNotFound as value.
4461
4462 2006-10-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4463
4464         * UI/WebServerResources/UIxMailEditor.js: update the algorithm
4465         that handles the creation of new fields with the new APIs and the
4466         new node structure on the page.
4467
4468         * UI/Scheduler/UIxAppointmentEditor.m,
4469         UI/Scheduler/UIxTaskEditor.m:
4470         refactored to user UIxComponentEditor as parent class.
4471
4472         * UI/Scheduler/UIxComponentEditor.[hm]: new class module
4473         containing the methods common to the UIxTaskEditor and the
4474         UIxAppointmentEditor.
4475
4476 2006-10-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4477
4478         * SoObjects/Appointments/SOGoAppointmentFolder.m
4479         ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
4480         the handling of time-ranges.
4481
4482         * UI/WebServerResources/ContactsUI.js: specify a notification type as
4483         parameters when onConfirmContactSelection in invoked.
4484
4485         * UI/WebServerResources/generic.js: specify a notification type as
4486         parameters when onContactRemove in invoked.
4487
4488         * UI/WebServerResources/SchedulerUI.js: when the user deselects
4489         all calendars, select his entry.
4490
4491 2006-10-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4492
4493         * UI/WebServerResources/SchedulerUI.js: edit and delete events
4494         with their owner-relative urls. Generate a correct entry in the
4495         css color table when a user is added to the calendars list. Put
4496         the same color next to the user id.
4497
4498         * UI/WebServerResources/generic.js: implemented some new helper
4499         methods.
4500
4501         * SoObjects/Appointments/SOGoAppointmentFolder.m
4502         ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
4503         entries if their owner is not the current user.
4504
4505         * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4506         -displayClasses]): return the correct class for the current event
4507         representation depending on its owner.
4508
4509         * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
4510         and associate a color for each user login depending on its
4511         position in the list.
4512
4513         * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
4514         -currentRowCSSClass]): return the correct class for the current
4515         row depending on the owner of the event.
4516
4517         * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4518         -setColors:colors]): new method to associate a color table with
4519         each user in the list.
4520
4521         * SoObjects/Appointments/SOGoAppointmentFolder.m
4522         ([SOGoAppointmentFolder
4523         -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
4524
4525         * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
4526         NSObject to associate an instance with a user.
4527
4528 2006-10-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4529
4530         * UI/WebServerResources/SchedulerUI.js: added handling of multiple
4531         calendars.
4532
4533         * UI/WebServerResources/ContactsUI.js: added handling of
4534         notification of changes to contact selectors.
4535
4536         * UI/WebServerResources/generic.js: added handling of notification
4537         of changes to contact selectors.
4538
4539         * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4540         -updateCalendarsAction]): proxy method to update the user
4541         preference table with the new selected calendar uids.
4542
4543         * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
4544         -calendarsContactsAction]): new method.
4545
4546         * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes]) 
4547         ([UIxContactSelector -setHasCheckBoxes:aBool]) 
4548         ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
4549         permit the drawing of checkboxes instead of card icons.
4550
4551         * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
4552         wrap a selector the the "Calendars" tab.
4553
4554         * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
4555         new user calendar selector.
4556
4557 2006-10-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4558
4559         * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
4560         may cover hour 0 to hour 23.
4561
4562         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4563         -iCalStringFromQueryParameter:format:]): dates explicitly set to
4564         utc tz.
4565
4566         * UI/WebServerResources/SchedulerUI.js: manage both lists of
4567         objects wrt to the toolbar actions.
4568
4569         * UI/WebServerResources/generic.js: added code to the "String"
4570         class to decode number-encoded char entities.
4571
4572         * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4573         -batchDeleteAction]): new method to delete selected entries in the
4574         lists.
4575
4576         * SoObjects/Appointments/SOGoAppointmentFolder.m
4577         ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
4578         that delete identified entries in batch.
4579
4580         * UI/SOGoUI/UIxComponent.m ([UIxComponent
4581         -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
4582
4583         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
4584         UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4585         -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
4586         -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4587         -saveAction]):
4588         return a UIxJSClose component if everything went fine.
4589
4590         * UI/Scheduler/UIxTaskEditor.h: interface extracted from
4591         UIxTaskEditor.m.
4592
4593         * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
4594         UIxAppointmentEditor.m.
4595
4596         * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
4597         a very light page with javascript code to close a window, by
4598         calling a method on the opener if specified. This component is
4599         designed to work as a response to form postings.
4600
4601 2006-10-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4602
4603         * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
4604         SOGoAppointmentObject adapted for the handling of tasks.
4605
4606         * SoObjects/Appointments/NSArray+Appointments.[hm]: category
4607         extracted from SOGoAppointmentObject.
4608
4609         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4610         -saveUrl]): returns the url needed to POST the new form to.
4611         redirect the user to <aptid>/editAsAppointment instead of /edit,
4612         so that SOGoAppointmentFolder can return the correct object type.
4613
4614         * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
4615         -compareAptsAscending:_other]): accept empty start or end dates.
4616
4617         * SoObjects/Appointments/SOGoAppointmentFolder.m
4618         ([SOGoAppointmentFolder
4619         -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.
4620         ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
4621         components of type "vtodo" as well as "vevent".
4622         ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
4623         url specified ends with AsTask or AsAppointment, returns the
4624         an object of the appropriate class, otherwise deduce it from its
4625         content if the HTTP method is "PUT", otherwise read its type from
4626         the quick table.
4627
4628         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4629         -extractQuickFieldsFromTodo:_task]): extract quick fields from
4630         tasks.
4631
4632         * UI/Scheduler/UIxCalView.m ([UIxCalView
4633         -fetchCoreAppointmentsInfos]): replacement methods for
4634         fetchCoreInfos but by retrieving object with component "vevent".
4635         ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
4636         components.
4637
4638         * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
4639         UIxCalAptListView adapted for the handling of tasks.
4640
4641         * UI/Scheduler/UIxTaskProposal.[hm],
4642         UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
4643         clones of the UIxAppointment* classes for the handling of tasks.
4644
4645         * UI/WebServerResources/UIxTaskEditor.js: clone of
4646         UIxAppointmentEditor adapted for the handling of tasks.
4647
4648         * UI/WebServerResources/SchedulerUI.js: added support for tasks.
4649         Scroll the daily view to the appropriate hour when an appointment
4650         is selected in the appointments list.
4651
4652 2006-10-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4653
4654         * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4655         -setDayStartHour:aStartHour]): specifies the user timezone on the
4656         given date.
4657
4658         * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
4659         as timezone.
4660
4661         * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate]) 
4662         ([NSCalendarDate -driftedDate]): methods made useless by a better
4663         comprehension of the NSTimeZone API...
4664
4665 2006-10-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4666
4667         * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
4668         new methods from the NSCalendarDate methods.
4669
4670         * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
4671         extending UI/Scheduler/NSCalendarDate+Scheduler.m.
4672         ([NSCalendarDate
4673         +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).
4674         ([NSCalendarDate -adjustedDate]): this method returns another
4675         instance set to the correct hour after the original date was set
4676         from a non-GMT timezone. This date can be used for storage.
4677         ([NSCalendarDate -driftedDate]): this method does exactly the
4678         opposite of -adjutedDate, that is, it enables the method
4679         hourOfDay, minuteOfHour etc... to return the values according to
4680         the original date's timezone. This date CANNOT be used for storage.
4681
4682         * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
4683         -shortDateString]): new method that will return a "short date
4684         string" (yyyymmdd) from a calendar date object.
4685
4686         * UI/SOGoUI/UIxComponent.m ([UIxComponent
4687         -_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.
4688
4689         * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
4690         to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
4691
4692 2006-10-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4693
4694         * UI/WebServerResources/SchedulerUI.js: added code to scroll the
4695         view of the day at the height of hour 8:00.
4696
4697         * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
4698         ([UIxCalView -dayEndHour]): returns 24.
4699
4700         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction]) 
4701         ([UIxContactFoldersView -newAction]): invoke
4702         _selectActionForApplication: on self with the proper attribute too.
4703
4704         * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
4705         we now use the action mechanism in UIxContactsListView to keep the
4706         same view for the contact selectors and the regular contact view.
4707
4708         * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
4709         UIxContactsListViewContainerBase.[hm]
4710
4711         * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
4712
4713         * UI/WebServerResources/generic.js: generalized emailstring
4714         handling functions. Generalized address book access functions.
4715
4716         * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4717         -isPopup]): return YES if the "popup" query parameter is set.
4718
4719         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4720         -defaultAction]): keep the url parameters when redirecting.
4721         ([UIxContactFoldersView -selectForSchedulerAction]) 
4722         ([UIxContactFoldersView -selectForMailerAction]): new action
4723         methods for the /scheduler-contacts and /mailer-contacts invocations.
4724
4725         * SoObjects/SOGo/SOGoObject.m: compose the action url using the
4726         newly available NSString+URL category.
4727
4728         * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
4729         -asURLParameters]): handle dictionary entries which could be
4730         instances of NSArray rather than NSString.
4731
4732         * SoObjects/SOGo/NSString+URL.m ([NSString
4733         -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
4734         ([NSString -urlWithoutParameters]): new method that returns the
4735         url without its parameters.
4736
4737         * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
4738
4739         * SoObjects/SOGo/NSDictionary+URL.[hm],
4740         UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
4741
4742         * UI/WebServerResources/UIxMailEditor.js: add support for
4743         additions of different types (to, cc, bcc) of recipients from the
4744         address book.
4745
4746         * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
4747         "<?xml..." header.
4748
4749         * UI/Contacts/UIxContactsMailerSelection.m,
4750         UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
4751         UI/Contacts/UIxContactsSelectionView.m to provide a different set
4752         of widgets depending on the application invoking the contact list.
4753
4754 2006-09-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4755
4756         * UI/WebServerResources/ContactsUI.js: hide the current contact
4757         whenever the user changes of contact folder.
4758
4759         * UI/WebServerResources/UIxContactEditor.js: the contact UID is
4760         now provided by the template when loading the page.
4761
4762         * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4763         -iCalPersonWithUid:uid]): new method taken from removed module
4764         'iCalPerson+UIx';
4765
4766 2006-09-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4767
4768         * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
4769         -categoriesAsString]): same as below.
4770
4771         * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
4772         vcalendar API's iCalEvent instead of the removed SOGoAppointment.
4773
4774         * SoObjects/Appointments/SOGoAppointmentObject.m
4775         ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
4776         ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
4777         helper method.
4778
4779         * SoObjects/Appointments/SOGoAppointmentFolder.m
4780         ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
4781         hackish test to detect whether the request concernes VEVENT's or
4782         anything else. Return events only in the former case.
4783         ([SOGoAppointmentFolder
4784         -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
4785         c_name quickfield so that the calendar list can identify the
4786         appointments with their complete "filename".
4787
4788         * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
4789         groupsOfClass:fromSource: to parse the given vcalendar.
4790
4791         * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
4792
4793         * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
4794
4795         * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
4796         obsolete class.
4797
4798         * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
4799
4800 2006-09-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4801
4802         * SoObjects/Appointments/SOGoAppointmentFolder.m
4803         ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
4804         sensitive to the CalDAV method names.
4805         ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
4806         "calendar-query" CalDAV method name.
4807
4808         * UI/WebServerResources/ContactsUI.js: removed a lot of useless
4809         code coming originally from MailerUI.js.
4810
4811         * UI/WebServerResources/UIxContactEditor.js: imitate the
4812         Thunderbird address book by completing the display name with the
4813         content of the first and last name fields, until the display name
4814         is modified manually.
4815
4816         * UI/WebServerResources/generic.js: added a "trim" method to the
4817         String class.
4818
4819         * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4820         -displayName]): new method that returns the display name from "cn"
4821         or from the "displayName" key if found.
4822
4823         * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4824         -initSnapshot]): check if "[card n]" returns anything to avoid a
4825         crash.
4826
4827         * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
4828         that returns an unparsed doctype definition for the pages.
4829
4830         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4831         -vCard]): set the card's fn to attribute "displayName" if found
4832         before "cn".
4833
4834 2006-09-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4835
4836         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4837         -vCard]): handle the "streetAddress" and "l" fields.
4838
4839         * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
4840         header fields by converting the tables to DIVs and SPANs.
4841
4842         * UI/WebServerResources/generic.css: attempted unification of font
4843         families and size across all the elements. changed the
4844         logConsole's "position" from "fixed" to "absolute" to avoid
4845         performance issues.
4846
4847 2006-09-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4848
4849         * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
4850         empty the contact view when the current contact is being deleted.
4851
4852         * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
4853         parse the email field and provide the address full name if found
4854         as the "contactFN" parameter.
4855
4856         * UI/WebServerResources/generic.js (openMailTo): do not give a
4857         name to the opened window so that serveral ones can be opened at
4858         the same time.
4859
4860         * UI/MailPartViewers/UIxMailPartTextViewer.m
4861         ([UIxMailPartTextViewer -flatContentAsString]): override method by
4862         replacing carriage returns with "<br />" in the result string from
4863         super's implementation.
4864
4865         * UI/Contacts/UIxContactView.m ([UIxContactView
4866         -_urlOfType:aType]): don't manage non-mailto urls through
4867         javascript, let the user decide what's best for him.
4868
4869         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4870         -newAction]): transfer all the query parameters by using the
4871         "asURLParameters"'s result string from [self queryParameters].
4872
4873         * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4874         -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
4875         query parameters and put their values (if any) into the snapshot.
4876
4877         * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
4878         carriage-returns to "<br />".
4879         ([UIxContactView -workCompany]): explicitly initialize company to
4880         nil if org is nil or empty.
4881
4882         * UI/WebServerResources/UIxContactEditor.js: updated validation
4883         code after we added and renamed some fields.
4884
4885         * UI/WebServerResources/ContactsUI.js: added code to cache contact
4886         cards and to handle card updates.
4887
4888 2006-09-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4889
4890         * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
4891         test the length of the returned string since they will never be
4892         nil.
4893
4894         * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
4895         return self if the process went successful, returns an exception
4896         otherwise (and only otherwise...).
4897
4898         * OGoContentStore/OCSContactFieldExtractor.m
4899         ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
4900         adapted method to the new VCard api. Since the cards are stored in
4901         vcard format, we no longer deal with a dictionary but with a
4902         NGVCard object...
4903
4904 2006-09-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4905
4906         * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
4907         return a string with a "mailto" url.
4908         ([UIxContactView -_urlOfType:aType]): generic method to return a
4909         url string with a html anchor pointing to it.
4910
4911         * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
4912         since subclass "UIxContactEditor" did nothing. Implemented code to
4913         display and modify the values parsed from the vcards, displayed in
4914         a way similar to the Thunderbird addressbook.
4915
4916         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4917         -save]): new dummy method.
4918
4919         * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4920         -save]): made method void.
4921
4922 2006-09-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4923
4924         * UI/Contacts/UIxContactView.m: added many wrapper methods to
4925         display blocks of data Ã  la Thunderbird Addressbook. If data is
4926         available, those wrappers (around the NGVCard methods) will
4927         enclose the results in a proper HTML output with the correct label
4928         (if present), otherwise it will return an empty string.
4929         ([UIxContactView -vcardAction]): new action to return the contact
4930         as text/vcard (for exporting).
4931
4932         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4933         +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
4934
4935         * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4936         -vCard]): create a new NGVCard instance when no data is available
4937         and retain it.
4938         ([SOGoContactGCSEntry -save]): save the vCard using the new
4939         "versitString" API method/message.
4940
4941         * UI/Contacts/UIxContactView.h: separated interface from
4942         UIxContactView.m.
4943
4944         * UI/WebServerResources/ContactsUI.js: add-ed code to download card
4945         views and display them beneath the list.
4946
4947 2006-09-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4948
4949         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
4950         the timezone even when it's the server timezone.
4951
4952         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4953         -privateContacts:inContext:]): no long configure the calendar
4954         object with the user's timezone since it's now accessible
4955         application-wide throught the SOGoObject methods.
4956
4957         * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
4958         method. Removed the "backendTimeZone" method.
4959
4960         * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
4961         instead of SoComponent.
4962
4963         * SoObjects/Appointments/SOGoAppointmentObject.m: 
4964         ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
4965         [self serverTimeZone] instead of "EST" (which was removed).
4966
4967         * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
4968         "timeZone" ivar and its accessors.
4969
4970         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
4971         centralized method returing the timezone configured in the
4972         userdefaults db or "Canada/Eastern" if missing.
4973         ([SOGoObject -userTimeZone]): new centralized method returing the
4974         timezone of the current user or the server timezone if missing
4975         from the user configuration table.
4976
4977 2006-09-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4978
4979         * UI/WebServerResources/SchedulerUI.js: implemented caching of
4980         date selectors.
4981
4982         * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
4983         return a path based on the object's context instead of the first
4984         level in SOGo's object hierarchy...
4985
4986 2006-09-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4987
4988         * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
4989         be clicked.
4990
4991         * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
4992         timezone ([self viewTimeZone]) to the WEMonthOverview component to
4993         avoid a confusion with the days.
4994
4995         * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
4996         can now be clicked.
4997
4998         * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
4999         imitate Sunbird's synchronization between the 3 visible views.
5000
5001         * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
5002         sure the numbers in dateString are formatted so as to take 4 chars
5003         for the year and 2 for the day and the month, otherwise
5004         NSCalendarDate will return a nil date.
5005         ([UIxComponent -applicationPath]): return a path based on the
5006         object's context instead of the second level in SOGo's object
5007         hierarchy...
5008
5009 2006-09-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5010
5011         * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
5012         user's timezone abbreviation to the date string passed as parameter to
5013         NSCalendarDate to generate an accurate date instance. Do the same
5014         when no date is specified and today is chosen.
5015
5016         * UI/WebServerResources/UIxAppointmentEditor.js: convert the
5017         form's time values to integers before comparing them.
5018
5019         * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime]) 
5020         ([UIxCalAptListView -currentEndTime]): initialize the resulting
5021         dates timezone with [self viewTimeZone].
5022
5023         * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
5024         "viewTimeZone" ivar destined to hold an instance of the user's
5025         timezone in memory.
5026         ([UIxComponent -viewTimeZone]): take the timezone from the user's
5027         prefs.
5028
5029 2006-08-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5030
5031         * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
5032         rearranged the layout.
5033
5034         * UI/WebServerResources/UIxAppointmentEditor.js: added code to
5035         manage showing and hiding appointment details.
5036
5037         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5038         -privateContacts:inContext:]): init the SOGoAppointmentFolder's
5039         timezone by taking the current user's timezone setting.
5040
5041         * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
5042
5043         * SoObjects/Appointments/SOGoAppointmentObject.m
5044         ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
5045         set default timezone to EST, although this code should be
5046         rewritten to handle a system and a user default value.
5047
5048         * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
5049         -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
5050         take the values from the hour and minute INPUTs when data is
5051         POSTed since we no longer use the UIxTimeSelector component.
5052         ([UIxTimeDateControl -selectableHours]) 
5053         ([UIxTimeDateControl -selectableMinutes]): new methods used by the
5054         template SELECTs to display reasonable and acceptable values
5055         instead of all the possibilities.
5056
5057         * UI/WebServerResources/generic.js: adapted code for the new
5058         implementation of the UIxContactSelector component (added a
5059         "remove" button, removed the previous INPUT and replaced them with
5060         links of class "button").
5061
5062         * UI/Scheduler/UIxTimeDateControl.h: separated interface from
5063         UIxTimeDateControl.m.
5064
5065         * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay]) 
5066         ([UIxCalDayTable -currentAppointmentHour]): new methods that
5067         returns correctly formatted values used as attributes for JS code.
5068
5069         * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
5070         -initialContactsAsString]): renamed implementation of
5071         initialParticipants.
5072         ([UIxContactSelector -currentContactId]) 
5073         ([UIxContactSelector -currentContactName]): new methods used when
5074         listing the initial contacts in the widget. Currently, both return
5075         the person's cn but the latter should ultimately return a user
5076         fullname.
5077
5078         * UI/Contacts/UIxContactSelector.h: separated interface from
5079         UIxContactSelector.m.
5080
5081         * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
5082         all javascript code is now put in Scheduler.js/generic.js.
5083
5084         * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
5085         moved into NSCalendarDate+Scheduler instead.
5086
5087         * SoObjects/Appointments/SOGoAppointmentFolder.m
5088         ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
5089         configure the timezone from SOGoUserFolder when the instance is
5090         being created.
5091         ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
5092         the value of the new "timezone" ivar.
5093
5094 2006-08-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5095
5096         * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
5097         the date selector in the first page and the container of the
5098         future calendar selector in the second page.
5099
5100         * UI/WebServerResources/generic.js: added code for handling tabbed
5101         views.
5102
5103         * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
5104         returns the bundle name associated to the current running product.
5105
5106 2006-08-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5107
5108         * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
5109         exception by invoking a timeout on the opener rather than invoking
5110         the list refresh method.
5111
5112         * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
5113         removed method.
5114
5115         * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters]) 
5116         ([UIxCalWeekView -prevWeekQueryParameters]) 
5117         ([UIxCalWeekView -nextWeekQueryParameters]) 
5118         ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
5119         that return the dates relatively to the current day.
5120         ([UIxCalWeekView -lastWeekName]) 
5121         ([UIxCalWeekView -currentWeekName]) 
5122         ([UIxCalWeekView -nextWeekName]) 
5123         ([UIxCalWeekView -weekAfterNextWeekName]) 
5124         ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
5125         methods that returns the label for the corresponding weeks.
5126
5127         * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
5128         used by UIxCalDayView and UIxCalWeekView to display the events
5129         occuring in one or more days.
5130
5131 2006-08-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5132
5133         * UI/Scheduler/UIxCalMainView.m: extended class to populate the
5134         entries in the new "monthMenu" and "yearMenu".
5135
5136         * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
5137         method to return the current day as a string formatted depending
5138         on the current locale.
5139
5140         * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate]) 
5141         ([UIxCalAptListView -endDate]): "today" is now the default filter
5142         for displayed events.
5143         ([UIxCalAptListView -currentSerialDay]): new method returning the
5144         date of the current enumerated appointment in serial form
5145         (yyyymmdd).
5146
5147         * UI/WebServerResources/SchedulerUI.js: added code to select the
5148         relevant day when an appointment is selected. Added code to popup
5149         a month and a year menu whenever the header entries are clicked in
5150         the calendar widget.
5151
5152         * UI/WebServerResources/generic.js: made addClassName and
5153         removeClassName methods of HTMLElement.
5154
5155 2006-08-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5156
5157         * UI/WebServerResources/MailerUI.js: fixed the contact creation
5158         from email addresses.
5159
5160         * UI/WebServerResources/generic.js: centralized the search-related
5161         functions here since the same code was used across the 3
5162         applications.
5163
5164         * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate]) 
5165         ([UIxCalAptListView -endDate]): return the required dates needed
5166         depending on the value given to the "filterpopup" url parameter.
5167
5168         * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
5169         code by invoking UIxComponent's labelForKey:.
5170
5171         * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
5172         [self pageResourceManager] instead of [self resourceManager].
5173
5174         * UI/Contacts/UIxContactEditorBase.m: invokes
5175         globallyUniqueObjectId on the clientobject's class instead of the
5176         hardcoded "SOGoFolder".
5177
5178         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
5179         -newAction]): redirect the "new" action to the personal (default)
5180         contact folder.
5181
5182         * SoObjects/SOGo/SOGoObject.m ([SOGoObject
5183         +objectWithName:inContainer:]): new constructor.
5184
5185         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
5186         -lookupContactWithId:recordId]): always create a contact object,
5187         even if it does not exist.
5188
5189 2006-08-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5190
5191         * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
5192         component that lays out the different components of SOGoCalendar.
5193         Only serves as an Objective-C counterpart to its xml template.
5194
5195         * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
5196         from its .m file.
5197
5198         * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
5199         display a widget to handle the information displayed in the
5200         appointments list. Not currently used, lacks implementation.
5201
5202         * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
5203         display a calendar as a dynamic widget from where one can select
5204         the current visible day.
5205
5206         * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
5207         extracted from UIxCalInlineMonthOverview.m.
5208
5209         * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
5210         calendarPageURL methods. The javascript code is handled by .js
5211         files as much as possible...
5212
5213         * UI/WebServerResources/ContactsUI.js,
5214         UI/WebServerResources/MailerUI.js: adapted to the code refactoring
5215         in generic.js.
5216
5217         * UI/WebServerResources/SchedulerUI.js: implemented functions to
5218         handle the new widgets. XmlHTTPRequest code taken from
5219         MailerUI.js.
5220
5221         * UI/WebServerResources/generic.js: put some functions related to
5222         element selections as methods to HTMLElement and HTMLTableElement.
5223
5224         * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
5225         display the list of appointments (embodies the code-size of
5226         UIxCalAptListView; answers to the "aptlist" method).
5227
5228 2006-08-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5229
5230         * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
5231         -correctURLAction]): new short action method replacing the method
5232         below by taking far less code.
5233
5234         * SoObjects/Appointments/SOGoAppointmentFolder.m
5235         ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
5236         with an action in the view-related code.
5237
5238         * UI/Scheduler/UIxAppointmentEditor.m: invoke
5239         "stringByEscapingHTMLString" on the resulting value to avoid
5240         issues with accented characters.
5241         ([-jsCode]): removed method since the javascript code was merged
5242         into SchedulerUI.js.
5243
5244 2006-08-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5245
5246         * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
5247         new class method that returns an iCalPerson based on the UID given
5248         as param.
5249
5250         * UI/Contacts/UIxContactsListViewContainerBase.m: 
5251         UIxContactsListViewContainer renamed to serve as a base class for
5252         the contact lists in both the contact editor and the contact
5253         selectors.
5254
5255         * SoObjects/Contacts/SOGoContactLDAPFolder.m
5256         ([SOGoContactLDAPFolder
5257         -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
5258         setUserIdentifier:setRootDN:]): an LDAP field specifying the
5259         loginname of the users can now be specified.
5260
5261         * UI/WebServerResources/generic.js: added code to manage contact
5262         lists through the new implementation of the UIxContactSelector.
5263
5264         * UI/Templates: put the templates related to SchedulerUI in its
5265         own directory.
5266
5267         * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
5268         -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
5269         entry for "uid" with the field name representing the login name of
5270         the user in the corresponding LDAP branch.
5271
5272 2006-08-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5273
5274         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
5275         -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
5276         request is a PUT, always create an entry, even if we're not sure
5277         it does exist.
5278
5279 2006-08-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5280
5281         * UI/WebServerResources/ContactsUI.js: implemented live-search.
5282
5283         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
5284         -appendSystemSourcesInContext:context]): populated method with
5285         code that creates entries mapped to instances SOGoContactFolder,
5286         based on the configuration found in the NSUserDefaults under the
5287         key "SOGoLDAPAddressBooks".
5288         ([SOGoContactFolders
5289         -lookupName:nameinContext:contextacquire:acquire]):
5290         "contactsources" do not exist anymore, SOGoContactFolder was split
5291         into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
5292         and one protocol: SOGOContactFolder, instead.
5293         ([SOGoContactFolders -contactFolders]): new accessor used by the
5294         views of SOGoContactXXXFolder to list the possible sources.
5295
5296         * SoObjects/Contacts/SOGoContactObject.h: new protocol that
5297         defines the methods that UIxContactsView, ..Editor and so on...
5298         can expect.
5299
5300         * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
5301         defines the methods that UIxContactsListViewBase expects as well
5302         as the data fields returned in the contact lists.
5303
5304         * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
5305         returns entries an LDAP server. Conforms to the new
5306         SOGOContactFolder protocol.
5307
5308         * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
5309         returns a vCard based on contact entries from an LDAP server.
5310         Conforms to the new SOGOContactObject protocol.
5311
5312         * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
5313         ([NGVCardSimpleValue -vCardEntryString]): generates the correct
5314         entry for the textual representation of the vCard.
5315
5316         * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
5317         extension.
5318
5319         * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
5320         "SOGoContactObject".
5321
5322         * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
5323         method that generates a textual representation of the vcard.
5324
5325         * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
5326
5327         * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
5328         "SOGoContactFolder".
5329
5330         * SoObjects/Contacts/SOGoContactSource.h,
5331         SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
5332         protocols.
5333
5334         * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
5335         -singleAttributeWithName:key]): new method that returns the first
5336         object associated with an ldap key (where generally one value is
5337         returned by key).
5338         ([NGLdapEntry
5339         -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
5340         map the entry into an NSDictionary for processing by
5341         UIxContactsListViewBase.m with the least possible overhead.
5342
5343         * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
5344         extension.
5345
5346 2006-08-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5347
5348         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5349         -privateContacts:inContext:]): now returns an instance of
5350         SOGoContactFolders.
5351
5352         * UI/Contacts/UIxContactsListViewContainer.m
5353         ([UIxContactsListViewContainer -contactFolderName]): new method to
5354         return the absolute path to the current contact folder, called
5355         from within the template.
5356
5357         * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
5358         JS code to initialize the 'currentContactFolder' generic var.
5359
5360         * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
5361         +contactFolderWithSource:inContainer:andName:]): new class
5362         method meant to return an instance connected to the specified
5363         source. Currently useless but won't be anymore in the next few
5364         days.
5365
5366         * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
5367         the "lookupFreeBusyObject" method since it does not exist.
5368
5369         * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
5370         as a "view" for the SOGoContactFolders object. Does nothing but
5371         redirect the browser to the URL of the personal address book of
5372         the user. It does not even have a template.
5373
5374         * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
5375         implementing the SOGoContactSource protocol. Does nothing
5376         currently but will be used to implement access to the personal
5377         address book of the user stored in the SOGo database.
5378
5379         * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
5380         protocol defining an API common to all possible types of contact
5381         sources.
5382
5383         * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
5384         serving as the root of the contact folders available to the
5385         current user. Correctly lists the contact sources in webdav.
5386
5387 2006-08-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5388
5389         * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
5390         -composeAction]): new action method that permits external object
5391         to write a message from the default (primary) account.
5392
5393         * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5394         -initSnapshot]): new method with code taken from "defaultAction"
5395         but needed for others.
5396         ([UIxContactEditorBase -writeAction]): new action designed to
5397         compose the correct URL needed to obtain the MailerUI's email
5398         editor with the correct "mailto" parameter.
5399
5400         * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
5401         Common so that other modules can use it.
5402
5403         * UI/Contacts/UIxContactsListViewContainer.m: container to make it
5404         easier to manage both ajax and non-ajax requests.
5405
5406         * UI/Contacts/UIxContactsFilterPanel.m: clone of
5407         UIxMailFilterPanel, but applicable to contact lists.
5408
5409         * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
5410         -vcardContentFromSOGoContactRecord]): use the new standard methods
5411         created for each type of entry. If a line is determined to not
5412         contain information, it will be skipped.
5413
5414         * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
5415         +initialize]): init defaultMailDomain with the user default
5416         "SOGoDefaultMailDomain".
5417
5418 2006-08-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5419
5420         * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5421         -saveAction]): reorganized methods to only have ONE return point.
5422         Invoke saveRecord: directly on the clientObject instead of
5423         saveContentString, which does the same thing anyway.
5424
5425         * SoObjects/Contacts/NSDictionary+Contact.m
5426         ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
5427         method to convert the dictionary returned with the user submission
5428         to a record in VCARD format to be stored in the database.
5429
5430 2006-08-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5431
5432         * UI/WebServerResources/MailerUI.js: when opening the context menu
5433         of the message list, select the message below the mouse cursor and
5434         deselect the other selected messages temporarily. This mimics the
5435         behaviour of Thunderbird for that matter and was already
5436         implemented for the entries of the folder tree.
5437
5438         * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
5439         -iconForMenuItem]): new method that returns the fully qualified
5440         relative URL to the icon representing the mailbox, or the default
5441         mailbox icon if needed.
5442
5443         * UI/SOGoUI/UIxComponent.m ([UIxComponent
5444         -urlForResourceFilename:filename]): automatically return an empty
5445         string whenever the filename passed as argument is nil.
5446
5447         * UI/WebServerResources/MailerUI.js: open the mailboxes with the
5448         "desc" parameter set to 1 so that they are sorted in descending
5449         order by default. Also, added "onHeaderClick()", triggered by
5450         clicking on the message list header elements.
5451
5452         * UI/MailerUI/UIxMailSortableTableHeader.m
5453         ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
5454
5455         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5456         -isSortedDescending]): defaults to "YES" when the sort order is
5457         not specified.
5458
5459 2006-07-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5460
5461         * UI/WebServerResources/MailerUI.js:
5462         - message cache: set the max num of cached messages to 20. Limit
5463         the cached message size to 30000 bytes.
5464         - ajax: when a message request is called while one is already
5465         being performed, the latter will be cancelled. Idem when
5466         retrieving the content of a mailbox.
5467         - folder tree: when a mailbox is selected because of the URL
5468         requested (initMailboxSelection), the dtree is expanded throughout
5469         the mailbox entry's parent hierarchy to ensure it is made visible
5470         when the page is being displayed. (new function: expandUpperTree).
5471         - mailbox loading: when loading a mailbox where a message was
5472         previously selected, we invoke its url with the "pageforuid"
5473         parameter correctly specified. During callback processing, we scan
5474         the table for the related row and reselect it.
5475         Also, the message area is set blank before loading any mailbox.
5476
5477         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5478         -defaultAction]): if the "pageforuid" parameter is passed in the
5479         url, take its value and invoke [self firstMessageOfPageFor:]
5480         consequently to deduce the first message to display. Otherwise,
5481         set it to "idx", otherwise set it to 0.
5482         ([UIxMailListView -firstMessageOfPageFor:]): new method
5483         that determines the first message of the page where the message
5484         passed as parameter is contained.
5485
5486         * UI/WebServerResources/UIxMailListView.js: removed this module,
5487         its code was put in MailerUI.js instead.
5488
5489 2006-07-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5490
5491         * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
5492         which returns the nodes for the parent specified in "parentMenu".
5493         Used to generate the javascript code for the folder dtree.
5494
5495         * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
5496         using that container-template are now using UIxMailMainFrame
5497         since UIxMailPanelFrame had no real interest. File removed.
5498
5499         * UI/WebServerResources/dtree.{css,js}: new files to handle
5500         javascript-generated mailbox tree. Modified from original version
5501         by integrating the previous code with the one we are using for
5502         selections and mailbox handling. Minor visual enhancements too...
5503
5504 2006-07-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5505
5506         * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
5507         returned, put it in an NSArray before returning it (fixes
5508         bug#217).
5509
5510 2006-07-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5511
5512         * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
5513         that returns a url string stripped from its "http://hostname"
5514         prefix.
5515
5516         * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
5517
5518         * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
5519
5520 2006-07-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5521
5522         * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
5523         -mailDateFormatter]): retrieve the timezone from the user settings
5524         and pass it to the returned dateFormatter. Also, the dateFormatter
5525         is kept in a static variable to avoid useless
5526         creations/destructions.
5527
5528         * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
5529         -setTimeZone:newTimeZone]): new accessor to specify the timezone.
5530
5531         * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:]) 
5532         ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
5533         s/Criteria/Text/ to handle the "criteria" form parameter.
5534
5535 2006-07-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5536
5537         * UI/WebServerResources/uix.css: enhanced the toolbar appearance
5538         to integrate better with the firefox look&feel. Added entries for
5539         the new "menu" DIV class (popup menus).
5540
5541         * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
5542         takes any chunk of text as param, detects the user email and the
5543         optional first and last names and return them in a well-formatted
5544         way. Renamed "getSelection" to "getSelectedNodes" to avoid a
5545         namespace conflict. Added "onMenuClick(node, event, menuId)" to
5546         handle popup menus through "onclick" element attributes (node =
5547         this, event = event and menuId = name of the menu DIV id to
5548         popup).
5549
5550         * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5551         -snapshot]): add an entry for "email" into the snapshot
5552         dictionary if a "contactEmail" URL parameter was detected and if
5553         the entry for "email" is empty.
5554
5555         * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
5556         button now invokes the newContact() js function in ContactsUI.js
5557         instead of opening "new" directly. newContact() pops up a window
5558         stripped from its navigation bar.
5559
5560         * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
5561         bundle (AddressBook).
5562
5563         * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
5564         "menu" and id "addressMenu" have the header email addresses
5565         display it with the new menu code in generic.js.
5566
5567         * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
5568         replaced the body tables with a div of class "pageContent"
5569         (standardization across the page templates).
5570
5571         * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
5572         productJavaScriptURL and pageJavaScriptURL (conditionnally) since
5573         those are now inherited from UIxPageFrame.
5574
5575         * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
5576
5577         * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
5578         a "mailto" URL parameter is detected and the "to" array is empty,
5579         initialize "to" with the value of "mailto" before returning it.
5580
5581         * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
5582         -composeAction]): rewrote method in a cleaner way and with usage
5583         of the URL extensions to NSString and NSDictionary (see below).
5584         Also, if a "mailto" url parameter is detected, pass it to the
5585         redirected url.
5586
5587         * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
5588         reduce code.
5589
5590         * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
5591         returns a parameter string to add to a base URL.
5592
5593         * UI/Common/NSString+URL.m ([NSString
5594         -composeURLWithAction:parameters:andHash:useHash]): new method to
5595         compose a complete URL from an object URL with parameters and an
5596         optional '#' character.
5597
5598         * UI/Common/UIxPageFrame.h: separated interface from
5599         UIxPageFrame.m.
5600
5601 2006-07-07  Wsourdeau Sourdeau  <wsourdeau@inverse.ca>
5602
5603         * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
5604
5605         * UI/WebServerResources/generic.js: added code to manage
5606         selections within HTML containers.
5607
5608         * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
5609         added method to determine the possible URL for a product-specific
5610         javascript filename of the forme <productname>.js.
5611         ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
5612         ([UIxPageFrame -isPopup]): new method to determine whether the
5613         application navigator bar should be displayed (main page) or not
5614         (popup page).
5615
5616         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
5617         -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
5618         the user through LDAP.
5619
5620 2006-07-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5621
5622         * The toolbar code from the MailerUI product was taken, renamed as
5623         "UIxToolBar" and put into UI/Common. Toolbar plists were created
5624         for the Contacts and Scheduler products and put in their respectir
5625         Toolbars/ subdirectories. Finally,
5626         UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
5627         UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
5628         and an invocation to the UIxToolbar component was put at the top
5629         of UI/Templaces/UIxPageFrame.wox.
5630
5631         * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
5632         within the templates whether a separator should be displayed.
5633
5634         * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
5635         that returns NO if the toolbar is empty.
5636
5637 2006-07-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5638
5639         * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
5640
5641         * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
5642         new toolbar objects.
5643
5644         * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
5645
5646         * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
5647         linkbanner as a DIV instead of a TABLE.
5648
5649         * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
5650         showLinkBanner]:
5651         returns 'YES' to request the display of the navigation bar between
5652         applets.
5653
5654 2006-06-15      ludovic@inverse.ca
5655
5656         * It's now possible to set the default
5657           domain using for email using the
5658           SOGoDefaultMailDomain preference key.
5659
5660 2006-06-15      ludovic@inverse.ca
5661         
5662         * Initial import of SOGo from trunk.