]> err.no Git - scalable-opengroupware.org/blob - ChangeLog
0a756afff6774db9c8e14faa6ae8ee7f4786f2d5
[scalable-opengroupware.org] / ChangeLog
1 2007-08-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2
3         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
4         -bodyStructure]): fetch the "bodystructure" key instead of "body".
5
6 2007-08-02  Francis Lachapelle  <flachapelle@inverse.ca>
7
8         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
9         has to return only one element.
10
11 2007-08-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12
13         * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
14         -content]): new method returning the decoded content of the
15         corresponding attachment as an NSData instance.
16         ([UIxMailPartViewer -filename]): if the "filename" parameter of
17         the metadata parameterList is empty, try to find out the filename
18         from the "disposition" metadata returned with the BODYSTRUCTURE
19         imap4 tag.
20
21         * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
22         -composeAction]): prefix the INBOX folder with "folder".
23
24         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
25         -relativeImap4Name]): return nameInContainer stripped from its
26         first 6 characters since all folder names are prefixed with
27         "folder".
28
29         * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
30         -imap4URLString]): invoke -relativeImap4Name instead of
31         "nameInContainer" since the former will return the fixed IMAP4
32         foldername and the latter the SoObject name.
33
34         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
35         +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
36
37         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
38         ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
39         ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
40         ([SOGoMailAccount -sentFolderNameInContext:])
41         ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
42         names with "folder".
43         ([SOGoMailAccount -inboxFolderInContext:_ctx])
44         ([SOGoMailAccount -sentFolderInContext:_ctx])
45         ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
46         the folder names with "folder" since they are prefixed earlier.
47
48 2007-07-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
49
50         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
51         ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
52         all starts with "folder".
53
54         * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
55         longer declare security info from here.
56
57         * SoObjects/Mailer/SOGoMailFolder.m
58         ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
59         ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
60         folder names now always start with "folder".
61
62         * SoObjects/Mailer/SOGoMailAccount.m
63         ([-lookupName:inContext:acquire:]): folder names now always start
64         with "folder".
65
66 2007-07-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
67
68         * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
69         -forwardAction]): adapted to the new saveAttachment:withMetadata:
70         method (see below).
71
72         * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
73         code to save the attached filenames with the filename returned by
74         the web server as well as their mime types.
75
76         * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
77         ([UIxMailPartMessageViewer -toAddresses])
78         ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
79         the corresponding fields separated with a ", " (if needed).
80
81         * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
82         -saveAttachment:_attachwithMetadata:metadata]): new method
83         replacing -saveAttachment:withName: and which takes a dictionary
84         as parameter with the filename and the mime type of the
85         attachment.
86         The mimetype is then saved in a hidden text file.
87         ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
88         take the mime type from the hidden text file related to the
89         attachment.
90
91         * SoObjects/Contacts/SOGoContactGCSFolder.m ()
92         ([SOGoContactGCSFolder
93         -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
94         return records if the db records are > 0 and not just > 1...
95
96 2007-07-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
97
98         * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
99         method.
100         ([UIxContactsListView -defaultSortKey]): changed to "displayName".
101
102         * SoObjects/Contacts/SOGoContactLDAPFolder.m
103         ([SOGoContactLDAPFolder
104         -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
105         translate the returned records to a normalized form.
106
107         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
108         -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
109         translate the returned records to a normalized form.
110
111         * UI/Scheduler/UIxCalListingActions.m,
112         UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
113         SoObjects/SOGo/AgenorUserDefaults.m,
114         SoObjects/Contacts/SOGoContactGCSFolder.m,
115         SoObjects/Appointments/SOGoAppointmentFolder.m,
116         OGoContentStore/OCSiCalFieldExtractor.m,
117         OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
118         table fields with "c_".
119
120 2007-07-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
121
122         * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
123         the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
124         the application settings. If set, both limit will influence the
125         maximum size of the resultsets and the time taken to solve them.
126         ([LDAPSource -_initLDAPConnection]): initialize the limits.
127
128 2007-07-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
129
130         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
131         method that declares the DAV namespace related to CardDAV.
132         ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
133         method that declares the "access-control" and "addressbook-access"
134         classes to the list.
135
136         * SoObjects/Appointments/SOGoAppointmentFolder.m
137         ([-lookupActionForCalDAVMethod:]): removed method.
138         ([SOGoAppointmentFolder -davNamespaces]): added new overriden
139         method that declares the DAV namespace related to CalDAV.
140
141         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
142         optional method for subclasses which handle specific extensions to
143         the DAV protocol: CardDAV or CalDAV.
144         ([SOGoFolder
145         -lookupName:lookupNameinContext:localContextacquire:acquire]):
146         new overriden method that handles dav invocations for extensions
147         to DAV by returning an appropriate SoSelectorInvocation.
148
149         * SoObjects/SOGo/NSString+Utilities.m ([NSString
150         -asDavInvocation]): new method returning a dictionary with a "ns"
151         key representing the dav namespace and a "method" key representing
152         the dav method name of the request.
153
154         * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
155         +initialize]): scan the value of SOGoUIxUserCanChangePassword.
156         Default is "no".
157         ([UIxPreferences -shouldDisplayPasswordChange]): new template
158         method that returns the value of SOGoUIxUserCanChangePassword.
159
160         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
161         scan the value of SOGoUIxDefaultModule. If not set, the default
162         module defaults to "Calendar".
163         ([SOGoUserHomePage -defaultAction]): redirect the user to the
164         value of "SOGoUIxDefaultModule".
165
166 2007-07-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
167
168         * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
169         -contactInfos]): cache the results to avoid multiple invocations.
170
171         * SoObjects/Contacts/SOGoContactLDAPFolder.m
172         ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
173         really should return something or if we fake to return nil...
174
175 2007-07-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
176
177         * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
178         acceptAnyUser to YES only when the SOGoAuthentificationMethod user
179         default is set to "bypass".
180
181         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
182         -checkLogin:_loginpassword:_pwd]): accepts unverified connections
183         when authMethod is set to "bypass" from now on. This would avoid a
184         security concern with a default installation of SOGo.
185         AuthentificationMethod is now prefixed with "SOGo" for better
186         clarity.
187
188 2007-07-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
189
190         * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
191         -quotasAction]): new method that returns a json representation of
192         the mailbox quotas.
193
194 2007-07-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
195
196         * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
197         -imap4URL]): rewrote method to support accented mailbox names.
198         ([SOGoMailBaseObject imap4Password]): rewrote to simply use
199         SOGoAuthenticator's passwordInContext:.
200
201         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
202         -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
203         start and due dates to nil if hasStartDate and hasDueDate are
204         false.
205
206         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
207         -passwordInContext:context]): made method public.
208
209         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
210         -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
211         to false to avoid a null violation.
212
213 2007-07-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
214
215         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
216         -contentAsString]): returns the message encoded in ISO Latin 1
217         again.
218
219         * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
220         SOGoSuperUsername user defaults.
221         ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
222         method.
223         ([SOGoUser -rolesForObject:objectinContext:context]): if the
224         current user is the superuser, grant him/her the "owner" role.
225
226         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
227         the folder only if the current user is the owner of the future
228         folder.
229
230         * SoObjects/Appointments/SOGoCalendarComponent.m
231         ([SOGoCalendarComponent -contentAsString]): we return the content
232         based on the permissions returned by the security manager instead
233         of by looking at the user roles.
234
235         * SoObjects/Appointments/SOGoAppointmentFolder.m
236         ([SOGoAppointmentFolder -calendarFolders]): read the calendar
237         folders of the user to whom this folder belongs instead of the
238         active user. This way, a delegate user will be able to have the
239         same view that the original user has if he connects from his user
240         directory.
241
242         * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
243         user exists before creating the SOGoUserFolder instance. If not,
244         returns nil.
245
246         * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
247         return the message source code in plain text.
248
249         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
250         -contentAsString]): returns the message encoded in UTF8.
251
252 2007-07-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
253
254         * OGoContentStore/iCalRepeatableEntityObject+OCS.m
255         ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
256         leading tagname into account when serializing the element values.
257
258         * Main/SOGoProductLoader.m: only load bundle directories ending
259         with the "SOGo" extension.
260
261         * Main/SOGo.m ([SOGo
262         -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
263         result set if the query has caused no exception. Otherwise we get
264         an "evaluation is in progress exception".
265
266 2007-06-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
267
268         * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
269         -generateSQLForInsert]): initialize error to nil before the
270         serialization. Otherwise the method can get confused if it ever is
271         initialized to something else.
272
273         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
274         -folderIsMandatory]): returns NO unconditionnally.
275
276         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
277         -appendPersonalSources]): add the "personal" folder to the list of
278         user folders even if it doesn't exist, so that it is created when
279         the user accesses it.
280
281         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
282         -folderIsMandatory]): returns YES if nameInContainer is set to
283         "personal", which is the default address book.
284
285         * SoObjects/Appointments/SOGoAppointmentFolder.m
286         ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
287         users must have one Calendar folder (one and only one).
288         ([SOGoAppointmentFolder -_privacySqlString]): unescape the
289         escaping '\' so make the carriage return a real one. This way,
290         PgSQL 8 won't complain about escaping the string.
291
292         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
293         method that create the folder if considered mandatory.
294         ([SOGoFolder -folderIsMandatory]): new method that determines
295         whether the folder should be created automatically or not. To be
296         overriden by subclasses.
297
298         * Main/SOGo.m ([SOGo -run]): override method and create the
299         missing system tables if needed.
300
301 2007-06-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
302
303         * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
304         -mailDateFormatter]): returns the user's date formatter.
305
306         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
307         applies the user timezone to the date object before returning it.
308
309         * UI/Common/UIxSortButton.m: removed useless class module.
310
311         * UI/Common/UIxSortableTableHeader.m: removed useless class
312         module.
313
314         * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
315         -contactInfos]): use the "asc" url parameter instead of "desc" to
316         determine the ordering.
317         ([-sortOrdering]): removed method.
318         ([UIxContactsListView -init]): removed the "searchText" ivar.
319         (general): the template no longer use the UIxSortableTableHeader
320         components.
321
322         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
323         -defaultSortKey]): default sort following the messages arrival
324         instead of their date.
325         ([-isSortedDescending]): removed method.
326         ([-imap4SortOrdering]): use the "asc" url parameter instead of
327         "desc" to determine the ordering.
328         (general): the template no longer use the UIxSortableTableHeader
329         components.
330
331 2007-06-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
332
333         * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
334         removed method.
335         ([-setQualifier:_msg], [-qualifier]): removed methods.
336         ([UIxMailListView -defaultAction]): added code to handle the
337         search criteria and value passed as url parameters. Also, we now
338         handle the same search criterias as Thunderbird/Icedove.
339
340 2007-06-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
341
342         * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
343         -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
344         the string instead of the string itself.
345         ([UIxJSONPreferences -jsonSettingsAction]): same as above.
346
347         * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
348         bool var "acceptAnyUser" that is set when the AuthenticationMethod
349         user default is nil.
350         ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
351         unconditionnally returns an instance whenever acceptAnyUser is set.
352
353 2007-06-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
354
355         * Main/sogod.m (main): prevent SOGo from running as root.
356
357 2007-06-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
358
359         * SoObjects/SOGo/SOGoUser.m ([SOGoUser
360         -setCurrentPassword:newPassword]): new stub method.
361         ([SOGoUser -dateFormatterInContext:context]): new method that
362         returns an instance of SOGoDateFormatter configured based on the
363         user defaults.
364
365         * UI/Common/UIxPageFrame.m ([UIxPageFrame
366         -relativePreferencesPath]): new method.
367
368         * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
369         removed useless method.
370
371         * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
372         different configurable formats (long and short date + time).
373
374         * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
375
376         * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
377         -isInternetRequest]): removed method.
378
379         * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
380         -jsonRepresentation]): new method with an explicit name.
381
382         * UI/PreferencesUI/product.plist: new bundle that provides a web
383         ui for handling user defaults.
384
385         * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
386
387         * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
388
389         * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
390
391 2007-06-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
392
393         * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
394
395 2007-06-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
396
397         * UI/Scheduler/NSArray+Scheduler.m ([NSArray
398         -compareEventsAscending:otherEvent]): no longer use compare: on
399         the time objects since one of them could be an NSNull, which
400         crashes when comparing with anything.
401
402         * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
403         -eventsListAction]): sort events from here.
404         ([UIxCalListingActions -tasksListAction]): sort tasks from here.
405
406         * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
407         module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
408
409         * SoObjects/Appointments/SOGoAppointmentFolder.m
410         ([SOGoAppointmentFolder
411         -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
412         no longer sort elements from here.
413
414 2007-06-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
415
416         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
417         -aclsForUser:uid]): implemented method by forwarding the request
418         to the container. This fixes a bug where users could no longer
419         read emails from shared folders.
420
421         * SoObjects/Appointments/SOGoCalendarComponent.m
422         ([SOGoCalendarComponent -init]): "isNew" is no longer defined
423         here, but rather in its parent class.
424
425         * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
426         -stringForSecondsSinceThe70s:seconds]): new utility method.
427
428         * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
429         -eventsListAction]): no longer reduce the end day of one day for
430         all day events since everything has been fixed in
431         OCSiCalFieldExtractor.
432
433         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
434         -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
435         the end date of all day events of 1 so that they stay on their
436         real last day.
437
438 2007-06-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
439
440         * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
441
442         * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
443         removed method.
444         ([-fetchCoreTasksInfos]): removed method.
445
446         * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
447         -init]): initialize an instance of SOGoDateFormatter.
448         ([UIxCalListingActions -eventsListAction]): the display start and
449         end dates are added to the listing for each event.
450
451         * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
452
453         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
454         -isAllDay]): returns YES if the "hm" url parameter is set to
455         "allday".
456         ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
457         is displayed one day earlier.
458
459 2007-06-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
460
461         * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
462         -_setupContext]): take the range of dates specified by the popup
463         into account.
464
465         * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
466         WODirectAction that returns WOResponse objects with the events or
467         todos satisfying the parameters passed in the url.
468
469         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
470         -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
471         "isAllDay" into account and compute the amount of days to pass to
472         the iCalEvent.
473
474 2007-06-06  Francis Lachapelle <flachapelle@inverse.ca>
475
476         * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
477         * SoObjects/SOGo/NSNull+Utilities.m: initial import.
478         * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]): 
479         new method that returns a json-formatted array of the visible tasks
480         for the current user.
481
482 2007-06-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
483
484         * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
485         object must be present in the list of UIDs we delete the object
486         from. Otherwise Calendar objects having no organizer and no
487         attendees will remain in their owner's Calendar.
488
489         * SoObjects/SOGo/SOGoObject.m ([SOGoObject
490         -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
491         first 3 elements of the path array if the url returned by
492         baseURLInContext: returns a hostname.
493
494         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
495         -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
496         nil, in which case a crash happens when calling hasPrefix:.
497         ([SOGoMailFolder -_sharesACLs]): same as above.
498         ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
499         otherUsersFolderName is nil, we return nil.
500         ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
501         nil from [self otherUsersPathToFolder], we return nil too.
502
503 2007-06-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
504
505         * SoObjects/SOGo/SOGoObject.m ([SOGoObject
506         -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
507         the result of [self baseURLInContext:] to avoid a double escaping
508         in the resulting string.
509
510         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
511         the user has the "ObjectReader" role on the parent container, then
512         he is granted the "ObjectViewer" role on this object. Same for
513         "ObjectEraser", although this might change later.
514
515         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
516         -toolbar]): determine the toolbar filename based on the
517         permissions declared by the securitymanager. The role mechanism
518         has been adjusted on a lowerlevel so we can simplify the code.
519
520         * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
521         -initWithName:newNameinContainer:newContainer]): read the content
522         directly from here. That way we can determine whether the object
523         is being created.
524         ([SOGoContentObject -aclsForUser:uid]): if the object is new and
525         the ObjectCreator role is enabled, we also grant the ObjectEditor
526         role to the current user.
527
528         * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
529         changed the method paradigm to only return HTTP code 204. Not test
530         is done whatsoever since the security manager does it for us.
531
532         * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
533         removed method because the same exists in UIxFolderActions.m
534
535         * UI/Contacts/UIxContactsUserRightsEditor.m
536         ([UIxContactsUserRightsEditor
537         -setUserCanReadObjects:userCanReadObjects]): new method.
538
539         * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
540         "FolderEraser" and special permission "Access Object". Removed
541         role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
542         can be used instead. Removed "FolderReader" since it is useless.
543
544         * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
545         -vCard]): directly use the "content" ivar since it is initialized
546         during object creation.
547
548         * SoObjects/Contacts/SOGoContactLDAPFolder.m
549         ([SOGoContactLDAPFolder -init]): no longer handle the
550         nameInContainer no the container ivars. They were removed because
551         this class is a descendant of SOGoObject which already has them.
552         ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
553         returning "displayName".
554         ([SOGoContactLDAPFolder -isFolderish]): new overriden method
555         returning "YES".
556
557         * SoObjects/Appointments/SOGoCalendarComponent.m
558         ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
559         ([SOGoCalendarComponent -findParticipant:user]): new name for
560         method "participant:".
561         ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
562         findparticipant but taking a uid string as parameter.
563         ([SOGoCalendarComponent -contentAsString]): don't regenerate the
564         iCalendar automatically. Instead, this is done only when the user
565         is a "date and time viewer".
566         ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
567         (modifier and responder) into account by compiling them with the
568         owner's roles.
569
570         * SoObjects/Contacts/SOGoContactFolder.h: removed
571         "nameInContainer" from the list of required methods.
572
573         * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
574         -davContentType]): returns "text/calendar".
575
576         * SoObjects/Contacts/SOGoContactLDAPFolder.m
577         ([SOGoContactLDAPFolder -davResourceType]): declare the correct
578         groupdav resource-type.
579
580         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
581         -davContentType]): same as below.
582
583         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
584         -initWithName:newNameinContainer:newContainer]): new overriden
585         method setting the custom owner directly.
586
587         * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
588         -davContentType]): same as below.
589
590         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
591         -davContentType]): same as below.
592
593         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
594         declare "httpd/unix-directory".
595
596         * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
597         "UTC" as fallback timezone instead of "Canada/Eastern".
598         ([-hasEmail:email]): make use of the new NSArray's
599         containsCaseInsensitiveString: method.
600
601         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
602         -davContentType]): declare "message/rfc822" as content type.
603
604         * SoObjects/Appointments/SOGoAppointmentFolder.m
605         ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
606         ivar in SOGoObject.
607         ([SOGoAppointmentFolder
608         -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
609         ([-fetchContentObjectNames]): commented out method since it was
610         usefull only for testing Funambol.
611
612         * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
613         -containsCaseInsensitiveString:match]): an enhanced version of
614         containsObject:.
615
616         * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
617         useless method.
618         ([-showMarkDeletedButton]): removed useless method.
619         ([-showTrashButton]): removed useless method.
620
621         * SoObjects/Appointments/iCalEntityObject+SOGo.m
622         ([iCalEntityObject -userIsParticipant:user]): new proxy method
623         that invoked isParticipant on self for each possible email
624         addresses of the user passed as parameter.
625         ([iCalEntityObject -userIsOrganizer:user]): same as above.
626
627         * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
628         extension module.
629
630         * SoObjects/Appointments/SOGoAppointmentObject.m
631         ([SOGoAppointmentObject
632         -saveContentString:contentStringbaseVersion:baseVersion]): remove
633         method since an event may not have an organizer.
634
635         * SoObjects/SOGo/SOGoObject.m ([SOGoObject
636         -GETAction:localContext]): clarified method. Added support for
637         content-type (thanks to Helge Hess).
638         ([SOGoObject -initWithName:_nameinContainer:_container]):
639         initialize and retain the owner.
640         ([SOGoObject -davContentType]): returns "text/plain".
641
642 2007-05-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
643
644         * UI/Common/UIxObjectActions.m ([UIxObjectActions
645         -addUserInAclsAction]): send an acl addition mail.
646         ([UIxObjectActions -removeUserFromAclsAction]): send an acl
647         removal mail.
648
649         * UI/Common/UIxFolderActions.m ([UIxFolderActions
650         -_realActionWithFolderName:folderDict]): handle the possible
651         presence of the "mail-invitation" url parameter. If present, the
652         user will be redirected to the relevant folder.
653
654         * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
655         ([SOGoUser -language]): new method that returns the user's
656         preferred language, or the system's if none has been set yet.
657
658         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
659         that returns the full dav url to self.
660         ([SOGoObject -soURL]): same as above but for the so url (Web UI).
661         ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
662         returns the full so url to the base of the SOGo module to which
663         self belongs, and for the specified user.
664         ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
665         but for the current user.
666         ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
667         required by the acl advisory templates and which returns a link
668         the target user can click to activate its new subscription.
669         ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
670         but for inclusion of the application/x-sogo-notification part,
671         which will be handled by the Lightning enhancer plugin.
672
673         * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction]) 
674         ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
675         do nothing yet since imap folder subscription is not handled yet.
676
677         * SoObjects/SOGo/SOGoContentObject.m
678         ([-hasSupportForDefaultRoles]): removed method.
679
680         * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
681         -getFullEmailForUID:uid]): new method that returns the username +
682         email pair.
683
684         * SoObjects/Appointments/SOGoCalendarComponent.m
685         ([SOGoCalendarComponent +initialize]): the default language for
686         mail templates is now set to English.
687
688         * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
689         SOGoACLAdvisory implementing the french template for user removal
690         from acls.
691
692         * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
693         SOGoACLAdvisory implementing the french template for user
694         additions to acls.
695
696         * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
697         SOGoACLAdvisory implementing the english template for user removal
698         from acls.
699
700         * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
701         SOGoACLAdvisory implementing the english template for user
702         additions to acls.
703
704         * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
705         supercall of all the acl advistory templates. The model is based
706         on SOGoAptMailNotification except that the template encapsulates
707         the message to be sent. Later, we might create a superclass common
708         to all template-based emails.
709
710         * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
711         -addRange:newRange]): new method that store a string
712         representation of the NSRange passed as parameter.
713         ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
714         any range contained in self intersect with the one passed as parameter.
715
716         * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
717         store ranges in an array to prevent them from intersecting with
718         each other during the passes.
719
720 2007-05-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
721
722         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
723         -primaryFetchMailboxInfo]): useless method. Removed.
724
725 2007-05-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
726
727         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
728         -toManyRelationshipKeys]): invoke [self subfolders].
729         ([SOGoMailFolder -subfolders]): new method containing what used to
730         be in toManyRelationshipKeys.
731         ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
732         urls.
733
734         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
735         -allFolderPaths]): renamed version of "allFolderPathes", sorted by
736         named and at the beginning of which we put the predefined folders.
737
738         * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
739         -emptyTrashAction]): new method inspired by a similar one from
740         UIxMailListView, to which we added the ability to remove
741         subfolders.
742
743         * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
744         method. Replaced with a similar one in UIxMailFolderActions.
745
746         * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
747         -renameFolderAction]): implemented method.
748         ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
749         specified folder. Instead, we put it in the trash folder.
750
751         * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
752         method, replaced with a similar method in the new
753         UIxMailFolderAction class module.
754         ([-deleteFolderAction]): idem.
755
756         * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
757         -createFolderAction]): new method implementing subfolder creation.
758         ([UIxMailFolderActions -renameFolderAction]): new method
759         implementing subfolder renaming (basic implementation to be
760         finalized later).
761         ([UIxMailFolderActions -deleteFolderAction]): new method
762         implementing folder deletion.
763
764         * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
765         web actions related to the handling of imap folder.
766
767 2007-05-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
768
769         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
770         -ownerInContext:localContext]): overriden method because we are an
771         IMAP4 client and we need a bit more intelligence to deduce the
772         owner of the current folder.
773         ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
774         return an NSException so we need to be careful here to avoid a
775         crash.
776         ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
777         NSException so we need to be careful here to avoid a crash.
778
779         * SoObjects/Mailer/SOGoMailAccounts.m
780         ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
781         there is no longer any concept of Intranet or Internet connection
782         handling.
783
784         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
785         -sharedFolderName]): new method.
786         ([SOGoMailAccount -otherUsersFolderName]): new method.
787
788         * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
789         new javascript code and the new UIxMailAccountActions class.
790
791         * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
792         javascript code and the new UIxMailAccountActions class.
793
794         * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
795         new javascript code and the new UIxMailAccountActions class.
796
797         * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
798         -listMailboxesAction]): new method that returns a json-formatted
799         tree of all the mailboxes available to the current user.
800
801         * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
802         web actions related to the handling of mail accounts.
803
804         * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
805         module.
806
807         * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
808         -jsonRepresentation]): new interface method meant to be overriden
809         by the primitive classes.
810
811 2007-05-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
812
813         * UI/MailerUI/UIxMailSplashView.m: removed.
814
815         * SoObjects/Appointments/SOGoCalendarComponent.m
816         ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
817         the uid to the list only when the user email is recognized by the
818         user manager.
819
820 2007-05-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
821
822         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
823         -isDeletionAllowed]): completed method with the new imap acl api.
824
825         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
826         removed method.
827
828         * SoObjects/SOGo/SOGoPermissions.m: added the new role
829         "SOGoMailRole_MessageEraser".
830
831         * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID]) 
832         ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
833         "defaultUserID" method into account.
834
835         * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser]) 
836         ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
837         "defaultUserID" method into account.
838
839         * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
840         methods to support the IMAP acls mentionned in the RFC 4314,
841         removed the ones specific to Cyrus.
842
843         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
844         mandatory method for subclasses. Removed the SOGoDefaultUserID
845         global var.
846
847         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
848         overriden method to return @"<default>".
849
850         * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
851         -defaultUserID]): overriden method to return @"<default>".
852
853         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
854         -aclsForUser:uid]): overriden method.
855         ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
856         ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
857         ([SOGoMailFolder -defaultUserID]): overriden method.
858         ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
859
860 2007-05-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
861
862         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
863         -aclUsersForObjectAtPath:objectPathArray]): new method that being
864         forwarded the calles to aclUsers for the GCS-based subclasses of
865         SOGoObject.
866
867         * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
868         methods that would have been used to support IMAP acls. Replaced
869         them with the new protocol for them that has been implemented in
870         SOGo during the last few weeks.
871
872         * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
873         -hasSupportForDefaultRoles]): override method by returning "YES".
874
875         * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
876         -addObjectUniquely:object]): new method with an explicit name.
877
878         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
879         "acl" to "aclUsers". Now designed to return only the uid of the
880         users involved in an ACL.
881         ([SOGoObject -hasSupportForDefaultRoles]): new method returning
882         "NO" by default. To indicate to the acl editor that we don't want
883         to handle a default user.
884
885         * SoObjects/SOGo/SOGoPermissions.[hm]: added the
886         SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
887         symbols.
888
889         * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
890         provides a view to the IMAP acls.
891
892         * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
893
894         * UI/WebServerResources/MailerUI.js: replaced all invocations of
895         addEventListener to the use of prototype's Event object. Also,
896         configured all menus programmatically following descriptions lists
897         containing their callbacks, or nulls, submenus id or separators.
898
899 2007-05-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
900
901         * UI/Common/UIxObjectActions.m ([UIxObjectActions
902         -addUserInAclsAction]): save the previous roles of the user
903         (unlikely) or the default roles, or None instead of saving the
904         roles that should appear the first time in the role editor when no
905         default has been set...
906
907         * SoObjects/SOGo/SOGoObject.m: defined a new constant
908         "SOGoDefaultUserID".
909
910         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
911         -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
912         ignore the "AuthorizedSubscriber" role and add the "None" role
913         when no other role is found.
914
915         * UI/Common/UIxAclEditor.m: added a button for the new default
916         user roles feature.
917
918         * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
919         -_initRights]): don't take the "None" role into account when
920         initializing the list of current roles.
921
922         * SoObjects/SOGo/SOGoPermissions.m: added a new void role
923         "SOGoRole_None".
924
925 2007-05-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
926
927         * SoObjects/SOGo/NSString+Utilities.m ([NSString
928         -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
929         There is no need to subscract the start from the length if a space
930         is not found since the range has not changed either. Finally, the
931         first character before the url might also be a tab or a cr, so we
932         match it against the "urlAfterEndingChars" custom NSCharacterSet.
933         ([NSString -stringByDetectingURLs]): modified to handle email
934         addresses and add a correct "mailto:" link.
935
936 2007-05-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
937
938         * SoObjects/Appointments/SOGoAppointmentFolder.m
939         ([SOGoAppointmentFolder -fetchContentObjectNames]): override
940         method to return the events in the range of 2 weeks ago up to 4
941         weeks from "now".
942
943         * UI/MailPartViewers/UIxMailPartTextViewer.m
944         ([UIxMailPartTextViewer -flatContentAsString]): use the new
945         "stringByDetectingURLs" method to offer clickable urls.
946
947         * SoObjects/SOGo/NSString+Utilities.m ([NSString
948         -stringByDetectingURLs]): this new method replaces passive URLS
949         with active ones for HTML resolution of the text.
950
951 2007-05-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
952
953         * SoObjects/Mailer/SOGoDraftObject.m ([NSString
954         -asQPSubjectString:encoding]): simplified method.
955         The headers indicates "utf-8" again thank to our fix in
956         sope-mime.
957
958         * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
959         being used.
960
961 2007-05-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
962
963         * UI/Common/UIxObjectActions.m ([UIxObjectActions
964         -removeUserFromAclsAction]): implemented this method which was
965         missing and is required to remove users from ACLs.
966
967         * UI/Common/UIxFolderActions.m ([UIxFolderActions
968         -subscribeAction]): folderDict was not autoreleased, resulting in
969         a leak...
970
971         * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
972         -primaryFetchProfile]): when building with libFoundation, don't
973         use the "propertyList" method from NSString. Rather, we convert
974         the string to an NSData instance and passit as parameter to
975         NSDeserializer. This way, we obtain a mutable dictionary rather
976         than an immutable one.
977
978         * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText]) 
979         ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
980         constant string "contentTypeValue".
981         contentTypeValue is now set back to iso-8859-1 since NGMime
982         converts extracts the data in that encoding.
983
984 2007-05-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
985
986         * SoObjects/SOGo/LDAPSource.m ([LDAPSource
987         -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
988         "bindFields" value is present in the user defaults, use the
989         specified fields to find the dn of the user to bind.
990         ([LDAPSource -allEntryIDs]) 
991         ([LDAPSource -fetchContactsMatching:match]) 
992         ([LDAPSource -lookupContactEntry:entryID]) 
993         ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
994         bind and unbind the connection on each request.
995
996         * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
997
998         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
999         -contactSearchAction]): simplified method to use the facilities
1000         provided by the LDAPUserManager. No longer takes care of the
1001         "ldap-only" url parameter since all requests are handled by the
1002         usermanager now.
1003
1004         * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1005         -primaryFetchProfile]): check that the value returned is not null
1006         before interpreting it.
1007
1008         * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
1009         -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
1010         ([LDAPUserManager -_fillContactMailRecords:contact]): if the
1011         system email is already present, remove it before adding it.
1012
1013         * SoObjects/SOGo/LDAPSource.m ([LDAPSource
1014         -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
1015         loginToCheck is not empty.
1016         ([LDAPSource -fetchContactsMatching:match]): check that match is
1017         not empty.
1018         ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
1019         not empty.
1020         ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
1021         uid is not empty.
1022
1023 2007-05-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1024
1025         * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
1026         for "mail" method.
1027         ([SOGoUser -systemEmail]): returns the email formed from the
1028         username and the default mail domain.
1029         ([SOGoUser -hasEmail:email]): test whether the user has the
1030         specified email, in a case-insensitive way.
1031
1032         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1033         -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
1034         check login information.
1035
1036         * SoObjects/Contacts/SOGoContactLDAPFolder.m
1037         ([SOGoContactLDAPFolder
1038         +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1039         no longer manage LDAP connections. The requests are forwarded to
1040         the relevant LDAPSource instead.
1041
1042         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1043         -appendSystemSources]): pass LDAPSource objects to
1044         SOGoContactLDAPFolder instances.
1045
1046         * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
1047         address of the "from" field before sending the message. Otherwise,
1048         sending the mail won't work.
1049
1050         * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
1051         rewrote this method to request all the available email identities
1052         for the current user. Also, the from field also contains the full
1053         name of the user, not just his/her email address.
1054
1055         * SoObjects/Appointments/SOGoCalendarComponent.m
1056         ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
1057         from the previous module iCalEntityObject+Agenor.
1058         ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
1059         ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
1060         idem.
1061
1062         * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
1063         replacing the SOGoContactLDAPEntry module. It was renamed as such
1064         because it now receives a dictionary instead of an NGLdapEntry.
1065         It thus can now handle data from any source of LDIF data, not
1066         only coming from LDAP.
1067
1068         * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
1069         implementing most of what used to be the AgenorUserManager class.
1070         The difference is that users are cached in the forme of
1071         dictionaries and many sources are used. Also, it can be used to
1072         search LDAP contacts.
1073
1074         * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
1075         the concept of "ldap source", to be used by all the classes
1076         needing access to LDAP-provided information: addressbooks and the
1077         user manager. Most the method thereing are transcriptions of
1078         methods previously found in SOGoContactLDAPFolder. It also contain
1079         utility methods for user matching and authentification.
1080
1081         * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
1082         module, rendered useless by code refactoring.
1083
1084         * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
1085         with the freshly written "LDAPUserManager".
1086
1087 2007-05-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1088
1089         * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
1090         SOGOContactLDIFEntry.
1091
1092         * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
1093         module, obsoleted by code in SOGo/LDAPSource.[hm].
1094
1095 2007-05-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1096
1097         * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
1098         new method with an explicit name.
1099
1100 2007-05-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1101
1102         * SoObjects/Appointments/SOGoCalendarComponent.m
1103         ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
1104         replacing "isOrganizer:orOwner:" by taking only one instance of
1105         SOGoUser as parameter.
1106         ([SOGoCalendarComponent -participant:user]): new method replacing
1107         the previous "isParticipant" boolean method by returning the first
1108         participant matching the user passed as parameter. This method is
1109         used so that both the regular email address and the "system email
1110         address" of the user are matched against the participants emails.
1111
1112         * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
1113         -getSystemEMailForUID:uid]): new method that returns the email
1114         formed with the user's uid and the default mail domain.
1115
1116         * SoObjects/Appointments/SOGoCalendarComponent.m
1117         ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
1118         was previously commented out.
1119
1120         * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
1121         forwared to [AgenorUserManager getSystemEmailForUID:].
1122
1123         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1124         -toolbar]): method replacing the one with the same name in the
1125         task and appointment editor classes. This method makes also use of
1126         the new method "isOrganizerOrOwner:" and "participant:" in
1127         SOGoCalendarComponent.
1128
1129         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1130         -toolbar]): removed method, replaced with a method with the same
1131         name in UIxComponentEditor.
1132
1133         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
1134         method, replaced with a method with the same name in
1135         UIxComponentEditor.
1136
1137         * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1138         -primaryFetchProfile]): the values returned from the database are
1139         converted to a put dictionary first, since the dictionary returned
1140         is actually an immutable one, which can cause a crash afterwards.
1141
1142 2007-04-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1143
1144         * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
1145         and "SOGoRole_ObjectEditor".
1146
1147         * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
1148         -prepareRightsForm]): this method is no longer mandatory.
1149
1150         * UI/Contacts/UIxContactsUserRightsEditor.m
1151         ([UIxContactsUserRightsEditor
1152         -setUserCanCreateObjects:userCanCreateObjects]): new subclass
1153         module to handle acls related to the address books. Partial
1154         implementation.
1155
1156         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1157         -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
1158         newly set roles.
1159         ([SOGoFolder
1160         -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
1161         specified roles from cache.
1162         ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
1163         put resulting roles in cache.
1164
1165         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
1166         initWithName:inContainer:. Instead, directly initialize the ivars
1167         as it is supposed to be to avoid an infinite loop whenever one of
1168         those two methods are overriden.
1169
1170         * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
1171         removed method.
1172
1173         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
1174         -aclsForUser:uid]): override method so that SOGo won't crash when
1175         loading the contact card.
1176
1177 2007-04-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1178
1179         * SoObjects/Appointments/SOGoAppointmentFolder.m
1180         ([SOGoAppointmentFolder -_privacySqlString]): the string for the
1181         "freebusy" special user should only require opaque elements.
1182
1183 2007-04-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1184
1185         * SoObjects/Appointments/SOGoAppointmentFolder.m
1186         ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
1187         our double declaration where the resulting XML would be screwed.
1188         There is only one collection per namespace.
1189
1190         * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
1191         rfc822DateString]): new method that returns a string conform to
1192         rfc 822 and suitable for email headers.
1193
1194         * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
1195         "rfc822DateString" category method on the date we put in the
1196         header.
1197
1198 2007-04-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1199
1200         * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction]) 
1201         ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
1202         which should never be overriden.
1203         ([UIxUserRightsEditor -appendRight:newRight]) 
1204         ([UIxUserRightsEditor -removeRight:right]) 
1205         ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list]) 
1206         ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
1207         methods that can be used by the subclasses.
1208         ([UIxUserRightsEditor -prepareRightsForm]): new method that should
1209         mandatorily be overriden to prepare the elements of the subclassed
1210         form.
1211         ([UIxUserRightsEditor -updateRights]): new method that should
1212         mandatorily be overriden to update the user rights from the
1213         elements of the subclassed form.
1214
1215         * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
1216         check if the uid is already listed before adding it to our array.
1217         This is because the acl table can contain more than one record per
1218         user/object relationship.
1219
1220         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1221         -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
1222         "roles" parameter is now an NSArray instead of a string. Therefore
1223         we loop throughout the array to populate the table. All the
1224         relevant records are removed prior to the addition of the new
1225         rights.
1226
1227         * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1228         -aclsForUser:uid]): new override that returns nil until we add
1229         support for IMAP acls.
1230
1231         * SoObjects/Mailer/SOGoMailAccounts.m
1232         ([SOGoMailAccounts -aclsForUser:uid]): same as below.
1233
1234         * SoObjects/Contacts/SOGoContactLDAPFolder.m
1235         ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
1236
1237         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1238         -aclsForUser:uid]): override this method which will always return
1239         nil.
1240
1241         * SoObjects/SOGo/SOGoPermissions.[hm]: added
1242         [Public,Private,Confidential]
1243         x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
1244         SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
1245         ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
1246
1247         * SoObjects/Appointments/SOGoAppointmentFolder.m
1248         ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
1249         that defines default roles for new elements in the acl.
1250
1251         * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
1252         module and subclass of UIxUserRightsEditor specific to the
1253         handling of user rights on calendar folders.
1254
1255 2007-04-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1256
1257         * SoObjects/Appointments/SOGoAppointmentFolder.m
1258         ([SOGoAppointmentFolder -groupDavResourceType]): return both
1259         "vevent-collection" and "vtodo-collection".
1260
1261         * UI/Common/UIxUserRightsEditor.[hm]: new template class module
1262         that implements the detailed editor of user rights per-object.
1263
1264 2007-04-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1265
1266         * SoObjects/SOGo/SOGoUser.m ([SOGoUser
1267         -rolesForObject:objectinContext:context]): no longer query objects
1268         for "roleForUser:". Instead, all objects should implement
1269         "rolesForUser:".
1270
1271         * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
1272         new method to comply with the new acl "protocol" in SOGoObject.
1273         Uses SOGoFolder's new facilities for ACLS.
1274         ([SOGoContentObject -aclsForUser:uid]): idem.
1275         ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
1276         ([SOGoContentObject -removeAclsForUsers:users]): idem.
1277
1278         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1279         -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
1280         based folders. This method is derived from the code that was in
1281         UIxAclFolder before its removal.
1282         ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
1283         idem.
1284         ([SOGoFolder
1285         -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
1286         ([SOGoFolder
1287         -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
1288         ([SOGoFolder -setRoleForUsers:uidsto:role]) 
1289         ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
1290
1291         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
1292         that requires overriding by subclasses.
1293         ([SOGoObject -aclsForUser:uid]): idem.
1294         ([SOGoObject -defaultAclRoles]): idem.
1295         ([SOGoObject -setRoles:rolesforUser:uid]): idem.
1296         ([SOGoObject -removeAclsForUsers:users]): idem.
1297
1298         * UI/Common/UIxObjectActions.m: new module implementing the web
1299         actions common to SOGoObject and all its subclasses.
1300         ([UIxObjectActions -addUserInAclsAction]): new method that adds a
1301         user with the clientObject defaults user rights to the object's
1302         acl.
1303
1304         * UI/Common/UIxAclEditor.m: modified module so as to simplify it
1305         to the point where it will only list the users (and their name)
1306         associated with an object acl.
1307
1308         * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
1309         methods have been moved into SOGoObject and SOGoFolder during a
1310         refactoring.
1311
1312         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1313         -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
1314         method made useless by the programmatic handling of iCalendar
1315         objects.
1316         ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
1317         ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
1318         ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
1319
1320         * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
1321         drop on all folder nodes, not just on leaves.
1322
1323         * SoObjects/Contacts/SOGoContactLDAPFolder.m
1324         ([SOGoContactLDAPFolder
1325         -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
1326
1327 2007-04-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1328
1329         * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
1330         debugging facilities when the SOGoDebugObjectAllocation user
1331         default is set.
1332
1333 2007-04-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1334
1335         * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
1336         method that SOGo will need with non-gnustep Foundation
1337         implementation.
1338         ([NSString -stringByAppendingPathComponent:component]): new method
1339         that SOGo will need when building with libFoundation. Method
1340         removed later since it is available from
1341         Foundation/NSPathUtilities.h.
1342
1343         * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
1344         from SOGoObject.m.
1345
1346         * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
1347         every subclass to access [WOApplication context] without having to
1348         invoke it more than once.
1349
1350         * SoObjects/Appointments/SOGoCalendarComponent.m
1351         ([SOGoCalendarComponent -changeParticipationStatus:_status]):
1352         moved method from SOGoTaskObject and SOGoAppointmentObject up to
1353         their parent class.
1354
1355         * UI/Scheduler/UIxCalSelectTab.m: removed module.
1356
1357 2007-04-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1358
1359         * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
1360         -vCard]): test the prefix of the card in a case-independent way.
1361
1362         * OGoContentStore/OCSContactFieldExtractor.m
1363         ([OCSContactFieldExtractor
1364         -extractQuickFieldsFromContent:content]): we no longer accept
1365         records in a format other than versit vCard so we can get rid of a
1366         lot of code.
1367
1368 2007-04-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1369
1370         * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1371         -selectorComponentClass]): restored method.
1372
1373 2007-04-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1374
1375         * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
1376         -shouldDisplayCurrentTask]): the current task is not displayed if
1377         it is NOT completed or if the "showCompletedTasks" flag is set.
1378         The logic was inverted in Lightning and is now in SOGo too.
1379
1380 2007-04-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1381
1382         * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
1383         want the "work" url instead of the "home".
1384
1385         * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
1386         -_saveSnapshot]): save url values from snapshot.
1387         ([UIxContactEditor -initSnapshot]): load url values from snapshot.
1388
1389         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1390         -calendarList]): new method replacing "availableCalendars".
1391
1392         * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1393         -calendarFolders]): we now take the list of subscribed calendar
1394         from the container.
1395
1396         * SoObjects/Appointments/SOGoAppointmentFolder.m
1397         ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
1398         method derived from and replacing [UIxCalView calendarFolders].
1399
1400 2007-03-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1401
1402         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1403         -toManyRelationshipKeys]): don't put the predefined folders in the
1404         list if they are returned by the server.
1405
1406         * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
1407         longer store the "flattenedBlocks" in a dictionary since the
1408         object will be deleted anyway and we don't need to put the folders
1409         in cache.
1410
1411         * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1412         ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
1413         attachment path into account when computing the part urls.
1414
1415 2007-03-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1416
1417         * UI/Contacts/UIxContactsListViewContainer.m
1418         ([UIxContactsListViewContainer -additionalFolders]): take the list
1419         of subscribed folders from the new property list used for the user
1420         settings. The value of its key is SubscribedFolders for the
1421         dictionary entry named "Contacts".
1422
1423         * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1424         -canAccessContentAction]): new method to override the one from
1425         UIxFoldersActions by taking into account the fact that, this time,
1426         the clientObject is an ldap folder. Removed many method that used
1427         to be related to the handling of the user selector.
1428
1429         * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
1430         to make sure they can be removed.
1431
1432         * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
1433         populate the calendar entries based on the user settings plist.
1434
1435         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1436         -selectForMailerAction]): restored method.
1437
1438         * UI/Scheduler/UIxCalendarSelector.m: new template module derived
1439         from a simplified version of the old UIxContactEditor (removed).
1440
1441         * UI/Contacts/UIxContactsUserFolders.m: new template module for
1442         selecting users or user folders through an LDAP search of which
1443         the results are displayed as a tree.
1444
1445         * UI/WebServerResources/UIxMailEditor.js: moved previous generic
1446         method "onContactAdd" here since the Mailer is now the only module
1447         to use it when composing emails.
1448
1449         * UI/WebServerResources/generic.js: added code for handling the
1450         new scheme used for describing SOGo folders, common code to handle
1451         folder addition or removal.
1452
1453         * UI/Common/UIxFolderActions.m ([UIxFolderActions
1454         -activateFolderAction]): new method that change the "active"
1455         settings in the folder-related fields in the user settings.
1456         ([UIxFolderActions -deactivateFolderAction]): see above.
1457
1458         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1459         -checkRightsAction]): removed method.
1460
1461         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1462         -updateAdditionalAddressBooksAction]): removed method.
1463
1464         * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
1465         -updateCalendarsAction]): removed method.
1466
1467 2007-03-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1468
1469         * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
1470         -checkRightsAction]): removed method.
1471
1472         * UI/Common/UIxFolderActions.m ([UIxFolderActions
1473         -canAccessContentAction]): new method designed to replace
1474         [UIxCalMainView checkRightsAction] in a more universal way.
1475
1476 2007-03-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1477
1478         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1479         -roleOfUser:uidinContext:context]): take all the subkeys into
1480         account, not only the "personal" folder.
1481
1482         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1483         -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
1484         to the new components.
1485
1486         * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
1487         (see below).
1488
1489         * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
1490         -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
1491         field of the sogo_user_profile table, where the user-customizable
1492         changes will be saved.
1493         ([AgenorUserManager -getUserSettingsForUID:uid]): new method
1494         similar to the one above, using the "settings" field where the
1495         automatic settings will be saved.
1496
1497         * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
1498         module to bind the userdefaults to a property list contained in a
1499         specified field of the sogo_user_profile table.
1500         ([AgenorUserDefaults
1501         -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
1502         added a "fieldName" parameter.
1503
1504         * UI/Common/UIxFolderActions.m: new module implementing web
1505         actions common to all GCS-based folders.
1506
1507 2007-03-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1508
1509         * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
1510         put a carriage return after the day name.
1511
1512         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
1513         -readFreeBusyAction]): restored method.
1514
1515 2007-03-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1516
1517         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
1518         -defaultAction]): remade module to redirect automatically to the
1519         Calendar url.
1520
1521         * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
1522
1523 2007-03-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1524
1525         * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1526         -deleteAction]): new web method to delete personal addressbook
1527         folders.
1528
1529         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1530         -delete]): override method to refuse the deletion of the folder if
1531         its nameInContainer is "personal".
1532
1533         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
1534         that forwards the deletion request to the folder manager.
1535
1536 2007-03-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1537
1538         * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
1539         -zoomList]): new method that returns the list of available zoom factors.
1540
1541         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1542         -changeStatusAction]): rewrote method.
1543
1544         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1545         -_handleAttendeesEdition]): make sure "attendeesNames" has a
1546         length > 0 before computing the attendees. Otherwise there will be
1547         an invalid empty entry.
1548         ([UIxComponentEditor -_handleOrganizer]): new method that adds the
1549         organizer when there are attendees and remove it when the
1550         attendees are removed.
1551
1552 2007-03-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1553
1554         * UI/Scheduler/UIxAttendeesEditor.m): new component.
1555
1556         * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
1557         the task and appointment editors. Now a container component
1558         handling the common elements of tasks and events.
1559
1560         * UI/Scheduler/UIxTaskEditor.m: same as below.
1561
1562         * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
1563         a subclass of UIxComponentEditor but a subcomponent of it.
1564
1565         * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
1566         toolbar can have the special value "none" to indicate there is
1567         none attached to the window.
1568
1569         * SoObjects/Appointments/SOGoCalendarComponent.m
1570         ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
1571         method.
1572         ([SOGoCalendarComponent -isParticipant:email]): new method.
1573         ([SOGoCalendarComponent -calendar:create]): takes one parameter
1574         "create" which is a boolean indicating whether we want to create
1575         the calendar if it does not exist.
1576
1577 2007-03-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1578
1579         * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
1580         of a table, the same way the dayly and weekly views have been for
1581         a few months now.
1582
1583 2007-02-09  Helge Hess  <helge.hess@opengroupware.org>
1584
1585         * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
1586           resourcetype
1587
1588         * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
1589           property to point at the user folder
1590
1591 2007-03-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1592
1593         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1594         -userInContext:]): returns "SOGoUser".
1595
1596         * SoObjects/Appointments/SOGoCalendarComponent.m
1597         ([SOGoCalendarComponent -contentAsString]): overriden method that
1598         takes the privacy into account and discard the relevant fields if
1599         needed by generating a new content string and caching it.
1600         ([SOGoCalendarComponent
1601         -saveContentString:contentStringbaseVersion:baseVersion]): if the
1602         new method above has cached a content string, release it and set
1603         it to nil so that it will have to be regenerated in the case it is
1604         requested further.
1605         ([SOGoCalendarComponent -_filterPrivateComponent:component]):
1606         discard the fields that have to be hidden when the card is
1607         private.
1608
1609         * SoObjects/Appointments/SOGoAppointmentFolder.m
1610         ([SOGoAppointmentFolder
1611         -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
1612         sure the cards are now handled as instances of
1613         SOGoCalendarComponent instead of SOGoContentObject so that their
1614         content string is taking the privacy classifiction into account.
1615         ([SOGoAppointmentFolder -_privacySqlString]): new method that
1616         generates a query to determine what information can be given and
1617         if the card itself has to be shown.
1618
1619         * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
1620         -getICalPersonsFromValue:selectorValue]): removed useless
1621         "isAccessRestricted" method.
1622
1623         * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
1624         -setStyle:_style]): test whether the values of orgmail and
1625         partmails are null before manipulating them, otherwise SOGo sends
1626         a "rangeOfString:" message to an NSNull, which makes it crashes.
1627
1628         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1629         -extractQuickFieldsFromEvent:_event]): we now use the new
1630         "symbolicAccessClass" method from iCalEntity to determine the
1631         value of the "classifiction" field.
1632         ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
1633         as above.
1634
1635 2007-03-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1636
1637         * SoObjects/Appointments/SOGoAppointmentFolder.m
1638         ([SOGoAppointmentFolder
1639         -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
1640         see below, the query is adapted consequently.
1641
1642         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1643         -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
1644         renamed to "classification" and can any integer as value.
1645         ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
1646         idem.
1647
1648 2007-02-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1649
1650         * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1651         ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
1652         don't prepend anything to the class and id named. Instead, we
1653         make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
1654         class.
1655
1656 2007-02-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1657
1658         * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1659         -rolesOfUser:logininContext:context]): if object does not exists
1660         (for example when it's being created), the current user has the
1661         same rights on it than he/she has on its parent container.
1662
1663         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1664         -nameExistsInFolder:objectName]): methods that tests if a c_name
1665         corresponding to the name passed as parameter is present in the db
1666         folder.
1667
1668 2007-02-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1669
1670         * SoObjects/SOGo/SOGoUser.m ([SOGoUser
1671         -rolesForObject:objectinContext:context]): test for
1672         "rolesOfUser:inContext:" in addition to "roleOfUser:...".
1673
1674         * SoObjects/Appointments/SOGoCalendarComponent.m
1675         ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
1676         returns the roles of the user on the container object if the event
1677         is uncreated.
1678
1679 2007-02-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1680
1681         * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
1682         alternativeViewer a multipart/related message is being handled.
1683
1684         * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
1685         from scratch.
1686
1687         * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
1688         text/html component before text/plain.
1689
1690         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1691         -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
1692         fetching of HTML parts.
1693
1694         * SoObjects/Appointments/SOGoCalendarComponent.m
1695         ([SOGoCalendarComponent -componentTag]): new template method that
1696         returns the vcalendar tag of the current object.
1697         ([SOGoCalendarComponent -component]): new method that returns the
1698         first object matching [self componentTag] within the current
1699         calendar object. This method replaces 'firstEventInCalendar:' as
1700         well as "firstTaskInCalendar:".
1701         ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
1702         moved method from SOGoAppointmentObject.m.
1703
1704 2007-02-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1705
1706         * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
1707         module which shows each selected user's calendar in a different
1708         column instead of mixing their events together.
1709
1710         * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
1711         replaced use of [NSString stringByTrimmingWhiteSpaces] with
1712         [NSString stringByTrimmingSpaces].
1713
1714         * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
1715         "cnWithoutQuotes" instead of "cnForDisplay", which no longer
1716         exists.
1717
1718         * UI/Scheduler/UIxCalDayOverview.m,
1719         UI/Scheduler/UIxCalDayChartview.m,
1720         UI/Scheduler/UIxCalDayListview.m,
1721         UI/Scheduler/UIxCalWeekOverview.m,
1722         UI/Scheduler/UIxCalWeekChartview.m,
1723         UI/Scheduler/UIxCalWeekListview.m,
1724         UI/Scheduler/UIxCalInlineMonthOverview.m,
1725         UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
1726
1727 2007-02-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1728
1729         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1730         -appendPersonalSourcesInContext:context]): release connectoin
1731         channel when everything is done.
1732
1733         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1734         -newAbAction]): new action method to crate a new contact folder
1735         from the web UI.
1736
1737         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
1738         that requests the folder manager to create a folder table with the
1739         specified type at the specified path. The type is taken from [self
1740         folderType].
1741
1742         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1743         -folderType]): implemented.
1744
1745         * SoObjects/Appointments/SOGoAppointmentFolder.m
1746         ([SOGoAppointmentFolder -folderType]): implemented.
1747
1748         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1749         -appendPersonalSourcesInContext:context]): we now fetch all
1750         folders with type "Contact" that belong to the current user.
1751         ([SOGoContactFolders -newFolderWithName:name]): new method to
1752         create a new contact folder.
1753
1754         * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
1755         resulting url with [NSString+Utilities hostlessURL] instead of
1756         using NSURL. This is because the url in question sometimes has a
1757         hostname and sometimes not. "hostlessURL" ensure the hostname is
1758         removed anyway.
1759         ([UIxComponent -applicationPath]): same as above.
1760
1761 2007-02-08  Ludovic Marcotte <ludovic@inverse.ca>
1762
1763         * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
1764         folders before doing the one on messages.
1765
1766 2007-02-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1767
1768         * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
1769         makeObjectsPerform:withObject:withObject: for GNUstep
1770         compatibility.
1771         
1772         * OGoContentStore/GNUmakefile, Protocols/common.make,
1773         SoObjects/common.make, UI/common.make: install in
1774         GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
1775
1776 2007-02-07  Ludovic Marcotte <ludovic@inverse.ca>
1777
1778         * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
1779         "Agendas"
1780
1781 2007-02-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1782
1783         * UI/MailerUI/UIxMailTree.m ([UIxMailTree
1784         -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
1785         for the moment.
1786
1787         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1788         -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
1789         password would be accepted anyway as long as its length was > 0.
1790         This can be the case ONLY when LDAP is disabled otherwise we have
1791         a serious security issue...
1792
1793         * SoObjects/Appointments/SOGoAppointmentObject.m
1794         ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
1795         user is not an organizer nor a participant, he is declared as
1796         "Owner" if he owns the calendar the entry where the entry is
1797         contained. Other cases should not be possible.
1798
1799 2007-02-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1800
1801         * UI/Contacts/UIxContactEditor.m: display and handle the new
1802         Freebusy URL entry.
1803
1804         * SoObjects/Contacts/SOGoContactLDAPFolder.m
1805         ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
1806         from the server.
1807
1808         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
1809         -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
1810         entry.
1811
1812 2007-01-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1813
1814         * SoObjects/Appointments/SOGoCalendarComponent.m
1815         ([SOGoCalendarComponent -sendEMailNotifications]): new method that
1816         returns the value of ud "SOGoAppointmentSendEMailNotifications"
1817         (iMIP/iTIP).
1818         ([SOGoCalendarComponent
1819         -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
1820
1821 2007-01-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1822
1823         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1824         -defaultAction]): invoke "flushMailCaches" on [self clientObject]
1825         so that the mailbox cache is refreshed everytime the user presses
1826         on "get mail". I doubt a mailbox cache really is useful in general
1827         anyway.
1828
1829 2007-01-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1830
1831         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1832         -userInContext:]): if the lookup is on "freebusy.ifb" and the
1833         username is "anonymous" the user is automatically set to
1834         "freebusy".
1835
1836 2007-01-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1837
1838         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1839         -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
1840         user with password "freebusy".
1841
1842         * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1843         -contentAsString]): the default timerange is now 14 days before
1844         currentday and 1 month after.
1845
1846 2007-01-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1847
1848         * SoObjects/Appointments/SOGoAppointmentFolder.m
1849         ([SOGoAppointmentFolder
1850         -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
1851         escape the record string in a way suitable with XML encoding.
1852
1853 2007-01-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1854
1855         * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
1856         calendar view would not be updated properly.
1857
1858 2007-01-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1859
1860         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1861         -newStartDate]): fix the handling of the component start date
1862         depending on the "hm" and the "day" parameters.
1863
1864         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
1865         -roleOfUser:uidinContext:context]): set role of current user to
1866         "Assistant" if the object that is accessed is "freebusy.ifb".
1867
1868         * SoObjects/Appointments/SOGoAppointmentFolder.m
1869         ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
1870         moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
1871         ([SOGoAppointmentFolder
1872         -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
1873         lookupCalendarFolderForUID: method, which doesn't do security
1874         checks.
1875
1876 2007-01-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1877
1878         * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
1879         accessor that returns the comma-separated list of users with role
1880         "Assistant".
1881         ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
1882         ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
1883         "checkedUsers". Instead, each user is either classified in the
1884         list of assistants or the list of delegates.
1885
1886 2006-12-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1887
1888         * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1889         -composeAction]): method imported from removed container modules.
1890         ([UIxMailMainFrame -mailFolderName]): method imported from removed
1891         container modules.
1892
1893         * UI/MailerUI/UIxMailPopupView.m: a new special popup component
1894         for wrapping UIxMailView with the "popupview" action.
1895
1896         * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
1897         since its the component that displays the same splash screen than
1898         the one in Thunderbird/Icedove.
1899
1900         * UI/MailerUI/UIxMailAccountViewContainer.[hm],
1901         UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
1902         UI/MailerUI/UIxMailListViewContainer.[hm],
1903         UI/MailerUI/UIxMailViewContainer.[hm]: removed
1904
1905 2006-12-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1906
1907         * UI/WebServerResources/HTMLElement.js: replaced the functional
1908         selectNode() and deselectNode() functions with select() and
1909         deselect() methods of HTMLElement.
1910
1911         * UI/WebServerResources/ContactsUI.js: cleanup, most of the
1912         events are initialized from here now instead of in the HTML code.
1913
1914         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1915         -checkRightsAction]): new method similar to the one with the same
1916         name in UIxCalMainView.m.
1917
1918         * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
1919         code to handle the publishing of freebusy information.
1920
1921 2006-12-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1922
1923         * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
1924         -checkRightsAction]): new action method that returns a
1925         comma-separated list of boolean values matching the right of the
1926         current user to "view" (as a permission) each foreign calendar
1927         stored in his preferences.
1928
1929         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
1930         new method that sets a customOwner, which can be returned with
1931         ownerInContext it set.
1932
1933         * SoObjects/Appointments/SOGoAppointmentFolder.m
1934         ([SOGoAppointmentFolder
1935         -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
1936
1937 2006-12-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1938
1939         * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
1940         below, but for the Contacts and Calendar collections.
1941
1942         * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
1943         new acl facilities method from sope-gdl/GCSFolder.m.
1944
1945         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1946         -roleOfUser:uidinContext:context]): new method that returns
1947         SOGoRole_Assistant when the user is an assistant or a delegate on
1948         the "personal" ab object. This is so that setting roles on the
1949         SOGoContactFolders object is not required.
1950
1951 2006-12-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1952
1953         * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
1954
1955         * UI/Contacts/UIxContactsAclsSelection.m: new component specific
1956         to the handling of the user selection for the acls.
1957
1958         * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
1959         values from SoPermissions with ones specific to SOGo.
1960
1961         * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
1962         handles the storage for the acls.
1963
1964         * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
1965         class for SOGoAppointmentObject and SOGoTaskObject.
1966
1967         * UI/Common/UIxAclEditor.[hm]: new component that provides a
1968         general editor for folder acls.
1969
1970         * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
1971         renamed.
1972         ([NSString -davMethodToObjC]): method that returns the method name 
1973         for a DAV property implementation.
1974
1975         * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
1976         NSArray.
1977         ([NSArray -stringsWithFormat:format]): new method that returns
1978         formatted occurences of the strings stored in the array.
1979
1980         * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
1981         +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
1982         subclass module of SoWebDAVValue that supports collections of
1983         properties of the same type.
1984
1985 2006-11-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1986
1987         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1988         -lookupFolder:ofClassNamed:inContext:]): added the ability to
1989         configure the name of the SOGoDraftFolders with the ud var
1990         "SOGoDraftsFolderName".
1991
1992 2006-11-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1993
1994         * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1995         -userTimeZone:username]): new method that returns the timezone for
1996         the specified user depending on his preferences and the server
1997         defaults
1998
1999         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2000         -stringForData:partInfo:]): take the encoding into account and
2001         translate the text to "normal" before processing the charset data.
2002
2003 2006-11-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2004
2005         * UI/WebServerResources/generic.js: the progress indicator is on
2006         when loading the page so we turn it off, and we turn it back on
2007         whenever we switch to another module...
2008
2009         * UI/WebServerResources/SchedulerUI.js: make sure the day view
2010         synchronization mechanism works everywhere.
2011
2012         * UI/WebServerResources/generic.js: the log window is not only
2013         visible when UIxDebugEnabled is set.
2014
2015         * UI/WebServerResources/SchedulerUI.js: the month overview's day
2016         cells are now initialized with the DOM event interface methods
2017         instead of with html attributes.
2018
2019         * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
2020         headers (should be made configurable at some point)...
2021
2022         * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
2023         "not null" constraint on startdate, enddate, isopaque,
2024         participants and partmails.
2025
2026 2006-11-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2027
2028         * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
2029         -hoursToDisplay]): prevent a crash by retaining the
2030         "hoursToDisplay" array after it's created.
2031         ([UIxCalDayTable -clickableHourCellClass]): new method for the new
2032         clickable hours DIV.
2033
2034         * UI/WebServerResources/SchedulerUI.js: made the event
2035         participation status modification asynchronous, which also fixes a
2036         bug where the window would sometimes close before the accept or
2037         decline action was completed. Also, adapted the event handling
2038         related to the days or weeks view with the new DIV-based layout.
2039
2040         * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
2041
2042         * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
2043         DIV-based presentation of the days and weeks.
2044
2045         * SoObjects/Appointments/SOGoTaskObject.m: same as below...
2046
2047         * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
2048         might return an exception so we have to handle it if we don't
2049         wanna crash...
2050
2051 2006-11-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2052
2053         * UI/WebServerResources/SchedulerUI.js: updated the list
2054         initialization code to use the new event management scheme, adding
2055         what was missing to be able to delete events and tasks again.
2056
2057         * UI/WebServerResources/MailerUI.js: added code to activate the
2058         "Get mails" button. Fixed a bug which prevented messages to be
2059         deleted.
2060
2061         * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
2062         navigation and focus handling of INPUTs.
2063
2064 2006-11-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2065
2066         * UI/WebServerResources/MailerUI.js: added code to handle the
2067         possible drag and drop events to manager in the mail module.
2068         Moving messages, opening parent folders, ...
2069
2070         * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
2071         the drag and drop manager as well as the interface to HTMLElement
2072         to trigger drag and drop events.
2073
2074         * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
2075         action to move the current message to the mailbox named after the
2076         value of parameter "tofolder".
2077
2078         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2079         -moveToFolderNamed:folderNameinContext:]): new method base on
2080         -trashInContext:.
2081
2082 2006-11-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2083
2084         * UI/WebServerResources/generic.js: added and activated many
2085         "load" handlers to configure generic widgets used across the
2086         modules. More events are now handled in a DOM-fashion way instead
2087         of by setting the relative attributes in the templates.
2088
2089         * UI/Templates/UIxSortableTableHeader.wox: all the events are
2090         declared from the javascript DOM onload handlers.
2091
2092         * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
2093         library.
2094
2095         * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
2096         declared from the javascript DOM onload handlers.
2097
2098         * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
2099         we want everything to be separated from each other, as much as
2100         possible.
2101
2102         * UI/WebServerResources/SOGoDragHandles.js: new module containing
2103         the "SOGoDragHandlesInterface", implementing methods that can be
2104         attributed to DIV so that they can be used as drag handles.
2105
2106         * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2107         -asQPSubjectString]): initialize the tmp strings with '0' to make
2108         sure they don't contain garbage.
2109
2110 2006-11-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2111
2112         * UI/WebServerResources/MailerUI.js: register the messageList
2113         table as a dragging source and the leaf of the navigation tree as
2114         dnd destinations to the DNDManager.
2115
2116         * UI/WebServerResources/generic.js: initialize tabs from the
2117         "unload" event listener that is added programmatically instead of
2118         from the template... Also, added the new DNDManager object.
2119
2120         * UI/WebServerResources/HTMLTableElement.js: added code to
2121         simulate XUL drag n drop events. This code will possibly be moved
2122         to HTMLElement.js instead later...
2123
2124         * SoObjects/Contacts/SOGoContactLDAPFolder.m
2125         ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
2126         below.
2127
2128         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2129         -_qualifierForFilter:filter]): only search records which starts
2130         with the specified pattern.
2131
2132 2006-11-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2133
2134         * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2135         -asQPSubjectString]): new method that returns the special QP
2136         string with its qp declaration for email subjects.
2137         ([SOGoDraftObject -bodyPartForText]) 
2138         ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
2139         double-encode data in UTF-8.
2140
2141         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2142         -newStartDate]): new method to determine the start date depending
2143         on the URL parameters, the current day and the current time.
2144         ([UIxComponentEditor -toolbar]): new method to determine the
2145         filename of the toolbar that should be drawn depending on the
2146         ownership and the list of attendees of the task/event wrt to the
2147         current user...
2148
2149         * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
2150         -setDayStartHour:aStartHour]): adjust the minutes to the next
2151         quarter of hour, if not already set to a quarter.
2152
2153         * UI/WebServerResources/UIxAppointmentEditor.js,
2154         UI/WebServerResources/UIxTaskEditor.js: added code to manage start
2155         date change.
2156
2157 2006-11-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2158
2159         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2160         -loadValuesFromComponent:component]): handles access class
2161         (privacy) and status.
2162
2163         * UI/Contacts/UIxContactsListViewContainer.m
2164         ([UIxContactsListViewContainer -additionalFolders]): return nil if
2165         [self additionalAddressBooks] returns an empty string.
2166
2167 2006-11-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2168
2169         * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
2170         rangesOf7Days]): enhanced and debugged algorithm to feed the array
2171         with slices where the first day is still in the requested month.
2172
2173         * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
2174         non-popup pages.
2175
2176         * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
2177         of events in the day boxes of the calendar's monthly view.
2178
2179         * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
2180         -davContentType]): declare "text/calendar".
2181
2182         * SoObjects/Appointments/SOGoAppointmentObject.m
2183         ([SOGoAppointmentObject -davContentType]): declare
2184         "text/calendar".
2185
2186         * SoObjects/Appointments/SOGoAppointmentFolder.m
2187         ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
2188         HTTP methods are handled by SOPE and requires nil to be returned,
2189         this method now invokes the new
2190         "requestNamedIsHandledLater:inContext:" method to check that.
2191         ([SOGoAppointmentFolder
2192         -requestNamedIsHandledLater:nameinContext:context]): new methods
2193         that returns "YES" only for the "OPTIONS" http method (for now...).
2194         ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
2195         overloaded method to append the "access-control" and
2196         "calendar-access" DAV abilities to the initial declaration.
2197
2198         * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
2199         imitate the look of Sunbird/Lightning's monthly view.
2200
2201         * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
2202         UIxCalMonthViewOld.[hm].
2203
2204 2006-11-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2205
2206         * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
2207         ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
2208         method.
2209         ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
2210         returns an image name based on the participation status of the
2211         current attendee.
2212
2213         * UI/WebServerResources/SchedulerUI.js: same strip down as for
2214         generic.js below.
2215
2216         * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks]) 
2217         ([UIxContactsListViewContainer -additionalFolders]) 
2218         ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder]) 
2219         ([UIxContactsListViewContainer -currentAdditionalFolder]): new
2220         methods to handle the external addressbooks a user has subscribed
2221         too, by retriving them from his preferences.
2222
2223         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2224         -updateAdditionalAddressBooksAction]): new method that updates the
2225         user settings with the list of addressbook he has subscribed to.
2226
2227         * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
2228         module for the address book selector.
2229
2230         * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
2231         a toolbar with two buttons ("add" and "remove") to manage the
2232         additional addressbooks a user might subscribe to.
2233
2234         * UI/WebServerResources/ContactsUI.js: added code to handle
2235         "external addressbooks" from the Javascript point-of-view, by
2236         extending existing methods and adding code for the "add ab" and
2237         "remove ab" buttons.
2238
2239         * UI/WebServerResources/generic.js: moved extensions methods to
2240         DOM elements to separate files for better clarity.
2241
2242         * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
2243         new method that returns "pageContent" as class, but also "popup"
2244         for the DIV where the page content lies, so that we can manipulate
2245         the content of popup's with CSS identifiers.
2246
2247 2006-10-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2248
2249         * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
2250         -displayStyle]): new method that returns a string containing the
2251         css style relative to the current appointment cell. This code is
2252         currently inactive but might be reused later.
2253
2254         * UI/WebServerResources/SchedulerUI.js: added code to handle the
2255         display of the selected day (the day pointed by the mouse, or the
2256         current day when changing the view).
2257
2258         * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
2259         -dayCellClasses]): new method that returns a string containing the
2260         css classes applicable to the current cell, depending on the
2261         position of the day in the week, the day of today and the
2262         requested day.
2263
2264         * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
2265         -currentContactAptBorder]): new method that returns the
2266         appropriate border color for the specified user.
2267
2268         * SoObjects/Appointments/SOGoAppointmentObject.m
2269         ([SOGoAppointmentObject
2270         -saveContentString:contentStringbaseVersion:baseVersion]):
2271         overloaded method that parse new events and detects if they have
2272         an organizer or not. If they are new and have no organizer set
2273         (Sunbird/Lightning...), the owner of the event is set as
2274         organizer.
2275
2276         * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
2277         category that provides facility methods and interfaces to the
2278         AgenorUserManager.
2279
2280         * SoObjects/Contacts/product.plist: give full access to ANY
2281         authenticated user, not just the owner (to every objects...).
2282
2283 2006-10-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2284
2285         * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
2286         every replica widgets are declared as such to their master
2287         counterpart. Take the days into account when displaying the time
2288         range taken by the appointment.
2289
2290         * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
2291         -getICalPersonsFromValue:selectorValue]): method taken from
2292         UIxFreeBusyUserSelector, that is shared both by
2293         UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
2294
2295         * SoObjects/Appointments/SOGoAppointmentFolder.m
2296         ([SOGoAppointmentFolder
2297         -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.
2298
2299         * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
2300         derived and taken as a subset of UIxFreeBusyUserSelector that
2301         implements the table part of the FreeBusy view. Most of the
2302         methods of UIxFreeBusyUserSelector relative to that table were
2303         moved into UIxFreeBusyUserSelectorTable, which can also be used as
2304         a standalone view for AJAX operations.
2305
2306 2006-10-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2307
2308         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2309         -vCard]): change reverted.
2310
2311         * UI/Contacts/UIxContactEditor.m: check whether the client contact
2312         folder has selector "globallyUniqueObjectId" before calling that
2313         method.
2314
2315         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2316         -vCard]): the "setVClass" NGVCard method really is "setClass"
2317         instead.
2318
2319         * SoObjects/Contacts/SOGoContactLDAPFolder.m
2320         ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
2321         request the "streetAddress" instead of the "streetaddress".
2322         ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
2323         mails that *contain*, and not just *start with* the search
2324         pattern.
2325
2326         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2327         -vCard]): mark address returned from LDAP as the work address.
2328
2329         * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
2330         span covered with the anchor, not only the textual information
2331         within.
2332
2333         * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
2334         argument (event or task) to newEvent in the appointmentListMenu.
2335         Make the appointmentsListView display the appointmentsListMenu.
2336
2337         * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
2338         12 to 50 before displaying "...".
2339         ([SOGoAptFormatter -fullDetailsForApt::]): display location only
2340         if its length > 0, whether location itself is nil or not...
2341         ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
2342         of which the length > 0.
2343
2344 2006-10-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2345
2346         * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
2347         french and ISO dates.
2348
2349         * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
2350         from UIxContactSelector to handle contact lists (current and
2351         additional contacts).
2352
2353         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2354         -_freeBusyAsText]): added handling of an "additional"-named query
2355         parameter that describe the number of additional days after
2356         enddate that should be returned.
2357
2358         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2359         -_responseForResults:results]): give priority to results with
2360         "c_uid" fields. If none returned, use the first contact received.
2361
2362         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2363         -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
2364         2 and "CANCELLED" to 0.
2365
2366 2006-10-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2367
2368         * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
2369         of start and end dates to short string dates.
2370
2371         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2372         -readFreeBusyAction]): new method that returns an array of numbers
2373         corresponding to the state in the freebusy of each "quarter of an
2374         hour" between the "sday" and "eday" date parameters passed in the
2375         url. This permits to handle the display of the freebusy with Ajax
2376         mechanisms.
2377         ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
2378         since the free busy displays 2 days ahead.
2379
2380         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2381         -contactSearchAction]): new action that returns the uid and the
2382         username + email of the user whose name contain the value of the
2383         "search" url parameter.
2384
2385         * SoObjects/Appointments/SOGoAppointmentFolder.m
2386         ([SOGoAppointmentFolder
2387         -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
2388         useful for the computing of the status of the freebusy.
2389
2390         * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
2391         -init]): new component that incarnates a user selector for events
2392         inspired by the new one found in Thunderbird Lightning.
2393
2394 2006-10-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2395
2396         * UI/WebServerResources/generic.js: added code to enable or
2397         disable anchor visually (following our internal algorithm).
2398
2399         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
2400         added new "url" ivar with its classic accessors.
2401         ([UIxComponentEditor -urlButtonClasses]): new method that returns
2402         the class strings for the url button on the appointment/task
2403         editor (depending on the validity of the url).
2404
2405         * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
2406         UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
2407         the template to match the Lightning's new task/appointment editor.
2408
2409         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
2410
2411         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
2412
2413 2006-10-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2414
2415         * SoObjects/Contacts/SOGoContactLDAPFolder.m
2416         ([SOGoContactLDAPFolder
2417         -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
2418
2419         * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
2420         iCalEntityObject instances instead of just iCalEvent's.
2421
2422         * SoObjects/Appointments/SOGoAppointmentFolder.m
2423         ([SOGoAppointmentFolder
2424         -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
2425
2426         * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
2427         bad way of handling ownership that way.
2428
2429         * SoObjects/Contacts/SOGoContactLDAPFolder.m
2430         ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
2431         on "cn", just like Mozilla.
2432
2433 2006-10-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2434
2435         * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
2436         "to" should be retained, otherwise it will be autoreleased and a
2437         crash will occur.
2438
2439         * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
2440         -writeAction]): updated method to fetch the card before initing
2441         the snapshot.
2442
2443         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2444         -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
2445         of NSNotFound.
2446
2447         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2448         -iCalStringTemplate]): start and due date are now optional.
2449
2450         * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
2451         -setDayStartHour:aStartHour]):  added a new "isDisabled" ivar with
2452         appropriate accessors to be settable through the templates.
2453
2454         * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
2455         new "isDisabled" ivar with appropriate accessors to be
2456         settable through the templates.
2457
2458         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2459         -availableCalendars]): new method that list the calendars to which
2460         the user has subscribed.
2461         ([UIxComponentEditor -componentOwner]): returns the owner of the
2462         editted object.
2463
2464         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2465         -extractQuickFieldsFromTodo:_task]): set the start and enddate of
2466         quickentries to null whenever each or all of them are null, by
2467         providing an impossible timestamp from with NSNotFound as value.
2468
2469 2006-10-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2470
2471         * UI/WebServerResources/UIxMailEditor.js: update the algorithm
2472         that handles the creation of new fields with the new APIs and the
2473         new node structure on the page.
2474
2475         * UI/Scheduler/UIxAppointmentEditor.m,
2476         UI/Scheduler/UIxTaskEditor.m:
2477         refactored to user UIxComponentEditor as parent class.
2478
2479         * UI/Scheduler/UIxComponentEditor.[hm]: new class module
2480         containing the methods common to the UIxTaskEditor and the
2481         UIxAppointmentEditor.
2482
2483 2006-10-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2484
2485         * SoObjects/Appointments/SOGoAppointmentFolder.m
2486         ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
2487         the handling of time-ranges.
2488
2489         * UI/WebServerResources/ContactsUI.js: specify a notification type as
2490         parameters when onConfirmContactSelection in invoked.
2491
2492         * UI/WebServerResources/generic.js: specify a notification type as
2493         parameters when onContactRemove in invoked.
2494
2495         * UI/WebServerResources/SchedulerUI.js: when the user deselects
2496         all calendars, select his entry.
2497
2498 2006-10-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2499
2500         * UI/WebServerResources/SchedulerUI.js: edit and delete events
2501         with their owner-relative urls. Generate a correct entry in the
2502         css color table when a user is added to the calendars list. Put
2503         the same color next to the user id.
2504
2505         * UI/WebServerResources/generic.js: implemented some new helper
2506         methods.
2507
2508         * SoObjects/Appointments/SOGoAppointmentFolder.m
2509         ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
2510         entries if their owner is not the current user.
2511
2512         * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
2513         -displayClasses]): return the correct class for the current event
2514         representation depending on its owner.
2515
2516         * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
2517         and associate a color for each user login depending on its
2518         position in the list.
2519
2520         * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
2521         -currentRowCSSClass]): return the correct class for the current
2522         row depending on the owner of the event.
2523
2524         * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
2525         -setColors:colors]): new method to associate a color table with
2526         each user in the list.
2527
2528         * SoObjects/Appointments/SOGoAppointmentFolder.m
2529         ([SOGoAppointmentFolder
2530         -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
2531
2532         * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
2533         NSObject to associate an instance with a user.
2534
2535 2006-10-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2536
2537         * UI/WebServerResources/SchedulerUI.js: added handling of multiple
2538         calendars.
2539
2540         * UI/WebServerResources/ContactsUI.js: added handling of
2541         notification of changes to contact selectors.
2542
2543         * UI/WebServerResources/generic.js: added handling of notification
2544         of changes to contact selectors.
2545
2546         * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2547         -updateCalendarsAction]): proxy method to update the user
2548         preference table with the new selected calendar uids.
2549
2550         * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2551         -calendarsContactsAction]): new method.
2552
2553         * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes]) 
2554         ([UIxContactSelector -setHasCheckBoxes:aBool]) 
2555         ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
2556         permit the drawing of checkboxes instead of card icons.
2557
2558         * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
2559         wrap a selector the the "Calendars" tab.
2560
2561         * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
2562         new user calendar selector.
2563
2564 2006-10-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2565
2566         * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
2567         may cover hour 0 to hour 23.
2568
2569         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2570         -iCalStringFromQueryParameter:format:]): dates explicitly set to
2571         utc tz.
2572
2573         * UI/WebServerResources/SchedulerUI.js: manage both lists of
2574         objects wrt to the toolbar actions.
2575
2576         * UI/WebServerResources/generic.js: added code to the "String"
2577         class to decode number-encoded char entities.
2578
2579         * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2580         -batchDeleteAction]): new method to delete selected entries in the
2581         lists.
2582
2583         * SoObjects/Appointments/SOGoAppointmentFolder.m
2584         ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
2585         that delete identified entries in batch.
2586
2587         * UI/SOGoUI/UIxComponent.m ([UIxComponent
2588         -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
2589
2590         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
2591         UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2592         -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
2593         -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
2594         -saveAction]):
2595         return a UIxJSClose component if everything went fine.
2596
2597         * UI/Scheduler/UIxTaskEditor.h: interface extracted from
2598         UIxTaskEditor.m.
2599
2600         * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
2601         UIxAppointmentEditor.m.
2602
2603         * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
2604         a very light page with javascript code to close a window, by
2605         calling a method on the opener if specified. This component is
2606         designed to work as a response to form postings.
2607
2608 2006-10-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2609
2610         * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
2611         SOGoAppointmentObject adapted for the handling of tasks.
2612
2613         * SoObjects/Appointments/NSArray+Appointments.[hm]: category
2614         extracted from SOGoAppointmentObject.
2615
2616         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2617         -saveUrl]): returns the url needed to POST the new form to.
2618         redirect the user to <aptid>/editAsAppointment instead of /edit,
2619         so that SOGoAppointmentFolder can return the correct object type.
2620
2621         * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
2622         -compareAptsAscending:_other]): accept empty start or end dates.
2623
2624         * SoObjects/Appointments/SOGoAppointmentFolder.m
2625         ([SOGoAppointmentFolder
2626         -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.
2627         ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
2628         components of type "vtodo" as well as "vevent".
2629         ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
2630         url specified ends with AsTask or AsAppointment, returns the
2631         an object of the appropriate class, otherwise deduce it from its
2632         content if the HTTP method is "PUT", otherwise read its type from
2633         the quick table.
2634
2635         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2636         -extractQuickFieldsFromTodo:_task]): extract quick fields from
2637         tasks.
2638
2639         * UI/Scheduler/UIxCalView.m ([UIxCalView
2640         -fetchCoreAppointmentsInfos]): replacement methods for
2641         fetchCoreInfos but by retrieving object with component "vevent".
2642         ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
2643         components.
2644
2645         * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
2646         UIxCalAptListView adapted for the handling of tasks.
2647
2648         * UI/Scheduler/UIxTaskProposal.[hm],
2649         UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
2650         clones of the UIxAppointment* classes for the handling of tasks.
2651
2652         * UI/WebServerResources/UIxTaskEditor.js: clone of
2653         UIxAppointmentEditor adapted for the handling of tasks.
2654
2655         * UI/WebServerResources/SchedulerUI.js: added support for tasks.
2656         Scroll the daily view to the appropriate hour when an appointment
2657         is selected in the appointments list.
2658
2659 2006-10-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2660
2661         * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
2662         -setDayStartHour:aStartHour]): specifies the user timezone on the
2663         given date.
2664
2665         * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
2666         as timezone.
2667
2668         * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate]) 
2669         ([NSCalendarDate -driftedDate]): methods made useless by a better
2670         comprehension of the NSTimeZone API...
2671
2672 2006-10-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2673
2674         * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
2675         new methods from the NSCalendarDate methods.
2676
2677         * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
2678         extending UI/Scheduler/NSCalendarDate+Scheduler.m.
2679         ([NSCalendarDate
2680         +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).
2681         ([NSCalendarDate -adjustedDate]): this method returns another
2682         instance set to the correct hour after the original date was set
2683         from a non-GMT timezone. This date can be used for storage.
2684         ([NSCalendarDate -driftedDate]): this method does exactly the
2685         opposite of -adjutedDate, that is, it enables the method
2686         hourOfDay, minuteOfHour etc... to return the values according to
2687         the original date's timezone. This date CANNOT be used for storage.
2688
2689         * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
2690         -shortDateString]): new method that will return a "short date
2691         string" (yyyymmdd) from a calendar date object.
2692
2693         * UI/SOGoUI/UIxComponent.m ([UIxComponent
2694         -_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.
2695
2696         * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
2697         to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
2698
2699 2006-10-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2700
2701         * UI/WebServerResources/SchedulerUI.js: added code to scroll the
2702         view of the day at the height of hour 8:00.
2703
2704         * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
2705         ([UIxCalView -dayEndHour]): returns 24.
2706
2707         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction]) 
2708         ([UIxContactFoldersView -newAction]): invoke
2709         _selectActionForApplication: on self with the proper attribute too.
2710
2711         * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
2712         we now use the action mechanism in UIxContactsListView to keep the
2713         same view for the contact selectors and the regular contact view.
2714
2715         * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
2716         UIxContactsListViewContainerBase.[hm]
2717
2718         * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
2719
2720         * UI/WebServerResources/generic.js: generalized emailstring
2721         handling functions. Generalized address book access functions.
2722
2723         * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
2724         -isPopup]): return YES if the "popup" query parameter is set.
2725
2726         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2727         -defaultAction]): keep the url parameters when redirecting.
2728         ([UIxContactFoldersView -selectForSchedulerAction]) 
2729         ([UIxContactFoldersView -selectForMailerAction]): new action
2730         methods for the /scheduler-contacts and /mailer-contacts invocations.
2731
2732         * SoObjects/SOGo/SOGoObject.m: compose the action url using the
2733         newly available NSString+URL category.
2734
2735         * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
2736         -asURLParameters]): handle dictionary entries which could be
2737         instances of NSArray rather than NSString.
2738
2739         * SoObjects/SOGo/NSString+URL.m ([NSString
2740         -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
2741         ([NSString -urlWithoutParameters]): new method that returns the
2742         url without its parameters.
2743
2744         * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
2745
2746         * SoObjects/SOGo/NSDictionary+URL.[hm],
2747         UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
2748
2749         * UI/WebServerResources/UIxMailEditor.js: add support for
2750         additions of different types (to, cc, bcc) of recipients from the
2751         address book.
2752
2753         * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
2754         "<?xml..." header.
2755
2756         * UI/Contacts/UIxContactsMailerSelection.m,
2757         UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
2758         UI/Contacts/UIxContactsSelectionView.m to provide a different set
2759         of widgets depending on the application invoking the contact list.
2760
2761 2006-09-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2762
2763         * UI/WebServerResources/ContactsUI.js: hide the current contact
2764         whenever the user changes of contact folder.
2765
2766         * UI/WebServerResources/UIxContactEditor.js: the contact UID is
2767         now provided by the template when loading the page.
2768
2769         * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2770         -iCalPersonWithUid:uid]): new method taken from removed module
2771         'iCalPerson+UIx';
2772
2773 2006-09-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2774
2775         * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
2776         -categoriesAsString]): same as below.
2777
2778         * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
2779         vcalendar API's iCalEvent instead of the removed SOGoAppointment.
2780
2781         * SoObjects/Appointments/SOGoAppointmentObject.m
2782         ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
2783         ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
2784         helper method.
2785
2786         * SoObjects/Appointments/SOGoAppointmentFolder.m
2787         ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
2788         hackish test to detect whether the request concernes VEVENT's or
2789         anything else. Return events only in the former case.
2790         ([SOGoAppointmentFolder
2791         -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
2792         c_name quickfield so that the calendar list can identify the
2793         appointments with their complete "filename".
2794
2795         * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
2796         groupsOfClass:fromSource: to parse the given vcalendar.
2797
2798         * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
2799
2800         * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
2801
2802         * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
2803         obsolete class.
2804
2805         * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
2806
2807 2006-09-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2808
2809         * SoObjects/Appointments/SOGoAppointmentFolder.m
2810         ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
2811         sensitive to the CalDAV method names.
2812         ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
2813         "calendar-query" CalDAV method name.
2814
2815         * UI/WebServerResources/ContactsUI.js: removed a lot of useless
2816         code coming originally from MailerUI.js.
2817
2818         * UI/WebServerResources/UIxContactEditor.js: imitate the
2819         Thunderbird address book by completing the display name with the
2820         content of the first and last name fields, until the display name
2821         is modified manually.
2822
2823         * UI/WebServerResources/generic.js: added a "trim" method to the
2824         String class.
2825
2826         * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
2827         -displayName]): new method that returns the display name from "cn"
2828         or from the "displayName" key if found.
2829
2830         * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
2831         -initSnapshot]): check if "[card n]" returns anything to avoid a
2832         crash.
2833
2834         * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
2835         that returns an unparsed doctype definition for the pages.
2836
2837         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2838         -vCard]): set the card's fn to attribute "displayName" if found
2839         before "cn".
2840
2841 2006-09-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2842
2843         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2844         -vCard]): handle the "streetAddress" and "l" fields.
2845
2846         * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
2847         header fields by converting the tables to DIVs and SPANs.
2848
2849         * UI/WebServerResources/generic.css: attempted unification of font
2850         families and size across all the elements. changed the
2851         logConsole's "position" from "fixed" to "absolute" to avoid
2852         performance issues.
2853
2854 2006-09-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2855
2856         * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
2857         empty the contact view when the current contact is being deleted.
2858
2859         * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
2860         parse the email field and provide the address full name if found
2861         as the "contactFN" parameter.
2862
2863         * UI/WebServerResources/generic.js (openMailTo): do not give a
2864         name to the opened window so that serveral ones can be opened at
2865         the same time.
2866
2867         * UI/MailPartViewers/UIxMailPartTextViewer.m
2868         ([UIxMailPartTextViewer -flatContentAsString]): override method by
2869         replacing carriage returns with "<br />" in the result string from
2870         super's implementation.
2871
2872         * UI/Contacts/UIxContactView.m ([UIxContactView
2873         -_urlOfType:aType]): don't manage non-mailto urls through
2874         javascript, let the user decide what's best for him.
2875
2876         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2877         -newAction]): transfer all the query parameters by using the
2878         "asURLParameters"'s result string from [self queryParameters].
2879
2880         * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
2881         -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
2882         query parameters and put their values (if any) into the snapshot.
2883
2884         * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
2885         carriage-returns to "<br />".
2886         ([UIxContactView -workCompany]): explicitly initialize company to
2887         nil if org is nil or empty.
2888
2889         * UI/WebServerResources/UIxContactEditor.js: updated validation
2890         code after we added and renamed some fields.
2891
2892         * UI/WebServerResources/ContactsUI.js: added code to cache contact
2893         cards and to handle card updates.
2894
2895 2006-09-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2896
2897         * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
2898         test the length of the returned string since they will never be
2899         nil.
2900
2901         * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
2902         return self if the process went successful, returns an exception
2903         otherwise (and only otherwise...).
2904
2905         * OGoContentStore/OCSContactFieldExtractor.m
2906         ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
2907         adapted method to the new VCard api. Since the cards are stored in
2908         vcard format, we no longer deal with a dictionary but with a
2909         NGVCard object...
2910
2911 2006-09-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2912
2913         * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
2914         return a string with a "mailto" url.
2915         ([UIxContactView -_urlOfType:aType]): generic method to return a
2916         url string with a html anchor pointing to it.
2917
2918         * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
2919         since subclass "UIxContactEditor" did nothing. Implemented code to
2920         display and modify the values parsed from the vcards, displayed in
2921         a way similar to the Thunderbird addressbook.
2922
2923         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2924         -save]): new dummy method.
2925
2926         * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2927         -save]): made method void.
2928
2929 2006-09-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2930
2931         * UI/Contacts/UIxContactView.m: added many wrapper methods to
2932         display blocks of data Ã  la Thunderbird Addressbook. If data is
2933         available, those wrappers (around the NGVCard methods) will
2934         enclose the results in a proper HTML output with the correct label
2935         (if present), otherwise it will return an empty string.
2936         ([UIxContactView -vcardAction]): new action to return the contact
2937         as text/vcard (for exporting).
2938
2939         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2940         +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
2941
2942         * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2943         -vCard]): create a new NGVCard instance when no data is available
2944         and retain it.
2945         ([SOGoContactGCSEntry -save]): save the vCard using the new
2946         "versitString" API method/message.
2947
2948         * UI/Contacts/UIxContactView.h: separated interface from
2949         UIxContactView.m.
2950
2951         * UI/WebServerResources/ContactsUI.js: add-ed code to download card
2952         views and display them beneath the list.
2953
2954 2006-09-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2955
2956         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
2957         the timezone even when it's the server timezone.
2958
2959         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
2960         -privateContacts:inContext:]): no long configure the calendar
2961         object with the user's timezone since it's now accessible
2962         application-wide throught the SOGoObject methods.
2963
2964         * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
2965         method. Removed the "backendTimeZone" method.
2966
2967         * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
2968         instead of SoComponent.
2969
2970         * SoObjects/Appointments/SOGoAppointmentObject.m: 
2971         ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
2972         [self serverTimeZone] instead of "EST" (which was removed).
2973
2974         * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
2975         "timeZone" ivar and its accessors.
2976
2977         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
2978         centralized method returing the timezone configured in the
2979         userdefaults db or "Canada/Eastern" if missing.
2980         ([SOGoObject -userTimeZone]): new centralized method returing the
2981         timezone of the current user or the server timezone if missing
2982         from the user configuration table.
2983
2984 2006-09-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2985
2986         * UI/WebServerResources/SchedulerUI.js: implemented caching of
2987         date selectors.
2988
2989         * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
2990         return a path based on the object's context instead of the first
2991         level in SOGo's object hierarchy...
2992
2993 2006-09-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2994
2995         * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
2996         be clicked.
2997
2998         * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
2999         timezone ([self viewTimeZone]) to the WEMonthOverview component to
3000         avoid a confusion with the days.
3001
3002         * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
3003         can now be clicked.
3004
3005         * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
3006         imitate Sunbird's synchronization between the 3 visible views.
3007
3008         * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
3009         sure the numbers in dateString are formatted so as to take 4 chars
3010         for the year and 2 for the day and the month, otherwise
3011         NSCalendarDate will return a nil date.
3012         ([UIxComponent -applicationPath]): return a path based on the
3013         object's context instead of the second level in SOGo's object
3014         hierarchy...
3015
3016 2006-09-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3017
3018         * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
3019         user's timezone abbreviation to the date string passed as parameter to
3020         NSCalendarDate to generate an accurate date instance. Do the same
3021         when no date is specified and today is chosen.
3022
3023         * UI/WebServerResources/UIxAppointmentEditor.js: convert the
3024         form's time values to integers before comparing them.
3025
3026         * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime]) 
3027         ([UIxCalAptListView -currentEndTime]): initialize the resulting
3028         dates timezone with [self viewTimeZone].
3029
3030         * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
3031         "viewTimeZone" ivar destined to hold an instance of the user's
3032         timezone in memory.
3033         ([UIxComponent -viewTimeZone]): take the timezone from the user's
3034         prefs.
3035
3036 2006-08-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3037
3038         * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
3039         rearranged the layout.
3040
3041         * UI/WebServerResources/UIxAppointmentEditor.js: added code to
3042         manage showing and hiding appointment details.
3043
3044         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3045         -privateContacts:inContext:]): init the SOGoAppointmentFolder's
3046         timezone by taking the current user's timezone setting.
3047
3048         * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
3049
3050         * SoObjects/Appointments/SOGoAppointmentObject.m
3051         ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
3052         set default timezone to EST, although this code should be
3053         rewritten to handle a system and a user default value.
3054
3055         * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3056         -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
3057         take the values from the hour and minute INPUTs when data is
3058         POSTed since we no longer use the UIxTimeSelector component.
3059         ([UIxTimeDateControl -selectableHours]) 
3060         ([UIxTimeDateControl -selectableMinutes]): new methods used by the
3061         template SELECTs to display reasonable and acceptable values
3062         instead of all the possibilities.
3063
3064         * UI/WebServerResources/generic.js: adapted code for the new
3065         implementation of the UIxContactSelector component (added a
3066         "remove" button, removed the previous INPUT and replaced them with
3067         links of class "button").
3068
3069         * UI/Scheduler/UIxTimeDateControl.h: separated interface from
3070         UIxTimeDateControl.m.
3071
3072         * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay]) 
3073         ([UIxCalDayTable -currentAppointmentHour]): new methods that
3074         returns correctly formatted values used as attributes for JS code.
3075
3076         * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
3077         -initialContactsAsString]): renamed implementation of
3078         initialParticipants.
3079         ([UIxContactSelector -currentContactId]) 
3080         ([UIxContactSelector -currentContactName]): new methods used when
3081         listing the initial contacts in the widget. Currently, both return
3082         the person's cn but the latter should ultimately return a user
3083         fullname.
3084
3085         * UI/Contacts/UIxContactSelector.h: separated interface from
3086         UIxContactSelector.m.
3087
3088         * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
3089         all javascript code is now put in Scheduler.js/generic.js.
3090
3091         * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
3092         moved into NSCalendarDate+Scheduler instead.
3093
3094         * SoObjects/Appointments/SOGoAppointmentFolder.m
3095         ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
3096         configure the timezone from SOGoUserFolder when the instance is
3097         being created.
3098         ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
3099         the value of the new "timezone" ivar.
3100
3101 2006-08-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3102
3103         * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
3104         the date selector in the first page and the container of the
3105         future calendar selector in the second page.
3106
3107         * UI/WebServerResources/generic.js: added code for handling tabbed
3108         views.
3109
3110         * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
3111         returns the bundle name associated to the current running product.
3112
3113 2006-08-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3114
3115         * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
3116         exception by invoking a timeout on the opener rather than invoking
3117         the list refresh method.
3118
3119         * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
3120         removed method.
3121
3122         * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters]) 
3123         ([UIxCalWeekView -prevWeekQueryParameters]) 
3124         ([UIxCalWeekView -nextWeekQueryParameters]) 
3125         ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
3126         that return the dates relatively to the current day.
3127         ([UIxCalWeekView -lastWeekName]) 
3128         ([UIxCalWeekView -currentWeekName]) 
3129         ([UIxCalWeekView -nextWeekName]) 
3130         ([UIxCalWeekView -weekAfterNextWeekName]) 
3131         ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
3132         methods that returns the label for the corresponding weeks.
3133
3134         * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
3135         used by UIxCalDayView and UIxCalWeekView to display the events
3136         occuring in one or more days.
3137
3138 2006-08-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3139
3140         * UI/Scheduler/UIxCalMainView.m: extended class to populate the
3141         entries in the new "monthMenu" and "yearMenu".
3142
3143         * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
3144         method to return the current day as a string formatted depending
3145         on the current locale.
3146
3147         * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate]) 
3148         ([UIxCalAptListView -endDate]): "today" is now the default filter
3149         for displayed events.
3150         ([UIxCalAptListView -currentSerialDay]): new method returning the
3151         date of the current enumerated appointment in serial form
3152         (yyyymmdd).
3153
3154         * UI/WebServerResources/SchedulerUI.js: added code to select the
3155         relevant day when an appointment is selected. Added code to popup
3156         a month and a year menu whenever the header entries are clicked in
3157         the calendar widget.
3158
3159         * UI/WebServerResources/generic.js: made addClassName and
3160         removeClassName methods of HTMLElement.
3161
3162 2006-08-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3163
3164         * UI/WebServerResources/MailerUI.js: fixed the contact creation
3165         from email addresses.
3166
3167         * UI/WebServerResources/generic.js: centralized the search-related
3168         functions here since the same code was used across the 3
3169         applications.
3170
3171         * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate]) 
3172         ([UIxCalAptListView -endDate]): return the required dates needed
3173         depending on the value given to the "filterpopup" url parameter.
3174
3175         * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
3176         code by invoking UIxComponent's labelForKey:.
3177
3178         * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
3179         [self pageResourceManager] instead of [self resourceManager].
3180
3181         * UI/Contacts/UIxContactEditorBase.m: invokes
3182         globallyUniqueObjectId on the clientobject's class instead of the
3183         hardcoded "SOGoFolder".
3184
3185         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3186         -newAction]): redirect the "new" action to the personal (default)
3187         contact folder.
3188
3189         * SoObjects/SOGo/SOGoObject.m ([SOGoObject
3190         +objectWithName:inContainer:]): new constructor.
3191
3192         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3193         -lookupContactWithId:recordId]): always create a contact object,
3194         even if it does not exist.
3195
3196 2006-08-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3197
3198         * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
3199         component that lays out the different components of SOGoCalendar.
3200         Only serves as an Objective-C counterpart to its xml template.
3201
3202         * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
3203         from its .m file.
3204
3205         * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
3206         display a widget to handle the information displayed in the
3207         appointments list. Not currently used, lacks implementation.
3208
3209         * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
3210         display a calendar as a dynamic widget from where one can select
3211         the current visible day.
3212
3213         * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
3214         extracted from UIxCalInlineMonthOverview.m.
3215
3216         * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
3217         calendarPageURL methods. The javascript code is handled by .js
3218         files as much as possible...
3219
3220         * UI/WebServerResources/ContactsUI.js,
3221         UI/WebServerResources/MailerUI.js: adapted to the code refactoring
3222         in generic.js.
3223
3224         * UI/WebServerResources/SchedulerUI.js: implemented functions to
3225         handle the new widgets. XmlHTTPRequest code taken from
3226         MailerUI.js.
3227
3228         * UI/WebServerResources/generic.js: put some functions related to
3229         element selections as methods to HTMLElement and HTMLTableElement.
3230
3231         * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
3232         display the list of appointments (embodies the code-size of
3233         UIxCalAptListView; answers to the "aptlist" method).
3234
3235 2006-08-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3236
3237         * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
3238         -correctURLAction]): new short action method replacing the method
3239         below by taking far less code.
3240
3241         * SoObjects/Appointments/SOGoAppointmentFolder.m
3242         ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
3243         with an action in the view-related code.
3244
3245         * UI/Scheduler/UIxAppointmentEditor.m: invoke
3246         "stringByEscapingHTMLString" on the resulting value to avoid
3247         issues with accented characters.
3248         ([-jsCode]): removed method since the javascript code was merged
3249         into SchedulerUI.js.
3250
3251 2006-08-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3252
3253         * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
3254         new class method that returns an iCalPerson based on the UID given
3255         as param.
3256
3257         * UI/Contacts/UIxContactsListViewContainerBase.m: 
3258         UIxContactsListViewContainer renamed to serve as a base class for
3259         the contact lists in both the contact editor and the contact
3260         selectors.
3261
3262         * SoObjects/Contacts/SOGoContactLDAPFolder.m
3263         ([SOGoContactLDAPFolder
3264         -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
3265         setUserIdentifier:setRootDN:]): an LDAP field specifying the
3266         loginname of the users can now be specified.
3267
3268         * UI/WebServerResources/generic.js: added code to manage contact
3269         lists through the new implementation of the UIxContactSelector.
3270
3271         * UI/Templates: put the templates related to SchedulerUI in its
3272         own directory.
3273
3274         * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
3275         -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
3276         entry for "uid" with the field name representing the login name of
3277         the user in the corresponding LDAP branch.
3278
3279 2006-08-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3280
3281         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3282         -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
3283         request is a PUT, always create an entry, even if we're not sure
3284         it does exist.
3285
3286 2006-08-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3287
3288         * UI/WebServerResources/ContactsUI.js: implemented live-search.
3289
3290         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3291         -appendSystemSourcesInContext:context]): populated method with
3292         code that creates entries mapped to instances SOGoContactFolder,
3293         based on the configuration found in the NSUserDefaults under the
3294         key "SOGoLDAPAddressBooks".
3295         ([SOGoContactFolders
3296         -lookupName:nameinContext:contextacquire:acquire]):
3297         "contactsources" do not exist anymore, SOGoContactFolder was split
3298         into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
3299         and one protocol: SOGOContactFolder, instead.
3300         ([SOGoContactFolders -contactFolders]): new accessor used by the
3301         views of SOGoContactXXXFolder to list the possible sources.
3302
3303         * SoObjects/Contacts/SOGoContactObject.h: new protocol that
3304         defines the methods that UIxContactsView, ..Editor and so on...
3305         can expect.
3306
3307         * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
3308         defines the methods that UIxContactsListViewBase expects as well
3309         as the data fields returned in the contact lists.
3310
3311         * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
3312         returns entries an LDAP server. Conforms to the new
3313         SOGOContactFolder protocol.
3314
3315         * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
3316         returns a vCard based on contact entries from an LDAP server.
3317         Conforms to the new SOGOContactObject protocol.
3318
3319         * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
3320         ([NGVCardSimpleValue -vCardEntryString]): generates the correct
3321         entry for the textual representation of the vCard.
3322
3323         * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
3324         extension.
3325
3326         * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
3327         "SOGoContactObject".
3328
3329         * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
3330         method that generates a textual representation of the vcard.
3331
3332         * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
3333
3334         * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
3335         "SOGoContactFolder".
3336
3337         * SoObjects/Contacts/SOGoContactSource.h,
3338         SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
3339         protocols.
3340
3341         * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
3342         -singleAttributeWithName:key]): new method that returns the first
3343         object associated with an ldap key (where generally one value is
3344         returned by key).
3345         ([NGLdapEntry
3346         -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
3347         map the entry into an NSDictionary for processing by
3348         UIxContactsListViewBase.m with the least possible overhead.
3349
3350         * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
3351         extension.
3352
3353 2006-08-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3354
3355         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3356         -privateContacts:inContext:]): now returns an instance of
3357         SOGoContactFolders.
3358
3359         * UI/Contacts/UIxContactsListViewContainer.m
3360         ([UIxContactsListViewContainer -contactFolderName]): new method to
3361         return the absolute path to the current contact folder, called
3362         from within the template.
3363
3364         * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
3365         JS code to initialize the 'currentContactFolder' generic var.
3366
3367         * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
3368         +contactFolderWithSource:inContainer:andName:]): new class
3369         method meant to return an instance connected to the specified
3370         source. Currently useless but won't be anymore in the next few
3371         days.
3372
3373         * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
3374         the "lookupFreeBusyObject" method since it does not exist.
3375
3376         * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
3377         as a "view" for the SOGoContactFolders object. Does nothing but
3378         redirect the browser to the URL of the personal address book of
3379         the user. It does not even have a template.
3380
3381         * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
3382         implementing the SOGoContactSource protocol. Does nothing
3383         currently but will be used to implement access to the personal
3384         address book of the user stored in the SOGo database.
3385
3386         * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
3387         protocol defining an API common to all possible types of contact
3388         sources.
3389
3390         * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
3391         serving as the root of the contact folders available to the
3392         current user. Correctly lists the contact sources in webdav.
3393
3394 2006-08-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3395
3396         * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
3397         -composeAction]): new action method that permits external object
3398         to write a message from the default (primary) account.
3399
3400         * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
3401         -initSnapshot]): new method with code taken from "defaultAction"
3402         but needed for others.
3403         ([UIxContactEditorBase -writeAction]): new action designed to
3404         compose the correct URL needed to obtain the MailerUI's email
3405         editor with the correct "mailto" parameter.
3406
3407         * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
3408         Common so that other modules can use it.
3409
3410         * UI/Contacts/UIxContactsListViewContainer.m: container to make it
3411         easier to manage both ajax and non-ajax requests.
3412
3413         * UI/Contacts/UIxContactsFilterPanel.m: clone of
3414         UIxMailFilterPanel, but applicable to contact lists.
3415
3416         * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
3417         -vcardContentFromSOGoContactRecord]): use the new standard methods
3418         created for each type of entry. If a line is determined to not
3419         contain information, it will be skipped.
3420
3421         * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3422         +initialize]): init defaultMailDomain with the user default
3423         "SOGoDefaultMailDomain".
3424
3425 2006-08-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3426
3427         * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
3428         -saveAction]): reorganized methods to only have ONE return point.
3429         Invoke saveRecord: directly on the clientObject instead of
3430         saveContentString, which does the same thing anyway.
3431
3432         * SoObjects/Contacts/NSDictionary+Contact.m
3433         ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
3434         method to convert the dictionary returned with the user submission
3435         to a record in VCARD format to be stored in the database.
3436
3437 2006-08-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3438
3439         * UI/WebServerResources/MailerUI.js: when opening the context menu
3440         of the message list, select the message below the mouse cursor and
3441         deselect the other selected messages temporarily. This mimics the
3442         behaviour of Thunderbird for that matter and was already
3443         implemented for the entries of the folder tree.
3444
3445         * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
3446         -iconForMenuItem]): new method that returns the fully qualified
3447         relative URL to the icon representing the mailbox, or the default
3448         mailbox icon if needed.
3449
3450         * UI/SOGoUI/UIxComponent.m ([UIxComponent
3451         -urlForResourceFilename:filename]): automatically return an empty
3452         string whenever the filename passed as argument is nil.
3453
3454         * UI/WebServerResources/MailerUI.js: open the mailboxes with the
3455         "desc" parameter set to 1 so that they are sorted in descending
3456         order by default. Also, added "onHeaderClick()", triggered by
3457         clicking on the message list header elements.
3458
3459         * UI/MailerUI/UIxMailSortableTableHeader.m
3460         ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
3461
3462         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3463         -isSortedDescending]): defaults to "YES" when the sort order is
3464         not specified.
3465
3466 2006-07-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3467
3468         * UI/WebServerResources/MailerUI.js:
3469         - message cache: set the max num of cached messages to 20. Limit
3470         the cached message size to 30000 bytes.
3471         - ajax: when a message request is called while one is already
3472         being performed, the latter will be cancelled. Idem when
3473         retrieving the content of a mailbox.
3474         - folder tree: when a mailbox is selected because of the URL
3475         requested (initMailboxSelection), the dtree is expanded throughout
3476         the mailbox entry's parent hierarchy to ensure it is made visible
3477         when the page is being displayed. (new function: expandUpperTree).
3478         - mailbox loading: when loading a mailbox where a message was
3479         previously selected, we invoke its url with the "pageforuid"
3480         parameter correctly specified. During callback processing, we scan
3481         the table for the related row and reselect it.
3482         Also, the message area is set blank before loading any mailbox.
3483
3484         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3485         -defaultAction]): if the "pageforuid" parameter is passed in the
3486         url, take its value and invoke [self firstMessageOfPageFor:]
3487         consequently to deduce the first message to display. Otherwise,
3488         set it to "idx", otherwise set it to 0.
3489         ([UIxMailListView -firstMessageOfPageFor:]): new method
3490         that determines the first message of the page where the message
3491         passed as parameter is contained.
3492
3493         * UI/WebServerResources/UIxMailListView.js: removed this module,
3494         its code was put in MailerUI.js instead.
3495
3496 2006-07-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3497
3498         * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
3499         which returns the nodes for the parent specified in "parentMenu".
3500         Used to generate the javascript code for the folder dtree.
3501
3502         * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
3503         using that container-template are now using UIxMailMainFrame
3504         since UIxMailPanelFrame had no real interest. File removed.
3505
3506         * UI/WebServerResources/dtree.{css,js}: new files to handle
3507         javascript-generated mailbox tree. Modified from original version
3508         by integrating the previous code with the one we are using for
3509         selections and mailbox handling. Minor visual enhancements too...
3510
3511 2006-07-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3512
3513         * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
3514         returned, put it in an NSArray before returning it (fixes
3515         bug#217).
3516
3517 2006-07-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3518
3519         * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
3520         that returns a url string stripped from its "http://hostname"
3521         prefix.
3522
3523         * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
3524
3525         * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
3526
3527 2006-07-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3528
3529         * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
3530         -mailDateFormatter]): retrieve the timezone from the user settings
3531         and pass it to the returned dateFormatter. Also, the dateFormatter
3532         is kept in a static variable to avoid useless
3533         creations/destructions.
3534
3535         * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
3536         -setTimeZone:newTimeZone]): new accessor to specify the timezone.
3537
3538         * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:]) 
3539         ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
3540         s/Criteria/Text/ to handle the "criteria" form parameter.
3541
3542 2006-07-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3543
3544         * UI/WebServerResources/uix.css: enhanced the toolbar appearance
3545         to integrate better with the firefox look&feel. Added entries for
3546         the new "menu" DIV class (popup menus).
3547
3548         * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
3549         takes any chunk of text as param, detects the user email and the
3550         optional first and last names and return them in a well-formatted
3551         way. Renamed "getSelection" to "getSelectedNodes" to avoid a
3552         namespace conflict. Added "onMenuClick(node, event, menuId)" to
3553         handle popup menus through "onclick" element attributes (node =
3554         this, event = event and menuId = name of the menu DIV id to
3555         popup).
3556
3557         * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
3558         -snapshot]): add an entry for "email" into the snapshot
3559         dictionary if a "contactEmail" URL parameter was detected and if
3560         the entry for "email" is empty.
3561
3562         * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
3563         button now invokes the newContact() js function in ContactsUI.js
3564         instead of opening "new" directly. newContact() pops up a window
3565         stripped from its navigation bar.
3566
3567         * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
3568         bundle (AddressBook).
3569
3570         * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
3571         "menu" and id "addressMenu" have the header email addresses
3572         display it with the new menu code in generic.js.
3573
3574         * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
3575         replaced the body tables with a div of class "pageContent"
3576         (standardization across the page templates).
3577
3578         * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
3579         productJavaScriptURL and pageJavaScriptURL (conditionnally) since
3580         those are now inherited from UIxPageFrame.
3581
3582         * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
3583
3584         * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
3585         a "mailto" URL parameter is detected and the "to" array is empty,
3586         initialize "to" with the value of "mailto" before returning it.
3587
3588         * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
3589         -composeAction]): rewrote method in a cleaner way and with usage
3590         of the URL extensions to NSString and NSDictionary (see below).
3591         Also, if a "mailto" url parameter is detected, pass it to the
3592         redirected url.
3593
3594         * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
3595         reduce code.
3596
3597         * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
3598         returns a parameter string to add to a base URL.
3599
3600         * UI/Common/NSString+URL.m ([NSString
3601         -composeURLWithAction:parameters:andHash:useHash]): new method to
3602         compose a complete URL from an object URL with parameters and an
3603         optional '#' character.
3604
3605         * UI/Common/UIxPageFrame.h: separated interface from
3606         UIxPageFrame.m.
3607
3608 2006-07-07  Wsourdeau Sourdeau  <wsourdeau@inverse.ca>
3609
3610         * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
3611
3612         * UI/WebServerResources/generic.js: added code to manage
3613         selections within HTML containers.
3614
3615         * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
3616         added method to determine the possible URL for a product-specific
3617         javascript filename of the forme <productname>.js.
3618         ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
3619         ([UIxPageFrame -isPopup]): new method to determine whether the
3620         application navigator bar should be displayed (main page) or not
3621         (popup page).
3622
3623         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3624         -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
3625         the user through LDAP.
3626
3627 2006-07-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3628
3629         * The toolbar code from the MailerUI product was taken, renamed as
3630         "UIxToolBar" and put into UI/Common. Toolbar plists were created
3631         for the Contacts and Scheduler products and put in their respectir
3632         Toolbars/ subdirectories. Finally,
3633         UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
3634         UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
3635         and an invocation to the UIxToolbar component was put at the top
3636         of UI/Templaces/UIxPageFrame.wox.
3637
3638         * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
3639         within the templates whether a separator should be displayed.
3640
3641         * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
3642         that returns NO if the toolbar is empty.
3643
3644 2006-07-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3645
3646         * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
3647
3648         * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
3649         new toolbar objects.
3650
3651         * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
3652
3653         * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
3654         linkbanner as a DIV instead of a TABLE.
3655
3656         * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
3657         showLinkBanner]:
3658         returns 'YES' to request the display of the navigation bar between
3659         applets.
3660
3661 2006-06-15      ludovic@inverse.ca
3662
3663         * It's now possible to set the default
3664           domain using for email using the
3665           SOGoDefaultMailDomain preference key.
3666
3667 2006-06-15      ludovic@inverse.ca
3668         
3669         * Initial import of SOGo from trunk.