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