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