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