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