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