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