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