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