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