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