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