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