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