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