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