]> err.no Git - scalable-opengroupware.org/blob - ChangeLog
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1013 d1b88da0-ebda-0310...
[scalable-opengroupware.org] / ChangeLog
1 2007-01-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2
3         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
4         -defaultAction]): invoke "flushMailCaches" on [self clientObject]
5         so that the mailbox cache is refreshed everytime the user presses
6         on "get mail". I doubt a mailbox cache really is useful in general
7         anyway.
8
9 2007-01-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10
11         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
12         -userInContext:]): if the lookup is on "freebusy.ifb" and the
13         username is "anonymous" the user is automatically set to
14         "freebusy".
15
16 2007-01-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
17
18         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
19         -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
20         user with password "freebusy".
21
22         * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
23         -contentAsString]): the default timerange is now 14 days before
24         currentday and 1 month after.
25
26 2007-01-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
27
28         * SoObjects/Appointments/SOGoAppointmentFolder.m
29         ([SOGoAppointmentFolder
30         -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
31         escape the record string in a way suitable with XML encoding.
32
33 2007-01-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
34
35         * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
36         calendar view would not be updated properly.
37
38 2007-01-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
39
40         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
41         -newStartDate]): fix the handling of the component start date
42         depending on the "hm" and the "day" parameters.
43
44         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
45         -roleOfUser:uidinContext:context]): set role of current user to
46         "Assistant" if the object that is accessed is "freebusy.ifb".
47
48         * SoObjects/Appointments/SOGoAppointmentFolder.m
49         ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
50         moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
51         ([SOGoAppointmentFolder
52         -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
53         lookupCalendarFolderForUID: method, which doesn't do security
54         checks.
55
56 2007-01-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
57
58         * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
59         accessor that returns the comma-separated list of users with role
60         "Assistant".
61         ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
62         ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
63         "checkedUsers". Instead, each user is either classified in the
64         list of assistants or the list of delegates.
65
66 2006-12-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
67
68         * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
69         -composeAction]): method imported from removed container modules.
70         ([UIxMailMainFrame -mailFolderName]): method imported from removed
71         container modules.
72
73         * UI/MailerUI/UIxMailPopupView.m: a new special popup component
74         for wrapping UIxMailView with the "popupview" action.
75
76         * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
77         since its the component that displays the same splash screen than
78         the one in Thunderbird/Icedove.
79
80         * UI/MailerUI/UIxMailAccountViewContainer.[hm],
81         UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
82         UI/MailerUI/UIxMailListViewContainer.[hm],
83         UI/MailerUI/UIxMailViewContainer.[hm]: removed
84
85 2006-12-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
86
87         * UI/WebServerResources/HTMLElement.js: replaced the functional
88         selectNode() and deselectNode() functions with select() and
89         deselect() methods of HTMLElement.
90
91         * UI/WebServerResources/ContactsUI.js: cleanup, most of the
92         events are initialized from here now instead of in the HTML code.
93
94         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
95         -checkRightsAction]): new method similar to the one with the same
96         name in UIxCalMainView.m.
97
98         * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
99         code to handle the publishing of freebusy information.
100
101 2006-12-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
102
103         * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
104         -checkRightsAction]): new action method that returns a
105         comma-separated list of boolean values matching the right of the
106         current user to "view" (as a permission) each foreign calendar
107         stored in his preferences.
108
109         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
110         new method that sets a customOwner, which can be returned with
111         ownerInContext it set.
112
113         * SoObjects/Appointments/SOGoAppointmentFolder.m
114         ([SOGoAppointmentFolder
115         -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
116
117 2006-12-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
118
119         * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
120         below, but for the Contacts and Calendar collections.
121
122         * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
123         new acl facilities method from sope-gdl/GCSFolder.m.
124
125         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
126         -roleOfUser:uidinContext:context]): new method that returns
127         SOGoRole_Assistant when the user is an assistant or a delegate on
128         the "personal" ab object. This is so that setting roles on the
129         SOGoContactFolders object is not required.
130
131 2006-12-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
132
133         * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
134
135         * UI/Contacts/UIxContactsAclsSelection.m: new component specific
136         to the handling of the user selection for the acls.
137
138         * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
139         values from SoPermissions with ones specific to SOGo.
140
141         * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
142         handles the storage for the acls.
143
144         * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
145         class for SOGoAppointmentObject and SOGoTaskObject.
146
147         * UI/Common/UIxAclEditor.[hm]: new component that provides a
148         general editor for folder acls.
149
150         * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
151         renamed.
152         ([NSString -davMethodToObjC]): method that returns the method name 
153         for a DAV property implementation.
154
155         * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
156         NSArray.
157         ([NSArray -stringsWithFormat:format]): new method that returns
158         formatted occurences of the strings stored in the array.
159
160         * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
161         +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
162         subclass module of SoWebDAVValue that supports collections of
163         properties of the same type.
164
165 2006-11-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
166
167         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
168         -lookupFolder:ofClassNamed:inContext:]): added the ability to
169         configure the name of the SOGoDraftFolders with the ud var
170         "SOGoDraftsFolderName".
171
172 2006-11-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
173
174         * SoObjects/SOGo/SOGoObject.m ([SOGoObject
175         -userTimeZone:username]): new method that returns the timezone for
176         the specified user depending on his preferences and the server
177         defaults
178
179         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
180         -stringForData:partInfo:]): take the encoding into account and
181         translate the text to "normal" before processing the charset data.
182
183 2006-11-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
184
185         * UI/WebServerResources/generic.js: the progress indicator is on
186         when loading the page so we turn it off, and we turn it back on
187         whenever we switch to another module...
188
189         * UI/WebServerResources/SchedulerUI.js: make sure the day view
190         synchronization mechanism works everywhere.
191
192         * UI/WebServerResources/generic.js: the log window is not only
193         visible when UIxDebugEnabled is set.
194
195         * UI/WebServerResources/SchedulerUI.js: the month overview's day
196         cells are now initialized with the DOM event interface methods
197         instead of with html attributes.
198
199         * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
200         headers (should be made configurable at some point)...
201
202         * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
203         "not null" constraint on startdate, enddate, isopaque,
204         participants and partmails.
205
206 2006-11-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
207
208         * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
209         -hoursToDisplay]): prevent a crash by retaining the
210         "hoursToDisplay" array after it's created.
211         ([UIxCalDayTable -clickableHourCellClass]): new method for the new
212         clickable hours DIV.
213
214         * UI/WebServerResources/SchedulerUI.js: made the event
215         participation status modification asynchronous, which also fixes a
216         bug where the window would sometimes close before the accept or
217         decline action was completed. Also, adapted the event handling
218         related to the days or weeks view with the new DIV-based layout.
219
220         * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
221
222         * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
223         DIV-based presentation of the days and weeks.
224
225         * SoObjects/Appointments/SOGoTaskObject.m: same as below...
226
227         * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
228         might return an exception so we have to handle it if we don't
229         wanna crash...
230
231 2006-11-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
232
233         * UI/WebServerResources/SchedulerUI.js: updated the list
234         initialization code to use the new event management scheme, adding
235         what was missing to be able to delete events and tasks again.
236
237         * UI/WebServerResources/MailerUI.js: added code to activate the
238         "Get mails" button. Fixed a bug which prevented messages to be
239         deleted.
240
241         * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
242         navigation and focus handling of INPUTs.
243
244 2006-11-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
245
246         * UI/WebServerResources/MailerUI.js: added code to handle the
247         possible drag and drop events to manager in the mail module.
248         Moving messages, opening parent folders, ...
249
250         * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
251         the drag and drop manager as well as the interface to HTMLElement
252         to trigger drag and drop events.
253
254         * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
255         action to move the current message to the mailbox named after the
256         value of parameter "tofolder".
257
258         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
259         -moveToFolderNamed:folderNameinContext:]): new method base on
260         -trashInContext:.
261
262 2006-11-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
263
264         * UI/WebServerResources/generic.js: added and activated many
265         "load" handlers to configure generic widgets used across the
266         modules. More events are now handled in a DOM-fashion way instead
267         of by setting the relative attributes in the templates.
268
269         * UI/Templates/UIxSortableTableHeader.wox: all the events are
270         declared from the javascript DOM onload handlers.
271
272         * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
273         library.
274
275         * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
276         declared from the javascript DOM onload handlers.
277
278         * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
279         we want everything to be separated from each other, as much as
280         possible.
281
282         * UI/WebServerResources/SOGoDragHandles.js: new module containing
283         the "SOGoDragHandlesInterface", implementing methods that can be
284         attributed to DIV so that they can be used as drag handles.
285
286         * SoObjects/Mailer/SOGoDraftObject.m ([NSString
287         -asQPSubjectString]): initialize the tmp strings with '0' to make
288         sure they don't contain garbage.
289
290 2006-11-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
291
292         * UI/WebServerResources/MailerUI.js: register the messageList
293         table as a dragging source and the leaf of the navigation tree as
294         dnd destinations to the DNDManager.
295
296         * UI/WebServerResources/generic.js: initialize tabs from the
297         "unload" event listener that is added programmatically instead of
298         from the template... Also, added the new DNDManager object.
299
300         * UI/WebServerResources/HTMLTableElement.js: added code to
301         simulate XUL drag n drop events. This code will possibly be moved
302         to HTMLElement.js instead later...
303
304         * SoObjects/Contacts/SOGoContactLDAPFolder.m
305         ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
306         below.
307
308         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
309         -_qualifierForFilter:filter]): only search records which starts
310         with the specified pattern.
311
312 2006-11-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
313
314         * SoObjects/Mailer/SOGoDraftObject.m ([NSString
315         -asQPSubjectString]): new method that returns the special QP
316         string with its qp declaration for email subjects.
317         ([SOGoDraftObject -bodyPartForText]) 
318         ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
319         double-encode data in UTF-8.
320
321         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
322         -newStartDate]): new method to determine the start date depending
323         on the URL parameters, the current day and the current time.
324         ([UIxComponentEditor -toolbar]): new method to determine the
325         filename of the toolbar that should be drawn depending on the
326         ownership and the list of attendees of the task/event wrt to the
327         current user...
328
329         * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
330         -setDayStartHour:aStartHour]): adjust the minutes to the next
331         quarter of hour, if not already set to a quarter.
332
333         * UI/WebServerResources/UIxAppointmentEditor.js,
334         UI/WebServerResources/UIxTaskEditor.js: added code to manage start
335         date change.
336
337 2006-11-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
338
339         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
340         -loadValuesFromComponent:component]): handles access class
341         (privacy) and status.
342
343         * UI/Contacts/UIxContactsListViewContainer.m
344         ([UIxContactsListViewContainer -additionalFolders]): return nil if
345         [self additionalAddressBooks] returns an empty string.
346
347 2006-11-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
348
349         * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
350         rangesOf7Days]): enhanced and debugged algorithm to feed the array
351         with slices where the first day is still in the requested month.
352
353         * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
354         non-popup pages.
355
356         * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
357         of events in the day boxes of the calendar's monthly view.
358
359         * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
360         -davContentType]): declare "text/calendar".
361
362         * SoObjects/Appointments/SOGoAppointmentObject.m
363         ([SOGoAppointmentObject -davContentType]): declare
364         "text/calendar".
365
366         * SoObjects/Appointments/SOGoAppointmentFolder.m
367         ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
368         HTTP methods are handled by SOPE and requires nil to be returned,
369         this method now invokes the new
370         "requestNamedIsHandledLater:inContext:" method to check that.
371         ([SOGoAppointmentFolder
372         -requestNamedIsHandledLater:nameinContext:context]): new methods
373         that returns "YES" only for the "OPTIONS" http method (for now...).
374         ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
375         overloaded method to append the "access-control" and
376         "calendar-access" DAV abilities to the initial declaration.
377
378         * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
379         imitate the look of Sunbird/Lightning's monthly view.
380
381         * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
382         UIxCalMonthViewOld.[hm].
383
384 2006-11-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
385
386         * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
387         ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
388         method.
389         ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
390         returns an image name based on the participation status of the
391         current attendee.
392
393         * UI/WebServerResources/SchedulerUI.js: same strip down as for
394         generic.js below.
395
396         * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks]) 
397         ([UIxContactsListViewContainer -additionalFolders]) 
398         ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder]) 
399         ([UIxContactsListViewContainer -currentAdditionalFolder]): new
400         methods to handle the external addressbooks a user has subscribed
401         too, by retriving them from his preferences.
402
403         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
404         -updateAdditionalAddressBooksAction]): new method that updates the
405         user settings with the list of addressbook he has subscribed to.
406
407         * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
408         module for the address book selector.
409
410         * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
411         a toolbar with two buttons ("add" and "remove") to manage the
412         additional addressbooks a user might subscribe to.
413
414         * UI/WebServerResources/ContactsUI.js: added code to handle
415         "external addressbooks" from the Javascript point-of-view, by
416         extending existing methods and adding code for the "add ab" and
417         "remove ab" buttons.
418
419         * UI/WebServerResources/generic.js: moved extensions methods to
420         DOM elements to separate files for better clarity.
421
422         * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
423         new method that returns "pageContent" as class, but also "popup"
424         for the DIV where the page content lies, so that we can manipulate
425         the content of popup's with CSS identifiers.
426
427 2006-10-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
428
429         * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
430         -displayStyle]): new method that returns a string containing the
431         css style relative to the current appointment cell. This code is
432         currently inactive but might be reused later.
433
434         * UI/WebServerResources/SchedulerUI.js: added code to handle the
435         display of the selected day (the day pointed by the mouse, or the
436         current day when changing the view).
437
438         * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
439         -dayCellClasses]): new method that returns a string containing the
440         css classes applicable to the current cell, depending on the
441         position of the day in the week, the day of today and the
442         requested day.
443
444         * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
445         -currentContactAptBorder]): new method that returns the
446         appropriate border color for the specified user.
447
448         * SoObjects/Appointments/SOGoAppointmentObject.m
449         ([SOGoAppointmentObject
450         -saveContentString:contentStringbaseVersion:baseVersion]):
451         overloaded method that parse new events and detects if they have
452         an organizer or not. If they are new and have no organizer set
453         (Sunbird/Lightning...), the owner of the event is set as
454         organizer.
455
456         * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
457         category that provides facility methods and interfaces to the
458         AgenorUserManager.
459
460         * SoObjects/Contacts/product.plist: give full access to ANY
461         authenticated user, not just the owner (to every objects...).
462
463 2006-10-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
464
465         * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
466         every replica widgets are declared as such to their master
467         counterpart. Take the days into account when displaying the time
468         range taken by the appointment.
469
470         * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
471         -getICalPersonsFromValue:selectorValue]): method taken from
472         UIxFreeBusyUserSelector, that is shared both by
473         UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
474
475         * SoObjects/Appointments/SOGoAppointmentFolder.m
476         ([SOGoAppointmentFolder
477         -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.
478
479         * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
480         derived and taken as a subset of UIxFreeBusyUserSelector that
481         implements the table part of the FreeBusy view. Most of the
482         methods of UIxFreeBusyUserSelector relative to that table were
483         moved into UIxFreeBusyUserSelectorTable, which can also be used as
484         a standalone view for AJAX operations.
485
486 2006-10-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
487
488         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
489         -vCard]): change reverted.
490
491         * UI/Contacts/UIxContactEditor.m: check whether the client contact
492         folder has selector "globallyUniqueObjectId" before calling that
493         method.
494
495         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
496         -vCard]): the "setVClass" NGVCard method really is "setClass"
497         instead.
498
499         * SoObjects/Contacts/SOGoContactLDAPFolder.m
500         ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
501         request the "streetAddress" instead of the "streetaddress".
502         ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
503         mails that *contain*, and not just *start with* the search
504         pattern.
505
506         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
507         -vCard]): mark address returned from LDAP as the work address.
508
509         * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
510         span covered with the anchor, not only the textual information
511         within.
512
513         * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
514         argument (event or task) to newEvent in the appointmentListMenu.
515         Make the appointmentsListView display the appointmentsListMenu.
516
517         * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
518         12 to 50 before displaying "...".
519         ([SOGoAptFormatter -fullDetailsForApt::]): display location only
520         if its length > 0, whether location itself is nil or not...
521         ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
522         of which the length > 0.
523
524 2006-10-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
525
526         * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
527         french and ISO dates.
528
529         * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
530         from UIxContactSelector to handle contact lists (current and
531         additional contacts).
532
533         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
534         -_freeBusyAsText]): added handling of an "additional"-named query
535         parameter that describe the number of additional days after
536         enddate that should be returned.
537
538         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
539         -_responseForResults:results]): give priority to results with
540         "c_uid" fields. If none returned, use the first contact received.
541
542         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
543         -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
544         2 and "CANCELLED" to 0.
545
546 2006-10-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
547
548         * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
549         of start and end dates to short string dates.
550
551         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
552         -readFreeBusyAction]): new method that returns an array of numbers
553         corresponding to the state in the freebusy of each "quarter of an
554         hour" between the "sday" and "eday" date parameters passed in the
555         url. This permits to handle the display of the freebusy with Ajax
556         mechanisms.
557         ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
558         since the free busy displays 2 days ahead.
559
560         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
561         -contactSearchAction]): new action that returns the uid and the
562         username + email of the user whose name contain the value of the
563         "search" url parameter.
564
565         * SoObjects/Appointments/SOGoAppointmentFolder.m
566         ([SOGoAppointmentFolder
567         -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
568         useful for the computing of the status of the freebusy.
569
570         * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
571         -init]): new component that incarnates a user selector for events
572         inspired by the new one found in Thunderbird Lightning.
573
574 2006-10-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
575
576         * UI/WebServerResources/generic.js: added code to enable or
577         disable anchor visually (following our internal algorithm).
578
579         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
580         added new "url" ivar with its classic accessors.
581         ([UIxComponentEditor -urlButtonClasses]): new method that returns
582         the class strings for the url button on the appointment/task
583         editor (depending on the validity of the url).
584
585         * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
586         UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
587         the template to match the Lightning's new task/appointment editor.
588
589         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
590
591         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
592
593 2006-10-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
594
595         * SoObjects/Contacts/SOGoContactLDAPFolder.m
596         ([SOGoContactLDAPFolder
597         -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
598
599         * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
600         iCalEntityObject instances instead of just iCalEvent's.
601
602         * SoObjects/Appointments/SOGoAppointmentFolder.m
603         ([SOGoAppointmentFolder
604         -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
605
606         * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
607         bad way of handling ownership that way.
608
609         * SoObjects/Contacts/SOGoContactLDAPFolder.m
610         ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
611         on "cn", just like Mozilla.
612
613 2006-10-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
614
615         * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
616         "to" should be retained, otherwise it will be autoreleased and a
617         crash will occur.
618
619         * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
620         -writeAction]): updated method to fetch the card before initing
621         the snapshot.
622
623         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
624         -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
625         of NSNotFound.
626
627         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
628         -iCalStringTemplate]): start and due date are now optional.
629
630         * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
631         -setDayStartHour:aStartHour]):  added a new "isDisabled" ivar with
632         appropriate accessors to be settable through the templates.
633
634         * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
635         new "isDisabled" ivar with appropriate accessors to be
636         settable through the templates.
637
638         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
639         -availableCalendars]): new method that list the calendars to which
640         the user has subscribed.
641         ([UIxComponentEditor -componentOwner]): returns the owner of the
642         editted object.
643
644         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
645         -extractQuickFieldsFromTodo:_task]): set the start and enddate of
646         quickentries to null whenever each or all of them are null, by
647         providing an impossible timestamp from with NSNotFound as value.
648
649 2006-10-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
650
651         * UI/WebServerResources/UIxMailEditor.js: update the algorithm
652         that handles the creation of new fields with the new APIs and the
653         new node structure on the page.
654
655         * UI/Scheduler/UIxAppointmentEditor.m,
656         UI/Scheduler/UIxTaskEditor.m:
657         refactored to user UIxComponentEditor as parent class.
658
659         * UI/Scheduler/UIxComponentEditor.[hm]: new class module
660         containing the methods common to the UIxTaskEditor and the
661         UIxAppointmentEditor.
662
663 2006-10-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
664
665         * SoObjects/Appointments/SOGoAppointmentFolder.m
666         ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
667         the handling of time-ranges.
668
669         * UI/WebServerResources/ContactsUI.js: specify a notification type as
670         parameters when onConfirmContactSelection in invoked.
671
672         * UI/WebServerResources/generic.js: specify a notification type as
673         parameters when onContactRemove in invoked.
674
675         * UI/WebServerResources/SchedulerUI.js: when the user deselects
676         all calendars, select his entry.
677
678 2006-10-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
679
680         * UI/WebServerResources/SchedulerUI.js: edit and delete events
681         with their owner-relative urls. Generate a correct entry in the
682         css color table when a user is added to the calendars list. Put
683         the same color next to the user id.
684
685         * UI/WebServerResources/generic.js: implemented some new helper
686         methods.
687
688         * SoObjects/Appointments/SOGoAppointmentFolder.m
689         ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
690         entries if their owner is not the current user.
691
692         * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
693         -displayClasses]): return the correct class for the current event
694         representation depending on its owner.
695
696         * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
697         and associate a color for each user login depending on its
698         position in the list.
699
700         * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
701         -currentRowCSSClass]): return the correct class for the current
702         row depending on the owner of the event.
703
704         * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
705         -setColors:colors]): new method to associate a color table with
706         each user in the list.
707
708         * SoObjects/Appointments/SOGoAppointmentFolder.m
709         ([SOGoAppointmentFolder
710         -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
711
712         * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
713         NSObject to associate an instance with a user.
714
715 2006-10-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
716
717         * UI/WebServerResources/SchedulerUI.js: added handling of multiple
718         calendars.
719
720         * UI/WebServerResources/ContactsUI.js: added handling of
721         notification of changes to contact selectors.
722
723         * UI/WebServerResources/generic.js: added handling of notification
724         of changes to contact selectors.
725
726         * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
727         -updateCalendarsAction]): proxy method to update the user
728         preference table with the new selected calendar uids.
729
730         * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
731         -calendarsContactsAction]): new method.
732
733         * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes]) 
734         ([UIxContactSelector -setHasCheckBoxes:aBool]) 
735         ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
736         permit the drawing of checkboxes instead of card icons.
737
738         * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
739         wrap a selector the the "Calendars" tab.
740
741         * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
742         new user calendar selector.
743
744 2006-10-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
745
746         * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
747         may cover hour 0 to hour 23.
748
749         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
750         -iCalStringFromQueryParameter:format:]): dates explicitly set to
751         utc tz.
752
753         * UI/WebServerResources/SchedulerUI.js: manage both lists of
754         objects wrt to the toolbar actions.
755
756         * UI/WebServerResources/generic.js: added code to the "String"
757         class to decode number-encoded char entities.
758
759         * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
760         -batchDeleteAction]): new method to delete selected entries in the
761         lists.
762
763         * SoObjects/Appointments/SOGoAppointmentFolder.m
764         ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
765         that delete identified entries in batch.
766
767         * UI/SOGoUI/UIxComponent.m ([UIxComponent
768         -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
769
770         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
771         UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
772         -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
773         -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
774         -saveAction]):
775         return a UIxJSClose component if everything went fine.
776
777         * UI/Scheduler/UIxTaskEditor.h: interface extracted from
778         UIxTaskEditor.m.
779
780         * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
781         UIxAppointmentEditor.m.
782
783         * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
784         a very light page with javascript code to close a window, by
785         calling a method on the opener if specified. This component is
786         designed to work as a response to form postings.
787
788 2006-10-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
789
790         * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
791         SOGoAppointmentObject adapted for the handling of tasks.
792
793         * SoObjects/Appointments/NSArray+Appointments.[hm]: category
794         extracted from SOGoAppointmentObject.
795
796         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
797         -saveUrl]): returns the url needed to POST the new form to.
798         redirect the user to <aptid>/editAsAppointment instead of /edit,
799         so that SOGoAppointmentFolder can return the correct object type.
800
801         * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
802         -compareAptsAscending:_other]): accept empty start or end dates.
803
804         * SoObjects/Appointments/SOGoAppointmentFolder.m
805         ([SOGoAppointmentFolder
806         -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.
807         ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
808         components of type "vtodo" as well as "vevent".
809         ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
810         url specified ends with AsTask or AsAppointment, returns the
811         an object of the appropriate class, otherwise deduce it from its
812         content if the HTTP method is "PUT", otherwise read its type from
813         the quick table.
814
815         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
816         -extractQuickFieldsFromTodo:_task]): extract quick fields from
817         tasks.
818
819         * UI/Scheduler/UIxCalView.m ([UIxCalView
820         -fetchCoreAppointmentsInfos]): replacement methods for
821         fetchCoreInfos but by retrieving object with component "vevent".
822         ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
823         components.
824
825         * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
826         UIxCalAptListView adapted for the handling of tasks.
827
828         * UI/Scheduler/UIxTaskProposal.[hm],
829         UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
830         clones of the UIxAppointment* classes for the handling of tasks.
831
832         * UI/WebServerResources/UIxTaskEditor.js: clone of
833         UIxAppointmentEditor adapted for the handling of tasks.
834
835         * UI/WebServerResources/SchedulerUI.js: added support for tasks.
836         Scroll the daily view to the appropriate hour when an appointment
837         is selected in the appointments list.
838
839 2006-10-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
840
841         * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
842         -setDayStartHour:aStartHour]): specifies the user timezone on the
843         given date.
844
845         * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
846         as timezone.
847
848         * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate]) 
849         ([NSCalendarDate -driftedDate]): methods made useless by a better
850         comprehension of the NSTimeZone API...
851
852 2006-10-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
853
854         * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
855         new methods from the NSCalendarDate methods.
856
857         * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
858         extending UI/Scheduler/NSCalendarDate+Scheduler.m.
859         ([NSCalendarDate
860         +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).
861         ([NSCalendarDate -adjustedDate]): this method returns another
862         instance set to the correct hour after the original date was set
863         from a non-GMT timezone. This date can be used for storage.
864         ([NSCalendarDate -driftedDate]): this method does exactly the
865         opposite of -adjutedDate, that is, it enables the method
866         hourOfDay, minuteOfHour etc... to return the values according to
867         the original date's timezone. This date CANNOT be used for storage.
868
869         * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
870         -shortDateString]): new method that will return a "short date
871         string" (yyyymmdd) from a calendar date object.
872
873         * UI/SOGoUI/UIxComponent.m ([UIxComponent
874         -_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.
875
876         * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
877         to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
878
879 2006-10-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
880
881         * UI/WebServerResources/SchedulerUI.js: added code to scroll the
882         view of the day at the height of hour 8:00.
883
884         * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
885         ([UIxCalView -dayEndHour]): returns 24.
886
887         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction]) 
888         ([UIxContactFoldersView -newAction]): invoke
889         _selectActionForApplication: on self with the proper attribute too.
890
891         * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
892         we now use the action mechanism in UIxContactsListView to keep the
893         same view for the contact selectors and the regular contact view.
894
895         * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
896         UIxContactsListViewContainerBase.[hm]
897
898         * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
899
900         * UI/WebServerResources/generic.js: generalized emailstring
901         handling functions. Generalized address book access functions.
902
903         * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
904         -isPopup]): return YES if the "popup" query parameter is set.
905
906         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
907         -defaultAction]): keep the url parameters when redirecting.
908         ([UIxContactFoldersView -selectForSchedulerAction]) 
909         ([UIxContactFoldersView -selectForMailerAction]): new action
910         methods for the /scheduler-contacts and /mailer-contacts invocations.
911
912         * SoObjects/SOGo/SOGoObject.m: compose the action url using the
913         newly available NSString+URL category.
914
915         * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
916         -asURLParameters]): handle dictionary entries which could be
917         instances of NSArray rather than NSString.
918
919         * SoObjects/SOGo/NSString+URL.m ([NSString
920         -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
921         ([NSString -urlWithoutParameters]): new method that returns the
922         url without its parameters.
923
924         * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
925
926         * SoObjects/SOGo/NSDictionary+URL.[hm],
927         UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
928
929         * UI/WebServerResources/UIxMailEditor.js: add support for
930         additions of different types (to, cc, bcc) of recipients from the
931         address book.
932
933         * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
934         "<?xml..." header.
935
936         * UI/Contacts/UIxContactsMailerSelection.m,
937         UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
938         UI/Contacts/UIxContactsSelectionView.m to provide a different set
939         of widgets depending on the application invoking the contact list.
940
941 2006-09-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
942
943         * UI/WebServerResources/ContactsUI.js: hide the current contact
944         whenever the user changes of contact folder.
945
946         * UI/WebServerResources/UIxContactEditor.js: the contact UID is
947         now provided by the template when loading the page.
948
949         * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
950         -iCalPersonWithUid:uid]): new method taken from removed module
951         'iCalPerson+UIx';
952
953 2006-09-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
954
955         * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
956         -categoriesAsString]): same as below.
957
958         * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
959         vcalendar API's iCalEvent instead of the removed SOGoAppointment.
960
961         * SoObjects/Appointments/SOGoAppointmentObject.m
962         ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
963         ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
964         helper method.
965
966         * SoObjects/Appointments/SOGoAppointmentFolder.m
967         ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
968         hackish test to detect whether the request concernes VEVENT's or
969         anything else. Return events only in the former case.
970         ([SOGoAppointmentFolder
971         -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
972         c_name quickfield so that the calendar list can identify the
973         appointments with their complete "filename".
974
975         * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
976         groupsOfClass:fromSource: to parse the given vcalendar.
977
978         * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
979
980         * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
981
982         * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
983         obsolete class.
984
985         * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
986
987 2006-09-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
988
989         * SoObjects/Appointments/SOGoAppointmentFolder.m
990         ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
991         sensitive to the CalDAV method names.
992         ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
993         "calendar-query" CalDAV method name.
994
995         * UI/WebServerResources/ContactsUI.js: removed a lot of useless
996         code coming originally from MailerUI.js.
997
998         * UI/WebServerResources/UIxContactEditor.js: imitate the
999         Thunderbird address book by completing the display name with the
1000         content of the first and last name fields, until the display name
1001         is modified manually.
1002
1003         * UI/WebServerResources/generic.js: added a "trim" method to the
1004         String class.
1005
1006         * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
1007         -displayName]): new method that returns the display name from "cn"
1008         or from the "displayName" key if found.
1009
1010         * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
1011         -initSnapshot]): check if "[card n]" returns anything to avoid a
1012         crash.
1013
1014         * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
1015         that returns an unparsed doctype definition for the pages.
1016
1017         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
1018         -vCard]): set the card's fn to attribute "displayName" if found
1019         before "cn".
1020
1021 2006-09-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1022
1023         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
1024         -vCard]): handle the "streetAddress" and "l" fields.
1025
1026         * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
1027         header fields by converting the tables to DIVs and SPANs.
1028
1029         * UI/WebServerResources/generic.css: attempted unification of font
1030         families and size across all the elements. changed the
1031         logConsole's "position" from "fixed" to "absolute" to avoid
1032         performance issues.
1033
1034 2006-09-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1035
1036         * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
1037         empty the contact view when the current contact is being deleted.
1038
1039         * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
1040         parse the email field and provide the address full name if found
1041         as the "contactFN" parameter.
1042
1043         * UI/WebServerResources/generic.js (openMailTo): do not give a
1044         name to the opened window so that serveral ones can be opened at
1045         the same time.
1046
1047         * UI/MailPartViewers/UIxMailPartTextViewer.m
1048         ([UIxMailPartTextViewer -flatContentAsString]): override method by
1049         replacing carriage returns with "<br />" in the result string from
1050         super's implementation.
1051
1052         * UI/Contacts/UIxContactView.m ([UIxContactView
1053         -_urlOfType:aType]): don't manage non-mailto urls through
1054         javascript, let the user decide what's best for him.
1055
1056         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1057         -newAction]): transfer all the query parameters by using the
1058         "asURLParameters"'s result string from [self queryParameters].
1059
1060         * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
1061         -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
1062         query parameters and put their values (if any) into the snapshot.
1063
1064         * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
1065         carriage-returns to "<br />".
1066         ([UIxContactView -workCompany]): explicitly initialize company to
1067         nil if org is nil or empty.
1068
1069         * UI/WebServerResources/UIxContactEditor.js: updated validation
1070         code after we added and renamed some fields.
1071
1072         * UI/WebServerResources/ContactsUI.js: added code to cache contact
1073         cards and to handle card updates.
1074
1075 2006-09-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1076
1077         * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
1078         test the length of the returned string since they will never be
1079         nil.
1080
1081         * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
1082         return self if the process went successful, returns an exception
1083         otherwise (and only otherwise...).
1084
1085         * OGoContentStore/OCSContactFieldExtractor.m
1086         ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
1087         adapted method to the new VCard api. Since the cards are stored in
1088         vcard format, we no longer deal with a dictionary but with a
1089         NGVCard object...
1090
1091 2006-09-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1092
1093         * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
1094         return a string with a "mailto" url.
1095         ([UIxContactView -_urlOfType:aType]): generic method to return a
1096         url string with a html anchor pointing to it.
1097
1098         * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
1099         since subclass "UIxContactEditor" did nothing. Implemented code to
1100         display and modify the values parsed from the vcards, displayed in
1101         a way similar to the Thunderbird addressbook.
1102
1103         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
1104         -save]): new dummy method.
1105
1106         * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
1107         -save]): made method void.
1108
1109 2006-09-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1110
1111         * UI/Contacts/UIxContactView.m: added many wrapper methods to
1112         display blocks of data Ã  la Thunderbird Addressbook. If data is
1113         available, those wrappers (around the NGVCard methods) will
1114         enclose the results in a proper HTML output with the correct label
1115         (if present), otherwise it will return an empty string.
1116         ([UIxContactView -vcardAction]): new action to return the contact
1117         as text/vcard (for exporting).
1118
1119         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
1120         +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
1121
1122         * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
1123         -vCard]): create a new NGVCard instance when no data is available
1124         and retain it.
1125         ([SOGoContactGCSEntry -save]): save the vCard using the new
1126         "versitString" API method/message.
1127
1128         * UI/Contacts/UIxContactView.h: separated interface from
1129         UIxContactView.m.
1130
1131         * UI/WebServerResources/ContactsUI.js: add-ed code to download card
1132         views and display them beneath the list.
1133
1134 2006-09-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1135
1136         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
1137         the timezone even when it's the server timezone.
1138
1139         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
1140         -privateContacts:inContext:]): no long configure the calendar
1141         object with the user's timezone since it's now accessible
1142         application-wide throught the SOGoObject methods.
1143
1144         * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
1145         method. Removed the "backendTimeZone" method.
1146
1147         * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
1148         instead of SoComponent.
1149
1150         * SoObjects/Appointments/SOGoAppointmentObject.m: 
1151         ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
1152         [self serverTimeZone] instead of "EST" (which was removed).
1153
1154         * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
1155         "timeZone" ivar and its accessors.
1156
1157         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
1158         centralized method returing the timezone configured in the
1159         userdefaults db or "Canada/Eastern" if missing.
1160         ([SOGoObject -userTimeZone]): new centralized method returing the
1161         timezone of the current user or the server timezone if missing
1162         from the user configuration table.
1163
1164 2006-09-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1165
1166         * UI/WebServerResources/SchedulerUI.js: implemented caching of
1167         date selectors.
1168
1169         * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
1170         return a path based on the object's context instead of the first
1171         level in SOGo's object hierarchy...
1172
1173 2006-09-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1174
1175         * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
1176         be clicked.
1177
1178         * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
1179         timezone ([self viewTimeZone]) to the WEMonthOverview component to
1180         avoid a confusion with the days.
1181
1182         * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
1183         can now be clicked.
1184
1185         * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
1186         imitate Sunbird's synchronization between the 3 visible views.
1187
1188         * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
1189         sure the numbers in dateString are formatted so as to take 4 chars
1190         for the year and 2 for the day and the month, otherwise
1191         NSCalendarDate will return a nil date.
1192         ([UIxComponent -applicationPath]): return a path based on the
1193         object's context instead of the second level in SOGo's object
1194         hierarchy...
1195
1196 2006-09-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1197
1198         * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
1199         user's timezone abbreviation to the date string passed as parameter to
1200         NSCalendarDate to generate an accurate date instance. Do the same
1201         when no date is specified and today is chosen.
1202
1203         * UI/WebServerResources/UIxAppointmentEditor.js: convert the
1204         form's time values to integers before comparing them.
1205
1206         * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime]) 
1207         ([UIxCalAptListView -currentEndTime]): initialize the resulting
1208         dates timezone with [self viewTimeZone].
1209
1210         * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
1211         "viewTimeZone" ivar destined to hold an instance of the user's
1212         timezone in memory.
1213         ([UIxComponent -viewTimeZone]): take the timezone from the user's
1214         prefs.
1215
1216 2006-08-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1217
1218         * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
1219         rearranged the layout.
1220
1221         * UI/WebServerResources/UIxAppointmentEditor.js: added code to
1222         manage showing and hiding appointment details.
1223
1224         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
1225         -privateContacts:inContext:]): init the SOGoAppointmentFolder's
1226         timezone by taking the current user's timezone setting.
1227
1228         * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
1229
1230         * SoObjects/Appointments/SOGoAppointmentObject.m
1231         ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
1232         set default timezone to EST, although this code should be
1233         rewritten to handle a system and a user default value.
1234
1235         * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
1236         -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
1237         take the values from the hour and minute INPUTs when data is
1238         POSTed since we no longer use the UIxTimeSelector component.
1239         ([UIxTimeDateControl -selectableHours]) 
1240         ([UIxTimeDateControl -selectableMinutes]): new methods used by the
1241         template SELECTs to display reasonable and acceptable values
1242         instead of all the possibilities.
1243
1244         * UI/WebServerResources/generic.js: adapted code for the new
1245         implementation of the UIxContactSelector component (added a
1246         "remove" button, removed the previous INPUT and replaced them with
1247         links of class "button").
1248
1249         * UI/Scheduler/UIxTimeDateControl.h: separated interface from
1250         UIxTimeDateControl.m.
1251
1252         * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay]) 
1253         ([UIxCalDayTable -currentAppointmentHour]): new methods that
1254         returns correctly formatted values used as attributes for JS code.
1255
1256         * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
1257         -initialContactsAsString]): renamed implementation of
1258         initialParticipants.
1259         ([UIxContactSelector -currentContactId]) 
1260         ([UIxContactSelector -currentContactName]): new methods used when
1261         listing the initial contacts in the widget. Currently, both return
1262         the person's cn but the latter should ultimately return a user
1263         fullname.
1264
1265         * UI/Contacts/UIxContactSelector.h: separated interface from
1266         UIxContactSelector.m.
1267
1268         * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
1269         all javascript code is now put in Scheduler.js/generic.js.
1270
1271         * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
1272         moved into NSCalendarDate+Scheduler instead.
1273
1274         * SoObjects/Appointments/SOGoAppointmentFolder.m
1275         ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
1276         configure the timezone from SOGoUserFolder when the instance is
1277         being created.
1278         ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
1279         the value of the new "timezone" ivar.
1280
1281 2006-08-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1282
1283         * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
1284         the date selector in the first page and the container of the
1285         future calendar selector in the second page.
1286
1287         * UI/WebServerResources/generic.js: added code for handling tabbed
1288         views.
1289
1290         * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
1291         returns the bundle name associated to the current running product.
1292
1293 2006-08-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1294
1295         * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
1296         exception by invoking a timeout on the opener rather than invoking
1297         the list refresh method.
1298
1299         * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
1300         removed method.
1301
1302         * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters]) 
1303         ([UIxCalWeekView -prevWeekQueryParameters]) 
1304         ([UIxCalWeekView -nextWeekQueryParameters]) 
1305         ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
1306         that return the dates relatively to the current day.
1307         ([UIxCalWeekView -lastWeekName]) 
1308         ([UIxCalWeekView -currentWeekName]) 
1309         ([UIxCalWeekView -nextWeekName]) 
1310         ([UIxCalWeekView -weekAfterNextWeekName]) 
1311         ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
1312         methods that returns the label for the corresponding weeks.
1313
1314         * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
1315         used by UIxCalDayView and UIxCalWeekView to display the events
1316         occuring in one or more days.
1317
1318 2006-08-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1319
1320         * UI/Scheduler/UIxCalMainView.m: extended class to populate the
1321         entries in the new "monthMenu" and "yearMenu".
1322
1323         * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
1324         method to return the current day as a string formatted depending
1325         on the current locale.
1326
1327         * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate]) 
1328         ([UIxCalAptListView -endDate]): "today" is now the default filter
1329         for displayed events.
1330         ([UIxCalAptListView -currentSerialDay]): new method returning the
1331         date of the current enumerated appointment in serial form
1332         (yyyymmdd).
1333
1334         * UI/WebServerResources/SchedulerUI.js: added code to select the
1335         relevant day when an appointment is selected. Added code to popup
1336         a month and a year menu whenever the header entries are clicked in
1337         the calendar widget.
1338
1339         * UI/WebServerResources/generic.js: made addClassName and
1340         removeClassName methods of HTMLElement.
1341
1342 2006-08-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1343
1344         * UI/WebServerResources/MailerUI.js: fixed the contact creation
1345         from email addresses.
1346
1347         * UI/WebServerResources/generic.js: centralized the search-related
1348         functions here since the same code was used across the 3
1349         applications.
1350
1351         * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate]) 
1352         ([UIxCalAptListView -endDate]): return the required dates needed
1353         depending on the value given to the "filterpopup" url parameter.
1354
1355         * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
1356         code by invoking UIxComponent's labelForKey:.
1357
1358         * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
1359         [self pageResourceManager] instead of [self resourceManager].
1360
1361         * UI/Contacts/UIxContactEditorBase.m: invokes
1362         globallyUniqueObjectId on the clientobject's class instead of the
1363         hardcoded "SOGoFolder".
1364
1365         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1366         -newAction]): redirect the "new" action to the personal (default)
1367         contact folder.
1368
1369         * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1370         +objectWithName:inContainer:]): new constructor.
1371
1372         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1373         -lookupContactWithId:recordId]): always create a contact object,
1374         even if it does not exist.
1375
1376 2006-08-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1377
1378         * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
1379         component that lays out the different components of SOGoCalendar.
1380         Only serves as an Objective-C counterpart to its xml template.
1381
1382         * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
1383         from its .m file.
1384
1385         * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
1386         display a widget to handle the information displayed in the
1387         appointments list. Not currently used, lacks implementation.
1388
1389         * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
1390         display a calendar as a dynamic widget from where one can select
1391         the current visible day.
1392
1393         * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
1394         extracted from UIxCalInlineMonthOverview.m.
1395
1396         * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
1397         calendarPageURL methods. The javascript code is handled by .js
1398         files as much as possible...
1399
1400         * UI/WebServerResources/ContactsUI.js,
1401         UI/WebServerResources/MailerUI.js: adapted to the code refactoring
1402         in generic.js.
1403
1404         * UI/WebServerResources/SchedulerUI.js: implemented functions to
1405         handle the new widgets. XmlHTTPRequest code taken from
1406         MailerUI.js.
1407
1408         * UI/WebServerResources/generic.js: put some functions related to
1409         element selections as methods to HTMLElement and HTMLTableElement.
1410
1411         * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
1412         display the list of appointments (embodies the code-size of
1413         UIxCalAptListView; answers to the "aptlist" method).
1414
1415 2006-08-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1416
1417         * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
1418         -correctURLAction]): new short action method replacing the method
1419         below by taking far less code.
1420
1421         * SoObjects/Appointments/SOGoAppointmentFolder.m
1422         ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
1423         with an action in the view-related code.
1424
1425         * UI/Scheduler/UIxAppointmentEditor.m: invoke
1426         "stringByEscapingHTMLString" on the resulting value to avoid
1427         issues with accented characters.
1428         ([-jsCode]): removed method since the javascript code was merged
1429         into SchedulerUI.js.
1430
1431 2006-08-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1432
1433         * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
1434         new class method that returns an iCalPerson based on the UID given
1435         as param.
1436
1437         * UI/Contacts/UIxContactsListViewContainerBase.m: 
1438         UIxContactsListViewContainer renamed to serve as a base class for
1439         the contact lists in both the contact editor and the contact
1440         selectors.
1441
1442         * SoObjects/Contacts/SOGoContactLDAPFolder.m
1443         ([SOGoContactLDAPFolder
1444         -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
1445         setUserIdentifier:setRootDN:]): an LDAP field specifying the
1446         loginname of the users can now be specified.
1447
1448         * UI/WebServerResources/generic.js: added code to manage contact
1449         lists through the new implementation of the UIxContactSelector.
1450
1451         * UI/Templates: put the templates related to SchedulerUI in its
1452         own directory.
1453
1454         * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
1455         -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
1456         entry for "uid" with the field name representing the login name of
1457         the user in the corresponding LDAP branch.
1458
1459 2006-08-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1460
1461         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1462         -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
1463         request is a PUT, always create an entry, even if we're not sure
1464         it does exist.
1465
1466 2006-08-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1467
1468         * UI/WebServerResources/ContactsUI.js: implemented live-search.
1469
1470         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1471         -appendSystemSourcesInContext:context]): populated method with
1472         code that creates entries mapped to instances SOGoContactFolder,
1473         based on the configuration found in the NSUserDefaults under the
1474         key "SOGoLDAPAddressBooks".
1475         ([SOGoContactFolders
1476         -lookupName:nameinContext:contextacquire:acquire]):
1477         "contactsources" do not exist anymore, SOGoContactFolder was split
1478         into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
1479         and one protocol: SOGOContactFolder, instead.
1480         ([SOGoContactFolders -contactFolders]): new accessor used by the
1481         views of SOGoContactXXXFolder to list the possible sources.
1482
1483         * SoObjects/Contacts/SOGoContactObject.h: new protocol that
1484         defines the methods that UIxContactsView, ..Editor and so on...
1485         can expect.
1486
1487         * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
1488         defines the methods that UIxContactsListViewBase expects as well
1489         as the data fields returned in the contact lists.
1490
1491         * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
1492         returns entries an LDAP server. Conforms to the new
1493         SOGOContactFolder protocol.
1494
1495         * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
1496         returns a vCard based on contact entries from an LDAP server.
1497         Conforms to the new SOGOContactObject protocol.
1498
1499         * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
1500         ([NGVCardSimpleValue -vCardEntryString]): generates the correct
1501         entry for the textual representation of the vCard.
1502
1503         * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
1504         extension.
1505
1506         * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
1507         "SOGoContactObject".
1508
1509         * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
1510         method that generates a textual representation of the vcard.
1511
1512         * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
1513
1514         * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
1515         "SOGoContactFolder".
1516
1517         * SoObjects/Contacts/SOGoContactSource.h,
1518         SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
1519         protocols.
1520
1521         * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
1522         -singleAttributeWithName:key]): new method that returns the first
1523         object associated with an ldap key (where generally one value is
1524         returned by key).
1525         ([NGLdapEntry
1526         -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
1527         map the entry into an NSDictionary for processing by
1528         UIxContactsListViewBase.m with the least possible overhead.
1529
1530         * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
1531         extension.
1532
1533 2006-08-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1534
1535         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
1536         -privateContacts:inContext:]): now returns an instance of
1537         SOGoContactFolders.
1538
1539         * UI/Contacts/UIxContactsListViewContainer.m
1540         ([UIxContactsListViewContainer -contactFolderName]): new method to
1541         return the absolute path to the current contact folder, called
1542         from within the template.
1543
1544         * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
1545         JS code to initialize the 'currentContactFolder' generic var.
1546
1547         * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
1548         +contactFolderWithSource:inContainer:andName:]): new class
1549         method meant to return an instance connected to the specified
1550         source. Currently useless but won't be anymore in the next few
1551         days.
1552
1553         * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
1554         the "lookupFreeBusyObject" method since it does not exist.
1555
1556         * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
1557         as a "view" for the SOGoContactFolders object. Does nothing but
1558         redirect the browser to the URL of the personal address book of
1559         the user. It does not even have a template.
1560
1561         * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
1562         implementing the SOGoContactSource protocol. Does nothing
1563         currently but will be used to implement access to the personal
1564         address book of the user stored in the SOGo database.
1565
1566         * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
1567         protocol defining an API common to all possible types of contact
1568         sources.
1569
1570         * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
1571         serving as the root of the contact folders available to the
1572         current user. Correctly lists the contact sources in webdav.
1573
1574 2006-08-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1575
1576         * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
1577         -composeAction]): new action method that permits external object
1578         to write a message from the default (primary) account.
1579
1580         * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
1581         -initSnapshot]): new method with code taken from "defaultAction"
1582         but needed for others.
1583         ([UIxContactEditorBase -writeAction]): new action designed to
1584         compose the correct URL needed to obtain the MailerUI's email
1585         editor with the correct "mailto" parameter.
1586
1587         * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
1588         Common so that other modules can use it.
1589
1590         * UI/Contacts/UIxContactsListViewContainer.m: container to make it
1591         easier to manage both ajax and non-ajax requests.
1592
1593         * UI/Contacts/UIxContactsFilterPanel.m: clone of
1594         UIxMailFilterPanel, but applicable to contact lists.
1595
1596         * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
1597         -vcardContentFromSOGoContactRecord]): use the new standard methods
1598         created for each type of entry. If a line is determined to not
1599         contain information, it will be skipped.
1600
1601         * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
1602         +initialize]): init defaultMailDomain with the user default
1603         "SOGoDefaultMailDomain".
1604
1605 2006-08-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1606
1607         * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
1608         -saveAction]): reorganized methods to only have ONE return point.
1609         Invoke saveRecord: directly on the clientObject instead of
1610         saveContentString, which does the same thing anyway.
1611
1612         * SoObjects/Contacts/NSDictionary+Contact.m
1613         ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
1614         method to convert the dictionary returned with the user submission
1615         to a record in VCARD format to be stored in the database.
1616
1617 2006-08-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1618
1619         * UI/WebServerResources/MailerUI.js: when opening the context menu
1620         of the message list, select the message below the mouse cursor and
1621         deselect the other selected messages temporarily. This mimics the
1622         behaviour of Thunderbird for that matter and was already
1623         implemented for the entries of the folder tree.
1624
1625         * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
1626         -iconForMenuItem]): new method that returns the fully qualified
1627         relative URL to the icon representing the mailbox, or the default
1628         mailbox icon if needed.
1629
1630         * UI/SOGoUI/UIxComponent.m ([UIxComponent
1631         -urlForResourceFilename:filename]): automatically return an empty
1632         string whenever the filename passed as argument is nil.
1633
1634         * UI/WebServerResources/MailerUI.js: open the mailboxes with the
1635         "desc" parameter set to 1 so that they are sorted in descending
1636         order by default. Also, added "onHeaderClick()", triggered by
1637         clicking on the message list header elements.
1638
1639         * UI/MailerUI/UIxMailSortableTableHeader.m
1640         ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
1641
1642         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1643         -isSortedDescending]): defaults to "YES" when the sort order is
1644         not specified.
1645
1646 2006-07-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1647
1648         * UI/WebServerResources/MailerUI.js:
1649         - message cache: set the max num of cached messages to 20. Limit
1650         the cached message size to 30000 bytes.
1651         - ajax: when a message request is called while one is already
1652         being performed, the latter will be cancelled. Idem when
1653         retrieving the content of a mailbox.
1654         - folder tree: when a mailbox is selected because of the URL
1655         requested (initMailboxSelection), the dtree is expanded throughout
1656         the mailbox entry's parent hierarchy to ensure it is made visible
1657         when the page is being displayed. (new function: expandUpperTree).
1658         - mailbox loading: when loading a mailbox where a message was
1659         previously selected, we invoke its url with the "pageforuid"
1660         parameter correctly specified. During callback processing, we scan
1661         the table for the related row and reselect it.
1662         Also, the message area is set blank before loading any mailbox.
1663
1664         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1665         -defaultAction]): if the "pageforuid" parameter is passed in the
1666         url, take its value and invoke [self firstMessageOfPageFor:]
1667         consequently to deduce the first message to display. Otherwise,
1668         set it to "idx", otherwise set it to 0.
1669         ([UIxMailListView -firstMessageOfPageFor:]): new method
1670         that determines the first message of the page where the message
1671         passed as parameter is contained.
1672
1673         * UI/WebServerResources/UIxMailListView.js: removed this module,
1674         its code was put in MailerUI.js instead.
1675
1676 2006-07-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1677
1678         * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
1679         which returns the nodes for the parent specified in "parentMenu".
1680         Used to generate the javascript code for the folder dtree.
1681
1682         * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
1683         using that container-template are now using UIxMailMainFrame
1684         since UIxMailPanelFrame had no real interest. File removed.
1685
1686         * UI/WebServerResources/dtree.{css,js}: new files to handle
1687         javascript-generated mailbox tree. Modified from original version
1688         by integrating the previous code with the one we are using for
1689         selections and mailbox handling. Minor visual enhancements too...
1690
1691 2006-07-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1692
1693         * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
1694         returned, put it in an NSArray before returning it (fixes
1695         bug#217).
1696
1697 2006-07-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1698
1699         * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
1700         that returns a url string stripped from its "http://hostname"
1701         prefix.
1702
1703         * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
1704
1705         * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
1706
1707 2006-07-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1708
1709         * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
1710         -mailDateFormatter]): retrieve the timezone from the user settings
1711         and pass it to the returned dateFormatter. Also, the dateFormatter
1712         is kept in a static variable to avoid useless
1713         creations/destructions.
1714
1715         * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
1716         -setTimeZone:newTimeZone]): new accessor to specify the timezone.
1717
1718         * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:]) 
1719         ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
1720         s/Criteria/Text/ to handle the "criteria" form parameter.
1721
1722 2006-07-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1723
1724         * UI/WebServerResources/uix.css: enhanced the toolbar appearance
1725         to integrate better with the firefox look&feel. Added entries for
1726         the new "menu" DIV class (popup menus).
1727
1728         * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
1729         takes any chunk of text as param, detects the user email and the
1730         optional first and last names and return them in a well-formatted
1731         way. Renamed "getSelection" to "getSelectedNodes" to avoid a
1732         namespace conflict. Added "onMenuClick(node, event, menuId)" to
1733         handle popup menus through "onclick" element attributes (node =
1734         this, event = event and menuId = name of the menu DIV id to
1735         popup).
1736
1737         * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
1738         -snapshot]): add an entry for "email" into the snapshot
1739         dictionary if a "contactEmail" URL parameter was detected and if
1740         the entry for "email" is empty.
1741
1742         * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
1743         button now invokes the newContact() js function in ContactsUI.js
1744         instead of opening "new" directly. newContact() pops up a window
1745         stripped from its navigation bar.
1746
1747         * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
1748         bundle (AddressBook).
1749
1750         * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
1751         "menu" and id "addressMenu" have the header email addresses
1752         display it with the new menu code in generic.js.
1753
1754         * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
1755         replaced the body tables with a div of class "pageContent"
1756         (standardization across the page templates).
1757
1758         * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
1759         productJavaScriptURL and pageJavaScriptURL (conditionnally) since
1760         those are now inherited from UIxPageFrame.
1761
1762         * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
1763
1764         * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
1765         a "mailto" URL parameter is detected and the "to" array is empty,
1766         initialize "to" with the value of "mailto" before returning it.
1767
1768         * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
1769         -composeAction]): rewrote method in a cleaner way and with usage
1770         of the URL extensions to NSString and NSDictionary (see below).
1771         Also, if a "mailto" url parameter is detected, pass it to the
1772         redirected url.
1773
1774         * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
1775         reduce code.
1776
1777         * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
1778         returns a parameter string to add to a base URL.
1779
1780         * UI/Common/NSString+URL.m ([NSString
1781         -composeURLWithAction:parameters:andHash:useHash]): new method to
1782         compose a complete URL from an object URL with parameters and an
1783         optional '#' character.
1784
1785         * UI/Common/UIxPageFrame.h: separated interface from
1786         UIxPageFrame.m.
1787
1788 2006-07-07  Wsourdeau Sourdeau  <wsourdeau@inverse.ca>
1789
1790         * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
1791
1792         * UI/WebServerResources/generic.js: added code to manage
1793         selections within HTML containers.
1794
1795         * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
1796         added method to determine the possible URL for a product-specific
1797         javascript filename of the forme <productname>.js.
1798         ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
1799         ([UIxPageFrame -isPopup]): new method to determine whether the
1800         application navigator bar should be displayed (main page) or not
1801         (popup page).
1802
1803         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1804         -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
1805         the user through LDAP.
1806
1807 2006-07-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1808
1809         * The toolbar code from the MailerUI product was taken, renamed as
1810         "UIxToolBar" and put into UI/Common. Toolbar plists were created
1811         for the Contacts and Scheduler products and put in their respectir
1812         Toolbars/ subdirectories. Finally,
1813         UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
1814         UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
1815         and an invocation to the UIxToolbar component was put at the top
1816         of UI/Templaces/UIxPageFrame.wox.
1817
1818         * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
1819         within the templates whether a separator should be displayed.
1820
1821         * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
1822         that returns NO if the toolbar is empty.
1823
1824 2006-07-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1825
1826         * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
1827
1828         * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
1829         new toolbar objects.
1830
1831         * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
1832
1833         * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
1834         linkbanner as a DIV instead of a TABLE.
1835
1836         * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
1837         showLinkBanner]:
1838         returns 'YES' to request the display of the navigation bar between
1839         applets.
1840
1841 2006-06-15      ludovic@inverse.ca
1842
1843         * It's now possible to set the default
1844           domain using for email using the
1845           SOGoDefaultMailDomain preference key.
1846
1847 2006-06-15      ludovic@inverse.ca
1848         
1849         * Initial import of SOGo from trunk.