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