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