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