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