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