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