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