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