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