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