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