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