]> err.no Git - scalable-opengroupware.org/blob - ChangeLog
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1201 d1b88da0-ebda-0310...
[scalable-opengroupware.org] / ChangeLog
1 2007-10-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2
3         * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
4         -GETAction:]): use the "application/octet-stream" mime type for
5         elements of type "application/x-xpinstall" to avoid confusing
6         Firefox.
7
8         * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
9         ([UIxPreferences -itemMessageCheckText])
10         ([UIxPreferences -userMessageCheck])
11         ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
12         methods for handling the retrieval of new messages automatically.
13
14         * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
15         that returns the interval of time between automatic message
16         retrievals.
17
18         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
19         -defaultAction]): now expunges the last folder marked for expunge.
20
21         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
22         -trashInContext:_ctx]): now marks the container folder for
23         expunge.
24
25         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
26         -markForExpunge]): new method that marks the folder for the next
27         automatic expunge operation in the user settings.
28         ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
29         takes the last folder marked for expunge, expunges it and removes
30         it from the user settings, if it exists.
31
32 2007-10-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
33
34         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
35         -messageSubjectCellStyleClass]): added support for replied,
36         forwarded, forwarded and replied mails.
37
38         * SoObjects/Mailer/NSData+Mail.m ([NSData
39         -bodyDataFromEncoding:encoding]): new utility method that decodes
40         the NSData instance properly depending on the encoding string
41         passed as parameter.
42
43         * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
44         -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
45
46         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
47         -stringForData:_datapartInfo:_info]): simplified by invoking
48         -bodyDataFromEncoding: from our new NSData category methods.
49
50         * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
51         -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
52         where only the body part of the first of the keys fetched was
53         returned. Also decodes the body parts properly following their
54         encoding.
55
56         * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
57         extends the NSData class with utility methods useful for handling
58         mail.
59
60 2007-10-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
61
62         * SoObjects/SOGo/NSArray+Utilities.m
63         ([NSArray -stringsWithFormat:format]): replace instances of NSNull
64         with empty strings.
65
66         * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
67         -keysWithFormat:keyFormat]): replace instances of NSNull with
68         empty strings.
69
70         * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
71         empty, use "c_cn" instead.
72
73         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
74         ([SOGoMailAccount -draftsFolderInContext:_ctx])
75         ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
76         of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
77         no always be specified from the root instead of sometimes from the
78         INBOX.
79
80 2007-10-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
81
82         * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
83         ([UIxPageFrame -productLocalizableStrings]): invoke the new
84         +[SOGoUser language] method if the user is nil.
85
86         * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
87         that returns any generically-found language.
88         ([SoUser -language]): modified to call the above.
89         ([SOGoUser -language]): modified to call the above if the user
90         language has a null length.
91
92         * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
93         -davEntityTag]): modified to return the "hash" of the vCard string.
94
95         * UI/MailerUI/UIxMailActions.m ([UIxMailActions
96         -removeAllLabelsAction]): new method that removes all label flags
97         from the associated message.
98         ([UIxMailActions -addLabel1Action]
99         [UIxMailActions -addLabel2Action]
100         [UIxMailActions -addLabel3Action
101         [UIxMailActions -addLabel4Action]
102         [UIxMailActions -addLabel5Action]): new methods that adds label
103         flags to the associated message.
104         ([UIxMailActions -removeLabel1Action]
105         [UIxMailActions -removeLabel2Action]
106         [UIxMailActions -removeLabel3Action
107         [UIxMailActions -removeLabel4Action]
108         [UIxMailActions -removeLabel5Action]): new methods that removes
109         label flags from the associated message.
110
111         * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
112         new accessor that returns the labels associated with the message.
113
114         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
115         -allFolderPaths]): new method that returns all the paths of all
116         the subfolders of the folder object.
117         ([SOGoMailFolder -allFolderURLs]): new method replacing
118         subfoldersURL.
119
120         * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
121         -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
122         role from its parent folder.
123
124 2007-10-19  Francis Lachapelle  <flachapelle@inverse.ca>
125
126         * SoObjects/SOGo/SOGoUser.m 
127         ([SOGoUser -rolesForObject:objectinContext:context]): allow
128         multiple super usernames to be defined. The user default 
129         SOGoSuperUsername is renamed SOGoSuperUsernames and must be
130         an array.
131
132 2007-10-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
133
134         * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
135         -userInContext:]): override the super method by returning
136         anonymous if the super returns nil.
137
138         * UI/Common/UIxPageFrame.m ([UIxPageFrame
139         -productLocalizableStrings]): new method that returns the
140         product-specific translation dictionary as a JSON hash.
141         ([UIxPageFrame -commonLocalizableStrings]): same as above but for
142         the "Common" framework.
143         ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
144         the requestor components to require additional Javascript files.
145         This is useful now that all the scripts are loaded at the end of
146         the HTML code.
147         ([UIxPageFrame -additionalJSFiles]): new getter related to the
148         above.
149
150 2007-10-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
151
152         * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
153         implemented new web method.
154
155         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
156         -copyToFolderNamed:folderNameinContext:]): new method with the
157         code cut/pasted from -moveToFolderNamed:inContext:.
158         ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
159         modified to use the code from -copyToFolderNamed:inContext:, which
160         is common between the two actions.
161
162         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
163         ([SOGoMailAccount -sentFolderNameInContext:])
164         ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
165         the user settings into account.
166
167         * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
168         ([UIxMailFolderActions -setAsSentFolderAction])
169         ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
170         that change the purpose of the active folder to "Sent", "Drafts"
171         or "Trash".
172
173         * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]): 
174         returns the subject as quoted-printable.
175
176         * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
177         SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
178         the "aclMethod" method for the subsequent language-dependent
179         subclasses.
180
181         * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
182         returns the subject as quoted-printable.
183
184         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
185         -dealloc]): release item, aptStartDate and aptEndDate.
186
187 2007-10-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
188
189         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
190         -initWithName:newNameinContainer:newContainer]): the owner of a
191         shared folder is set to "nobody" by default.
192
193         * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
194         that returns whether the object has an owner or not.
195
196 2007-10-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
197
198         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
199         the folder even if the current user is not its owner.
200
201 2007-10-10  Ludovic Marcotte  <ludovic@inverse.ca>
202
203         * We now send advisory emails when folders
204           are created / deleted.
205
206         * Fixed the sending of advisory emails upon
207           ACL changes on folders.
208
209 2007-10-10  Ludovic Marcotte  <ludovic@inverse.ca>
210
211         * UI/Scheduler/UIxComponentEditor.m
212         Implemented event/task priority support.
213
214         * SoObjects/Contacts/SOGoContactGCSFolder.m
215         Added CardDAV support. 
216
217         * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
218         Implemented From: based on LDAP results based on
219         the MailFieldNames attribute (an array) specified
220         in every LDAP-based authentication sources.
221
222         * UI/MailPartViewers/UIxMailPartTextViewer.m and
223           UI/WebServerResources/MailerUI.css
224         We avoid replacing "\r\n" and "\n" with <br /> and
225         rather use CSS capabilities for proper formatting.
226         This is _WAY_ faster on very large mails.
227  
228 2007-10-10  Francis Lachapelle  <flachapelle@inverse.ca>
229
230         * UI/Scheduler/UIxComponentEditor.m
231         ([UIxComponentEditor -componentCalendar]): returns the calendar
232         object of the current event.
233
234 2007-10-05  Ludovic Marcotte  <ludovic@inverse.ca>
235
236         * UI/WebServerResources/MailerUI.js
237         We check if at least one message is selected
238         before performing a Reply/Reply All/Forward
239         
240         * SoObjects/Appointments/SOGoAppointmentFolder.m
241         and others - implemented support for recurring
242         events (with some known limitations right now,
243         all soon to be fixed).
244         
245 2007-10-04  Francis Lachapelle  <flachapelle@inverse.ca>
246
247         * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
248         the constraint that a username can't start with a digit.
249
250 2007-10-02  Francis Lachapelle  <flachapelle@inverse.ca>
251
252         * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
253         repository to Inverse's branch.
254
255 2007-09-28  Francis Lachapelle  <flachapelle@inverse.ca>
256
257         * SoObjects/Mailer/SOGoDraftObject.m 
258         ([SOGoDraftObject -isValidAttachmentName:_name]): removed
259         constraint on space in file name.
260         ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
261         now removes from file name all characters preceding a backslash.
262         This happens with IE7 because the complete attachment file path
263         is sent.
264
265 2007-09-25  Francis Lachapelle  <flachapelle@inverse.ca>
266
267         * SoObjects/Appointments/SOGoAptMailNotification.m 
268         ([SOGoAptMailNotification -appointmentURL]): set personal as the
269         default calendar where to add the event.
270
271         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]): 
272         activate the SOGoUIxDefaultModule user defaults.
273
274 2007-09-21  Francis Lachapelle  <flachapelle@inverse.ca>
275
276         * UI/SOGoUI/UIxComponent.m 
277         ([UIxComponent -shortUserNameForDisplay]): returns the string
278         "wrongusernamepassword" when authentication failed.
279
280 2007-09-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
281
282         * UI/MailPartViewers/UIxMailPartICalViewer.m
283         ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
284         entry of the Calendars parent folder.
285
286         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
287         -messageSubject]): new accessor method to work-around a problem
288         within SOPE where a subject could be returned as an NSData.
289
290         * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
291         -appendPersonalSources]): make sure the value of the "c_path4" of
292         the returned rows are not NSNull, otherwise, discard them.
293
294 2007-09-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
295
296         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
297         -compare:otherFolder]): new overriden method that compares two
298         contact foldes based on their class and then transfer the control
299         to the super method in SOGoFolder.
300
301         * SoObjects/Contacts/SOGoContactLDAPFolder.m
302         ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
303         compare two contact folders based on their class and then their
304         display name.
305
306         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
307         new method for sorting folders. The folders are compared based on
308         their ownership, whether they are a main folder and finally
309         depending on their display name.
310
311         * SoObjects/SOGo/SOGoObject.m ([SOGoObject
312         -pathArrayToSOGoObject]): do not reorder the paths if the third
313         element is an instance of NSNull.
314
315         * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
316         -subFolders]): returns a sorted array using the "compare:"
317         selector.
318
319 2007-09-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
320
321         * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
322         -calendars]): also returns the owner of the listed folders.
323
324         * SoObjects/Appointments/SOGoAppointmentFolder.m
325         ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
326
327         * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
328         method into UIxFolderActions.
329
330         * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
331         -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
332         freebusy info from the "personal" calendar.
333
334         * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
335         -createFolderAction]): new standardized method for requesting
336         folder creations among gcs-based modules.
337
338         * UI/Common/UIxParentFolderActions.[hm]: new action class module.
339
340         * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
341         module, equivalent to the SOGoParentFolder's child
342         SOGoContactFolders, but for calendars.
343
344         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
345         method that returns translated strings for controller bundles
346         (same as what UIxComponent does for view bundles).
347         ([SOGoObject -pathArrayToSOGoObject]): new method that returns
348         the real path to a subscribed folder (if subscribed).
349         ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
350         ([SOGoObject -globallyUniqueObjectId]): new instance method
351         calling its class equivalent.
352
353 2007-09-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
354
355         * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
356         whether the user is logged in and if so, redirect to his/her
357         homepage.
358         ([SOGoRootPage -appendToResponse:inContext:]): removed useless
359         method.
360
361 2007-09-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
362
363         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
364         +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
365         new method.
366         ([SOGoFolder -displayName]): new method.
367         ([SOGoFolder -delete]): accept to proceed only if nameInContainer
368         != "personal".
369
370         * SoObjects/Contacts/SOGoContactLDAPFolder.m
371         ([SOGoContactLDAPFolder
372         +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
373         renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
374
375         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
376         +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
377         removed method, reimplemented in SOGoFolder.
378         ([SOGoContactGCSFolder -displayName]): removed method,
379         reimplemented in SOGoFolder.
380         ([-delete]): removed method, modified in SOGoFolder.
381
382         * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
383         a subclass of SOGoParentFolder.
384
385         * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
386         from SOGoContactFolders and modified to be more content-independent.
387
388         * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
389         ([UIxMailActions -markMessageReadAction]): new methods moved from
390         UIxMailListView and adapted to invoke the client object directly,
391         since the previous versions had to to a lookup from the parent
392         SOGoMailFolder.
393
394         * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
395         method into UIxMailActions.
396         ([-markMessageReadAction]): same as above.
397         ([-viewAction]): removed useless method.
398         ([-javaScriptOK]): removed useless method.
399         ([-isJavaScriptRequest]): removed useless method.
400         ([-lookupActiveMessage]): removed useless method.
401
402         * UI/Common/WODirectAction+SOGo.m ([WODirectAction
403         -responseWithStatus:status]): new method that returns a WOResponse
404         initialized with the specified status code.
405         ([WODirectAction -responseWith204]): new method that invokes the
406         above one with "204" as parameter.
407         ([WODirectAction -redirectToLocation:newLocation]): rewrote method
408         to make use of -responseWithStatus:.
409
410         * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
411         method that returns a WOResponse initialized with the 204 status
412         code.
413         
414         * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
415         always use a "not deleted" search qualifier along with the user
416         qualifier (if present).
417
418 2007-09-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
419
420         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
421         -contactSearchAction]): only return the records which have an
422         email set.
423
424         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
425         -trashInContext:_ctx]): no longer expunge the mailbox after
426         marking a message deleted.
427         ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
428         as above.
429
430         * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
431         ([-trashAction]): moved method into UIxMailActions.
432         ([-moveAction]): moved method into UIxMailActions.
433
434 2007-09-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
435
436         * UI/MailPartViewers/UIxMailPartHTMLViewer.m
437         ([_UIxHTMLMailContentHandler
438         -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
439         comments from the CSS code, do not add the CSS code to the body
440         content and remove references of body from the CSS declarations.
441         ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
442         ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
443         common with cssContent in a different method and invoke it only
444         once.
445
446         * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
447         instead of UIxPageFrame.
448
449 2007-09-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
450
451         * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
452         ([-appendToResponse:responseinContext:ctx]): commented out.
453         ([SOGoRootPage -connectURL]): new accessor that returns the full
454         url the the "connect" method.
455         ([-connectAction]): rewrote method to return a properly formatted
456         auth. cookie based on the username and password passed as
457         parameter.
458
459         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
460         set the value of the cookie to "discard" and set its expiration
461         date to yesterday.
462
463         * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
464         -preprocessCredentialsInContext:context]): consider the user
465         anonymous if the cookie value is "discard".
466         ([SOGoWebAuthenticator
467         -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
468         set the expiration date of the cookie to yesterday.
469
470         * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
471         returns the path to the application if the clientObject is not a
472         SOGoObject.
473
474         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
475         moved the requirement of authentication from the SOGo application
476         class to here.
477
478         * SoObjects/Appointments/SOGoAppointmentObject.m
479         ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
480         check whether the new appointment object is still relevant before
481         sending a notification.
482
483 2007-09-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
484
485         * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
486         -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
487         render the login page through the SoDefaultRenderer.
488
489         * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
490         -isPublicInContext:localContext]): new overriden method that
491         returns YES.
492
493         * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
494         -currentCalendarLogin]): replace css-unsafe characters with _.
495
496         * UI/SOGoUI/UIxComponent.m ([UIxComponent
497         -shortUserNameForDisplay]): simplified method.
498         ([-user]): removed method since [context activeUser] is as useful.
499
500 2007-09-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
501
502         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
503         set the cookie path to "/".
504
505         * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
506         authenticator based on the request handler key. "dav" returns the
507         SOGoDAVAuthenticator, anything else returns the Web authenticator.
508
509         * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
510         "SOGoAuthenticator".
511
512         * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
513         implementing a subclass of SoCookieAuthenticator, designed for
514         web-based cookie authentication of users.m
515
516         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
517         new method that resets the authentification cookie.
518
519 2007-08-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
520
521         * SoObjects/SOGo/LDAPSource.m ([LDAPSource
522         -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
523         didBind to NO to make sure no false authentication is returned if
524         the bind operation is not executed.
525
526 2007-08-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
527
528         * SoObjects/Mailer/SOGoDraftObject.m: added support for the
529         "In-Reply-To" header field when replying.
530
531         * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
532         table field names that are queried.
533
534         * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
535         -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
536         add the "c_" prefix to the quick table field names that are
537         queried.
538
539 2007-08-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
540
541         * SoObjects/Appointments/SOGoAppointmentFolder.m
542         ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
543         "personal" to the ocs path of the appointment folder.
544
545         * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
546         -flatContentAsString]): use latin1 when the encoding is not
547         specified, and to reencode data chunk which were not correctly
548         decoded with the original charset.
549
550         * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
551         ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
552         ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
553         ([SOGoAppointmentFolder
554         -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
555         override those methods to use the "personal" additional directory.
556
557         * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
558         append "/personal" to the calendar path to simulate a single
559         calendar in a choice of many.
560
561         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
562         -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
563         methods back here. Moved the folder existence check here, and do
564         it on self only when the lookup happens for a non-folder object.
565         This permits to accept entries for folders with parents who
566         don't really exist.
567
568 2007-08-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
569
570         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
571         -shouldTakeValuesFromRequest:requestinContext:context]): same as
572         below.
573
574         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
575         -shouldTakeValuesFromRequest:requestinContext:context]):
576         redesigned method since any method called can be received from a
577         POST or a GET. Instead we check the method call itself and we
578         accept only if it has the "save" prefix.
579
580         * SoObjects/Appointments/SOGoAptMailNotification.m
581         ([SOGoAptMailNotification -getSubject]): returns the subject an a
582         quoted-printable encoded string, if needed.
583
584         * SoObjects/Mailer/SOGoDraftObject.m ([NSString
585         -asQPSubjectString:encoding]): moved method into
586         NSString+Utilities.m.
587
588 2007-08-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
589
590         * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
591         -messageForwardingList])
592         ([UIxPreferences -itemMessageForwardingText])D
593         ([UIxPreferences -userMessageForwarding])
594         ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
595         new template methods for manage the user preference regarding
596         message forwarding.
597
598         * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
599         algorithm to return, in order, the user's defined language or the
600         first browser language or, finally, the default language.
601         ([SOGoUser -messageForwarding]): new method that returns the user
602         preference for message forwarding: "inline" or "attached",
603         defaulting to "attached".
604
605         * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
606         -contentForInlineForward]): new method that returns the content of
607         the message for inline forwarding based on the SOGoMailForward
608         templates.
609
610         * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
611         -fetchMailForForwarding:sourceMail]): check the user preference
612         for message forwarding and compose inline forwarded messages if required.
613
614         * SoObjects/Appointments/SOGoCalendarComponent.m
615         ([SOGoCalendarComponent
616         -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
617         now use a template based on the language returned from the
618         SOGoUser object.
619
620         * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
621         a subclass of SOGoMailForward for English locale.
622
623         * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
624         a subclass of SOGoMailForward for French locale.
625
626         * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
627         helps build template for inline forwarded messages.
628
629 2007-08-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
630
631         * UI/SOGoElements/SOGoIEConditional.m: new extension module class
632         to handle "<var:if-ie>" template tags.
633
634         * UI/SOGoElements: new extension bundle containing sogo-specific
635         dynamic elements.
636
637         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
638         -takeValuesFromRequest:_rqinContext:_ctx]): save the category
639         selected in the dialog.
640         ([UIxComponentEditor -setComponent:newComponent]): retrieve the
641         first category, if ever, of the calendar entity.
642
643         * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
644         -composeAction]): restored method since it is needed by the
645         address book.
646
647         * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
648         -composeAction]): the address fields should be arrays and not
649         simple strings.
650
651         * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
652         that returns the build date of SOGo in the template.
653
654 2007-08-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
655
656         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
657         -_flattenedRecords:records]): when the c_cn field is empty,
658         returns set a formatted string with the concatenation of
659         c_givenname and c_sn as the displayName.
660
661         * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
662         -isValidMailAccountName:_key]): prevent unknown accounts from
663         being accessed.
664
665         * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
666         -pathToAttachmentObject]): we no longer need the filename
667         extension for SoLookup...
668
669         * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
670         -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
671         filename to have an extension, and thus accept any filename.
672
673         * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
674         -currentCName]): new method that returns the c_name of the
675         contact, correctly escaped to be passed by url afterwards.
676
677         * UI/MailPartViewers/UIxMailPartHTMLViewer.m
678         ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
679         instance of [self decodedFlatContent] instead of the buggy
680         NSString from [super flatContentAsString] to the parser.
681
682 2007-08-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
683
684         * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
685         new category method to reponds to the "delete" web command on
686         drafts.
687         ([UIxMailActions -deleteAttachmentAction]): new category method to
688         reponds to the "deleteAttachment" web command on drafts, taking
689         the "filename" url parameter into account.
690
691         * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
692         -contentForEditing]): new method that retrieve the editable mail
693         content.
694         ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
695         returns the body keys for attached files (parts with a "filename"
696         attribute).
697
698         * SoObjects/Mailer/SOGoDraftObject.m ([NSString
699         -asQPSubjectString:encoding]): do not change the string if the
700         encoded string has the same length (which means it is already
701         7bit-safe).
702         ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
703         that retrieve a draft along with its attachments for editing.
704         ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
705         choke if the "to" header field is empty.
706         ([SOGoDraftObject -delete]): new method to delete the draft folder
707         whenever operations are done.
708
709 2007-08-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
710
711         * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
712         useless stub method, of which the intention was implemented in
713         SOGoDraftObject.
714         ([-lookupSentFolderUsingAccount]): removed obsolete method.
715         ([-selectedMailIdentity]): removed obsolete method.
716         ([-lookupSentFolderUsingFrom]): removed obsolete method.
717         ([-storeMailInSentFolder:_path]): removed obsolete method, of
718         which the mechanism has been put in -[SOGoDraftObject sendMail]
719         method.
720         ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
721         ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
722         adapted algorithms to the new SOGoDraftObject methods.
723         ([-deleteAction]): removed method since local draft objects cannot
724         be removed by the user.
725
726         * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
727         -expungeAction]): new method replacing the one previously found in
728         UIxMailListView.
729         ([UIxMailFolderActions -createFolderAction])
730         ([UIxMailFolderActions -renameFolderAction])
731         ([UIxMailFolderActions -deleteFolderAction])
732         ([UIxMailFolderActions -emptyTrashAction])
733         ([UIxMailFolderActions -subscribeAction])
734         ([UIxMailFolderActions -unsubscribeAction]): error situations
735         should have http return code 500 instead of 403.
736
737         * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
738         -composeAction]): new method replacing the one previously in
739         UIxMailMainFrame.
740
741         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
742         -imap4URLString]): removed overriden method (see below).
743
744         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
745         cache the mailbox acl.
746         ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
747         ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
748         acl cache.
749         ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
750         the new method of determining the users mail accounts.
751
752         * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
753         longer adds a "/" at the end of the string (the default for
754         folders), therefore this will be overriden in SOGoMailFolder
755         rather than in SOGoMailObject.
756
757         * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
758         method, moved into the new UIxMailActions module class.
759
760         * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
761         -newDraft]): new method that returns a new SOGoDraftObject
762         instance with a unique filename based on the current timestamp and
763         the "newDraft" prefix.
764         ([SOGoDraftsFolder
765         -lookupName:nameinContext:localContextacquire:acquire]): overriden
766         method by detecting local drafts with their "newDraft" prefix.
767         ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
768
769         * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
770         from scratch by making it a subclass of SOGoMailFolder.
771
772         * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
773         module.
774
775         * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
776         module.
777
778         * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
779         module.
780
781         * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
782         new method, initializing the new ivars: IMAP4ID, headers, text,
783         sourceURL and sourceFlag.
784         ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
785         ([-_ensureUserSpoolFolderPath])
786         ([-saveMimeMessageToTemporaryFileWithHeaders:])
787         ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
788         ([-deleteTemporaryMessageFile:], [-delete], [-content])
789         ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
790         ([-uid], [-flags], [-size], [-envelope]): removed methods.
791         ([SOGoDraftObject -storeInfo]): rewrote method to take the new
792         ivars into account.
793         ([SOGoDraftObject -setSourceURL:newSourceURL])
794         ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
795         methods to store the url of the original message between accesses
796         so that, depending on the action taken (forward or reply), the
797         correct flag can be given.
798         ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
799         the imap4 id that is returned for the message whenever it is saved
800         into the drafts folder.
801         ([SOGoDraftObject -save]): new method that takes in charge the
802         saving of the message in the IMAP drafts folder.
803         ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
804         new method that fills the original data of the new message with
805         the reply content of the original message.
806         ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
807         above for message forwarding.
808         ([-spoolFileManager]): removed useless method (only returned the
809         default filemanager...)
810         ([SOGoDraftObject -mimeMessageAsData]): new method that returns
811         the resulting message as an NSData chunk.
812
813         * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
814         containing a rewrite of the mail action methods found in
815         UI/Mailer/, that needed to be put in the SOGoMailObject class.
816         ([SOGoMailObject -subjectForReply]): new method that returns a
817         subject suitable for replies.
818         ([SOGoMailObject -contentForReply]): new method that returns the
819         textual content of an email, quoted for replying.
820         ([SOGoMailObject -filenameForForward]): new method that returns
821         the name of the filename that should contain the forwarded
822         message, based on its subject.
823         ([SOGoMailObject -subjectForForward]): explicit.
824
825 2007-08-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
826
827         * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
828         -mailAccounts]): rewrote method to return the name of the mail
829         accounts now available with the -[SOGoUser mailAccounts] method.
830         ([UIxMailMainFrame -showLinkBanner]): removed method.
831         ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
832         ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
833         ([UIxMailMainFrame -rootURL]): removed method.
834         ([UIxMailMainFrame -userRootURL]): removed method.
835         ([UIxMailMainFrame -calendarRootURL]): removed method.
836         ([UIxMailMainFrame -contactsRootURL]): removed method.
837         ([UIxMailMainFrame -hasErrorText])
838         ([UIxMailMainFrame -errorText])
839         ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
840         ([-composeAction]): removed method. Now provided by
841         UIxMailAccountActions.
842         ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
843         ([UIxMailMainFrame -hideFolderTree]): removed method.
844         ([UIxMailMainFrame -treeRootClassName]): removed method.
845         ([UIxMailMainFrame +initialize]): removed method.
846         SOGoMailTreeRootClass userdefaults will no longer have any effect.
847
848         * UI/Common/WODirectAction+SOGo.m ([WODirectAction
849         -redirectToLocation:newLocation]): new method that implements the
850         same functionality as WOComponent.
851
852         * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
853
854         * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
855         method that returns whether the current mail is store in the
856         drafts folder hierarchy.
857
858         * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
859         ([-primaryEmail]): removed method.
860         ([SOGoUser -primaryIMAP4AccountString]): removed method.
861         ([SOGoUser -mailAccounts]): new method that returns an array
862         containing description dictionaries for all the user mail
863         accounts. Each account also contain the user's identities for that
864         account.
865         ([SOGoUser -allIdentities]): new utility method that returns all
866         the user identities on all accounts.
867         ([SOGoUser -primaryIdentity]): new method return the first
868         identity of the first account.
869
870         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): 
871
872         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
873         -isInDraftsFolder]): returns NO.
874         ([-preferredIdentity]): removed method, replaced with -[SOGoUser
875         primaryIdentity].
876         ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
877
878         * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
879         -isInDraftsFolder]): new method that detects if self is contained
880         by the drafts folder by calling itself on the container object.
881
882         * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
883         removed method.
884         ([-fetchIdentitiesWithEmitterPermissions]): removed method.
885         ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
886         return the name of the mail accounts now available with the
887         -[SOGoUser mailAccounts] method.
888
889         * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
890         extension module.
891
892         * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
893         module.
894
895         * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
896         -keysWithFormat:format]): method that forward the method of the
897         same name to each member of the array, considering they all are
898         instances of NSDictionary.
899         ([NSArray -objectsForKey:key]): same principle as above.
900         ([NSArray -flattenedArray]): new method that transforms an array
901         of arrays into a single array containing all the elements of the
902         subarrays.
903
904         * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
905         -keysWithFormat:keyFormat]): new method inspired by the python
906         string formatting system and which replaces occurences of "%{key}"
907         by the corresponding keys.
908
909 2007-08-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
910
911         * Main/SOGo.m ([SOGo -run]): check for channel-type specific
912         sql script before the generic one when initializing mandatory
913         system tables.
914
915 2007-08-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
916
917         * SoObjects/SOGo/NSString+Utilities.m ([NSString
918         -pureEMailAddress]): new utility method inspired by the
919         "_rawSender" private method in SOGoDraftObject, which it now
920         replaces.
921
922         * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
923         provides a common API for sending emails, no matter what the
924         transport is.
925
926 2007-08-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
927
928         * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
929         -quotasAction]): invoke "relativeImap4Name" instead of
930         "nameInContainer" since the latter also returns the "folder"
931         prefix.
932
933         * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
934         -listMailboxesAction]): declare the output as text/plain in UTF-8.
935
936         * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
937         -deleteFolderAction]): fixed the url of the destination folder.
938
939         * Main/SOGo.m ([SOGo +initialize]): show the build date and
940         hostname at startup.
941
942 2007-08-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
943
944         * SoObjects/Appointments/SOGoCalendarComponent.m
945         ([SOGoCalendarComponent
946         -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
947         set the mail date to the current date string returned by our
948         rfc822DateString extension method.
949
950         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
951         -_gcsFoldersFromFolder:): ignore the personal folders who are
952         returned but don't really exist.
953
954 2007-08-02  Francis Lachapelle  <flachapelle@inverse.ca>
955
956         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
957         has to return only one element.
958
959 2007-08-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
960
961         * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
962         -content]): new method returning the decoded content of the
963         corresponding attachment as an NSData instance.
964         ([UIxMailPartViewer -filename]): if the "filename" parameter of
965         the metadata parameterList is empty, try to find out the filename
966         from the "disposition" metadata returned with the BODYSTRUCTURE
967         imap4 tag.
968
969         * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
970         -composeAction]): prefix the INBOX folder with "folder".
971
972         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
973         -relativeImap4Name]): return nameInContainer stripped from its
974         first 6 characters since all folder names are prefixed with
975         "folder".
976
977         * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
978         -imap4URLString]): invoke -relativeImap4Name instead of
979         "nameInContainer" since the former will return the fixed IMAP4
980         foldername and the latter the SoObject name.
981
982         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
983         +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
984
985         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
986         ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
987         ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
988         ([SOGoMailAccount -sentFolderNameInContext:])
989         ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
990         names with "folder".
991         ([SOGoMailAccount -inboxFolderInContext:_ctx])
992         ([SOGoMailAccount -sentFolderInContext:_ctx])
993         ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
994         the folder names with "folder" since they are prefixed earlier.
995
996 2007-07-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
997
998         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
999         ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
1000         all starts with "folder".
1001
1002         * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
1003         longer declare security info from here.
1004
1005         * SoObjects/Mailer/SOGoMailFolder.m
1006         ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
1007         ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
1008         folder names now always start with "folder".
1009
1010         * SoObjects/Mailer/SOGoMailAccount.m
1011         ([-lookupName:inContext:acquire:]): folder names now always start
1012         with "folder".
1013
1014 2007-07-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1015
1016         * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
1017         -forwardAction]): adapted to the new saveAttachment:withMetadata:
1018         method (see below).
1019
1020         * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
1021         code to save the attached filenames with the filename returned by
1022         the web server as well as their mime types.
1023
1024         * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
1025         ([UIxMailPartMessageViewer -toAddresses])
1026         ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
1027         the corresponding fields separated with a ", " (if needed).
1028
1029         * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1030         -saveAttachment:_attachwithMetadata:metadata]): new method
1031         replacing -saveAttachment:withName: and which takes a dictionary
1032         as parameter with the filename and the mime type of the
1033         attachment.
1034         The mimetype is then saved in a hidden text file.
1035         ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
1036         take the mime type from the hidden text file related to the
1037         attachment.
1038
1039         * SoObjects/Contacts/SOGoContactGCSFolder.m ()
1040         ([SOGoContactGCSFolder
1041         -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1042         return records if the db records are > 0 and not just > 1...
1043
1044 2007-07-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1045
1046         * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
1047         method.
1048         ([UIxContactsListView -defaultSortKey]): changed to "displayName".
1049
1050         * SoObjects/Contacts/SOGoContactLDAPFolder.m
1051         ([SOGoContactLDAPFolder
1052         -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1053         translate the returned records to a normalized form.
1054
1055         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1056         -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1057         translate the returned records to a normalized form.
1058
1059         * UI/Scheduler/UIxCalListingActions.m,
1060         UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
1061         SoObjects/SOGo/AgenorUserDefaults.m,
1062         SoObjects/Contacts/SOGoContactGCSFolder.m,
1063         SoObjects/Appointments/SOGoAppointmentFolder.m,
1064         OGoContentStore/OCSiCalFieldExtractor.m,
1065         OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
1066         table fields with "c_".
1067
1068 2007-07-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1069
1070         * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
1071         the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
1072         the application settings. If set, both limit will influence the
1073         maximum size of the resultsets and the time taken to solve them.
1074         ([LDAPSource -_initLDAPConnection]): initialize the limits.
1075
1076 2007-07-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1077
1078         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
1079         method that declares the DAV namespace related to CardDAV.
1080         ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
1081         method that declares the "access-control" and "addressbook-access"
1082         classes to the list.
1083
1084         * SoObjects/Appointments/SOGoAppointmentFolder.m
1085         ([-lookupActionForCalDAVMethod:]): removed method.
1086         ([SOGoAppointmentFolder -davNamespaces]): added new overriden
1087         method that declares the DAV namespace related to CalDAV.
1088
1089         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
1090         optional method for subclasses which handle specific extensions to
1091         the DAV protocol: CardDAV or CalDAV.
1092         ([SOGoFolder
1093         -lookupName:lookupNameinContext:localContextacquire:acquire]):
1094         new overriden method that handles dav invocations for extensions
1095         to DAV by returning an appropriate SoSelectorInvocation.
1096
1097         * SoObjects/SOGo/NSString+Utilities.m ([NSString
1098         -asDavInvocation]): new method returning a dictionary with a "ns"
1099         key representing the dav namespace and a "method" key representing
1100         the dav method name of the request.
1101
1102         * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1103         +initialize]): scan the value of SOGoUIxUserCanChangePassword.
1104         Default is "no".
1105         ([UIxPreferences -shouldDisplayPasswordChange]): new template
1106         method that returns the value of SOGoUIxUserCanChangePassword.
1107
1108         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1109         scan the value of SOGoUIxDefaultModule. If not set, the default
1110         module defaults to "Calendar".
1111         ([SOGoUserHomePage -defaultAction]): redirect the user to the
1112         value of "SOGoUIxDefaultModule".
1113
1114 2007-07-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1115
1116         * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1117         -contactInfos]): cache the results to avoid multiple invocations.
1118
1119         * SoObjects/Contacts/SOGoContactLDAPFolder.m
1120         ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
1121         really should return something or if we fake to return nil...
1122
1123 2007-07-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1124
1125         * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
1126         acceptAnyUser to YES only when the SOGoAuthentificationMethod user
1127         default is set to "bypass".
1128
1129         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1130         -checkLogin:_loginpassword:_pwd]): accepts unverified connections
1131         when authMethod is set to "bypass" from now on. This would avoid a
1132         security concern with a default installation of SOGo.
1133         AuthentificationMethod is now prefixed with "SOGo" for better
1134         clarity.
1135
1136 2007-07-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1137
1138         * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1139         -quotasAction]): new method that returns a json representation of
1140         the mailbox quotas.
1141
1142 2007-07-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1143
1144         * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1145         -imap4URL]): rewrote method to support accented mailbox names.
1146         ([SOGoMailBaseObject imap4Password]): rewrote to simply use
1147         SOGoAuthenticator's passwordInContext:.
1148
1149         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1150         -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
1151         start and due dates to nil if hasStartDate and hasDueDate are
1152         false.
1153
1154         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1155         -passwordInContext:context]): made method public.
1156
1157         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1158         -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
1159         to false to avoid a null violation.
1160
1161 2007-07-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1162
1163         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1164         -contentAsString]): returns the message encoded in ISO Latin 1
1165         again.
1166
1167         * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
1168         SOGoSuperUsername user defaults.
1169         ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
1170         method.
1171         ([SOGoUser -rolesForObject:objectinContext:context]): if the
1172         current user is the superuser, grant him/her the "owner" role.
1173
1174         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1175         the folder only if the current user is the owner of the future
1176         folder.
1177
1178         * SoObjects/Appointments/SOGoCalendarComponent.m
1179         ([SOGoCalendarComponent -contentAsString]): we return the content
1180         based on the permissions returned by the security manager instead
1181         of by looking at the user roles.
1182
1183         * SoObjects/Appointments/SOGoAppointmentFolder.m
1184         ([SOGoAppointmentFolder -calendarFolders]): read the calendar
1185         folders of the user to whom this folder belongs instead of the
1186         active user. This way, a delegate user will be able to have the
1187         same view that the original user has if he connects from his user
1188         directory.
1189
1190         * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
1191         user exists before creating the SOGoUserFolder instance. If not,
1192         returns nil.
1193
1194         * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
1195         return the message source code in plain text.
1196
1197         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1198         -contentAsString]): returns the message encoded in UTF8.
1199
1200 2007-07-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1201
1202         * OGoContentStore/iCalRepeatableEntityObject+OCS.m
1203         ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
1204         leading tagname into account when serializing the element values.
1205
1206         * Main/SOGoProductLoader.m: only load bundle directories ending
1207         with the "SOGo" extension.
1208
1209         * Main/SOGo.m ([SOGo
1210         -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
1211         result set if the query has caused no exception. Otherwise we get
1212         an "evaluation is in progress exception".
1213
1214 2007-06-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1215
1216         * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1217         -generateSQLForInsert]): initialize error to nil before the
1218         serialization. Otherwise the method can get confused if it ever is
1219         initialized to something else.
1220
1221         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
1222         -folderIsMandatory]): returns NO unconditionnally.
1223
1224         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1225         -appendPersonalSources]): add the "personal" folder to the list of
1226         user folders even if it doesn't exist, so that it is created when
1227         the user accesses it.
1228
1229         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1230         -folderIsMandatory]): returns YES if nameInContainer is set to
1231         "personal", which is the default address book.
1232
1233         * SoObjects/Appointments/SOGoAppointmentFolder.m
1234         ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
1235         users must have one Calendar folder (one and only one).
1236         ([SOGoAppointmentFolder -_privacySqlString]): unescape the
1237         escaping '\' so make the carriage return a real one. This way,
1238         PgSQL 8 won't complain about escaping the string.
1239
1240         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
1241         method that create the folder if considered mandatory.
1242         ([SOGoFolder -folderIsMandatory]): new method that determines
1243         whether the folder should be created automatically or not. To be
1244         overriden by subclasses.
1245
1246         * Main/SOGo.m ([SOGo -run]): override method and create the
1247         missing system tables if needed.
1248
1249 2007-06-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1250
1251         * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
1252         -mailDateFormatter]): returns the user's date formatter.
1253
1254         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
1255         applies the user timezone to the date object before returning it.
1256
1257         * UI/Common/UIxSortButton.m: removed useless class module.
1258
1259         * UI/Common/UIxSortableTableHeader.m: removed useless class
1260         module.
1261
1262         * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1263         -contactInfos]): use the "asc" url parameter instead of "desc" to
1264         determine the ordering.
1265         ([-sortOrdering]): removed method.
1266         ([UIxContactsListView -init]): removed the "searchText" ivar.
1267         (general): the template no longer use the UIxSortableTableHeader
1268         components.
1269
1270         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1271         -defaultSortKey]): default sort following the messages arrival
1272         instead of their date.
1273         ([-isSortedDescending]): removed method.
1274         ([-imap4SortOrdering]): use the "asc" url parameter instead of
1275         "desc" to determine the ordering.
1276         (general): the template no longer use the UIxSortableTableHeader
1277         components.
1278
1279 2007-06-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1280
1281         * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
1282         removed method.
1283         ([-setQualifier:_msg], [-qualifier]): removed methods.
1284         ([UIxMailListView -defaultAction]): added code to handle the
1285         search criteria and value passed as url parameters. Also, we now
1286         handle the same search criterias as Thunderbird/Icedove.
1287
1288 2007-06-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1289
1290         * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
1291         -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
1292         the string instead of the string itself.
1293         ([UIxJSONPreferences -jsonSettingsAction]): same as above.
1294
1295         * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
1296         bool var "acceptAnyUser" that is set when the AuthenticationMethod
1297         user default is nil.
1298         ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
1299         unconditionnally returns an instance whenever acceptAnyUser is set.
1300
1301 2007-06-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1302
1303         * Main/sogod.m (main): prevent SOGo from running as root.
1304
1305 2007-06-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1306
1307         * SoObjects/SOGo/SOGoUser.m ([SOGoUser
1308         -setCurrentPassword:newPassword]): new stub method.
1309         ([SOGoUser -dateFormatterInContext:context]): new method that
1310         returns an instance of SOGoDateFormatter configured based on the
1311         user defaults.
1312
1313         * UI/Common/UIxPageFrame.m ([UIxPageFrame
1314         -relativePreferencesPath]): new method.
1315
1316         * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
1317         removed useless method.
1318
1319         * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
1320         different configurable formats (long and short date + time).
1321
1322         * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
1323
1324         * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1325         -isInternetRequest]): removed method.
1326
1327         * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1328         -jsonRepresentation]): new method with an explicit name.
1329
1330         * UI/PreferencesUI/product.plist: new bundle that provides a web
1331         ui for handling user defaults.
1332
1333         * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
1334
1335         * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
1336
1337         * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
1338
1339 2007-06-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1340
1341         * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
1342
1343 2007-06-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1344
1345         * UI/Scheduler/NSArray+Scheduler.m ([NSArray
1346         -compareEventsAscending:otherEvent]): no longer use compare: on
1347         the time objects since one of them could be an NSNull, which
1348         crashes when comparing with anything.
1349
1350         * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1351         -eventsListAction]): sort events from here.
1352         ([UIxCalListingActions -tasksListAction]): sort tasks from here.
1353
1354         * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
1355         module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
1356
1357         * SoObjects/Appointments/SOGoAppointmentFolder.m
1358         ([SOGoAppointmentFolder
1359         -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
1360         no longer sort elements from here.
1361
1362 2007-06-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1363
1364         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1365         -aclsForUser:uid]): implemented method by forwarding the request
1366         to the container. This fixes a bug where users could no longer
1367         read emails from shared folders.
1368
1369         * SoObjects/Appointments/SOGoCalendarComponent.m
1370         ([SOGoCalendarComponent -init]): "isNew" is no longer defined
1371         here, but rather in its parent class.
1372
1373         * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
1374         -stringForSecondsSinceThe70s:seconds]): new utility method.
1375
1376         * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1377         -eventsListAction]): no longer reduce the end day of one day for
1378         all day events since everything has been fixed in
1379         OCSiCalFieldExtractor.
1380
1381         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1382         -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
1383         the end date of all day events of 1 so that they stay on their
1384         real last day.
1385
1386 2007-06-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1387
1388         * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
1389
1390         * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
1391         removed method.
1392         ([-fetchCoreTasksInfos]): removed method.
1393
1394         * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1395         -init]): initialize an instance of SOGoDateFormatter.
1396         ([UIxCalListingActions -eventsListAction]): the display start and
1397         end dates are added to the listing for each event.
1398
1399         * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
1400
1401         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1402         -isAllDay]): returns YES if the "hm" url parameter is set to
1403         "allday".
1404         ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
1405         is displayed one day earlier.
1406
1407 2007-06-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1408
1409         * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1410         -_setupContext]): take the range of dates specified by the popup
1411         into account.
1412
1413         * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
1414         WODirectAction that returns WOResponse objects with the events or
1415         todos satisfying the parameters passed in the url.
1416
1417         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1418         -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
1419         "isAllDay" into account and compute the amount of days to pass to
1420         the iCalEvent.
1421
1422 2007-06-06  Francis Lachapelle <flachapelle@inverse.ca>
1423
1424         * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
1425         * SoObjects/SOGo/NSNull+Utilities.m: initial import.
1426         * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]): 
1427         new method that returns a json-formatted array of the visible tasks
1428         for the current user.
1429
1430 2007-06-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1431
1432         * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
1433         object must be present in the list of UIDs we delete the object
1434         from. Otherwise Calendar objects having no organizer and no
1435         attendees will remain in their owner's Calendar.
1436
1437         * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1438         -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
1439         first 3 elements of the path array if the url returned by
1440         baseURLInContext: returns a hostname.
1441
1442         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1443         -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
1444         nil, in which case a crash happens when calling hasPrefix:.
1445         ([SOGoMailFolder -_sharesACLs]): same as above.
1446         ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
1447         otherUsersFolderName is nil, we return nil.
1448         ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
1449         nil from [self otherUsersPathToFolder], we return nil too.
1450
1451 2007-06-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1452
1453         * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1454         -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
1455         the result of [self baseURLInContext:] to avoid a double escaping
1456         in the resulting string.
1457
1458         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
1459         the user has the "ObjectReader" role on the parent container, then
1460         he is granted the "ObjectViewer" role on this object. Same for
1461         "ObjectEraser", although this might change later.
1462
1463         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1464         -toolbar]): determine the toolbar filename based on the
1465         permissions declared by the securitymanager. The role mechanism
1466         has been adjusted on a lowerlevel so we can simplify the code.
1467
1468         * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1469         -initWithName:newNameinContainer:newContainer]): read the content
1470         directly from here. That way we can determine whether the object
1471         is being created.
1472         ([SOGoContentObject -aclsForUser:uid]): if the object is new and
1473         the ObjectCreator role is enabled, we also grant the ObjectEditor
1474         role to the current user.
1475
1476         * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
1477         changed the method paradigm to only return HTTP code 204. Not test
1478         is done whatsoever since the security manager does it for us.
1479
1480         * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
1481         removed method because the same exists in UIxFolderActions.m
1482
1483         * UI/Contacts/UIxContactsUserRightsEditor.m
1484         ([UIxContactsUserRightsEditor
1485         -setUserCanReadObjects:userCanReadObjects]): new method.
1486
1487         * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
1488         "FolderEraser" and special permission "Access Object". Removed
1489         role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
1490         can be used instead. Removed "FolderReader" since it is useless.
1491
1492         * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
1493         -vCard]): directly use the "content" ivar since it is initialized
1494         during object creation.
1495
1496         * SoObjects/Contacts/SOGoContactLDAPFolder.m
1497         ([SOGoContactLDAPFolder -init]): no longer handle the
1498         nameInContainer no the container ivars. They were removed because
1499         this class is a descendant of SOGoObject which already has them.
1500         ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
1501         returning "displayName".
1502         ([SOGoContactLDAPFolder -isFolderish]): new overriden method
1503         returning "YES".
1504
1505         * SoObjects/Appointments/SOGoCalendarComponent.m
1506         ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
1507         ([SOGoCalendarComponent -findParticipant:user]): new name for
1508         method "participant:".
1509         ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
1510         findparticipant but taking a uid string as parameter.
1511         ([SOGoCalendarComponent -contentAsString]): don't regenerate the
1512         iCalendar automatically. Instead, this is done only when the user
1513         is a "date and time viewer".
1514         ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
1515         (modifier and responder) into account by compiling them with the
1516         owner's roles.
1517
1518         * SoObjects/Contacts/SOGoContactFolder.h: removed
1519         "nameInContainer" from the list of required methods.
1520
1521         * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1522         -davContentType]): returns "text/calendar".
1523
1524         * SoObjects/Contacts/SOGoContactLDAPFolder.m
1525         ([SOGoContactLDAPFolder -davResourceType]): declare the correct
1526         groupdav resource-type.
1527
1528         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1529         -davContentType]): same as below.
1530
1531         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1532         -initWithName:newNameinContainer:newContainer]): new overriden
1533         method setting the custom owner directly.
1534
1535         * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1536         -davContentType]): same as below.
1537
1538         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1539         -davContentType]): same as below.
1540
1541         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
1542         declare "httpd/unix-directory".
1543
1544         * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
1545         "UTC" as fallback timezone instead of "Canada/Eastern".
1546         ([-hasEmail:email]): make use of the new NSArray's
1547         containsCaseInsensitiveString: method.
1548
1549         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1550         -davContentType]): declare "message/rfc822" as content type.
1551
1552         * SoObjects/Appointments/SOGoAppointmentFolder.m
1553         ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
1554         ivar in SOGoObject.
1555         ([SOGoAppointmentFolder
1556         -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
1557         ([-fetchContentObjectNames]): commented out method since it was
1558         usefull only for testing Funambol.
1559
1560         * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1561         -containsCaseInsensitiveString:match]): an enhanced version of
1562         containsObject:.
1563
1564         * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
1565         useless method.
1566         ([-showMarkDeletedButton]): removed useless method.
1567         ([-showTrashButton]): removed useless method.
1568
1569         * SoObjects/Appointments/iCalEntityObject+SOGo.m
1570         ([iCalEntityObject -userIsParticipant:user]): new proxy method
1571         that invoked isParticipant on self for each possible email
1572         addresses of the user passed as parameter.
1573         ([iCalEntityObject -userIsOrganizer:user]): same as above.
1574
1575         * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
1576         extension module.
1577
1578         * SoObjects/Appointments/SOGoAppointmentObject.m
1579         ([SOGoAppointmentObject
1580         -saveContentString:contentStringbaseVersion:baseVersion]): remove
1581         method since an event may not have an organizer.
1582
1583         * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1584         -GETAction:localContext]): clarified method. Added support for
1585         content-type (thanks to Helge Hess).
1586         ([SOGoObject -initWithName:_nameinContainer:_container]):
1587         initialize and retain the owner.
1588         ([SOGoObject -davContentType]): returns "text/plain".
1589
1590 2007-05-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1591
1592         * UI/Common/UIxObjectActions.m ([UIxObjectActions
1593         -addUserInAclsAction]): send an acl addition mail.
1594         ([UIxObjectActions -removeUserFromAclsAction]): send an acl
1595         removal mail.
1596
1597         * UI/Common/UIxFolderActions.m ([UIxFolderActions
1598         -_realActionWithFolderName:folderDict]): handle the possible
1599         presence of the "mail-invitation" url parameter. If present, the
1600         user will be redirected to the relevant folder.
1601
1602         * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
1603         ([SOGoUser -language]): new method that returns the user's
1604         preferred language, or the system's if none has been set yet.
1605
1606         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
1607         that returns the full dav url to self.
1608         ([SOGoObject -soURL]): same as above but for the so url (Web UI).
1609         ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
1610         returns the full so url to the base of the SOGo module to which
1611         self belongs, and for the specified user.
1612         ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
1613         but for the current user.
1614         ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
1615         required by the acl advisory templates and which returns a link
1616         the target user can click to activate its new subscription.
1617         ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
1618         but for inclusion of the application/x-sogo-notification part,
1619         which will be handled by the Lightning enhancer plugin.
1620
1621         * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction]) 
1622         ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
1623         do nothing yet since imap folder subscription is not handled yet.
1624
1625         * SoObjects/SOGo/SOGoContentObject.m
1626         ([-hasSupportForDefaultRoles]): removed method.
1627
1628         * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
1629         -getFullEmailForUID:uid]): new method that returns the username +
1630         email pair.
1631
1632         * SoObjects/Appointments/SOGoCalendarComponent.m
1633         ([SOGoCalendarComponent +initialize]): the default language for
1634         mail templates is now set to English.
1635
1636         * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
1637         SOGoACLAdvisory implementing the french template for user removal
1638         from acls.
1639
1640         * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
1641         SOGoACLAdvisory implementing the french template for user
1642         additions to acls.
1643
1644         * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
1645         SOGoACLAdvisory implementing the english template for user removal
1646         from acls.
1647
1648         * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
1649         SOGoACLAdvisory implementing the english template for user
1650         additions to acls.
1651
1652         * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
1653         supercall of all the acl advistory templates. The model is based
1654         on SOGoAptMailNotification except that the template encapsulates
1655         the message to be sent. Later, we might create a superclass common
1656         to all template-based emails.
1657
1658         * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
1659         -addRange:newRange]): new method that store a string
1660         representation of the NSRange passed as parameter.
1661         ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
1662         any range contained in self intersect with the one passed as parameter.
1663
1664         * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
1665         store ranges in an array to prevent them from intersecting with
1666         each other during the passes.
1667
1668 2007-05-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1669
1670         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1671         -primaryFetchMailboxInfo]): useless method. Removed.
1672
1673 2007-05-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1674
1675         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1676         -toManyRelationshipKeys]): invoke [self subfolders].
1677         ([SOGoMailFolder -subfolders]): new method containing what used to
1678         be in toManyRelationshipKeys.
1679         ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
1680         urls.
1681
1682         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1683         -allFolderPaths]): renamed version of "allFolderPathes", sorted by
1684         named and at the beginning of which we put the predefined folders.
1685
1686         * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1687         -emptyTrashAction]): new method inspired by a similar one from
1688         UIxMailListView, to which we added the ability to remove
1689         subfolders.
1690
1691         * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
1692         method. Replaced with a similar one in UIxMailFolderActions.
1693
1694         * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1695         -renameFolderAction]): implemented method.
1696         ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
1697         specified folder. Instead, we put it in the trash folder.
1698
1699         * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
1700         method, replaced with a similar method in the new
1701         UIxMailFolderAction class module.
1702         ([-deleteFolderAction]): idem.
1703
1704         * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1705         -createFolderAction]): new method implementing subfolder creation.
1706         ([UIxMailFolderActions -renameFolderAction]): new method
1707         implementing subfolder renaming (basic implementation to be
1708         finalized later).
1709         ([UIxMailFolderActions -deleteFolderAction]): new method
1710         implementing folder deletion.
1711
1712         * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
1713         web actions related to the handling of imap folder.
1714
1715 2007-05-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1716
1717         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1718         -ownerInContext:localContext]): overriden method because we are an
1719         IMAP4 client and we need a bit more intelligence to deduce the
1720         owner of the current folder.
1721         ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
1722         return an NSException so we need to be careful here to avoid a
1723         crash.
1724         ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
1725         NSException so we need to be careful here to avoid a crash.
1726
1727         * SoObjects/Mailer/SOGoMailAccounts.m
1728         ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
1729         there is no longer any concept of Intranet or Internet connection
1730         handling.
1731
1732         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1733         -sharedFolderName]): new method.
1734         ([SOGoMailAccount -otherUsersFolderName]): new method.
1735
1736         * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
1737         new javascript code and the new UIxMailAccountActions class.
1738
1739         * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
1740         javascript code and the new UIxMailAccountActions class.
1741
1742         * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
1743         new javascript code and the new UIxMailAccountActions class.
1744
1745         * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1746         -listMailboxesAction]): new method that returns a json-formatted
1747         tree of all the mailboxes available to the current user.
1748
1749         * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
1750         web actions related to the handling of mail accounts.
1751
1752         * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
1753         module.
1754
1755         * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
1756         -jsonRepresentation]): new interface method meant to be overriden
1757         by the primitive classes.
1758
1759 2007-05-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1760
1761         * UI/MailerUI/UIxMailSplashView.m: removed.
1762
1763         * SoObjects/Appointments/SOGoCalendarComponent.m
1764         ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
1765         the uid to the list only when the user email is recognized by the
1766         user manager.
1767
1768 2007-05-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1769
1770         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1771         -isDeletionAllowed]): completed method with the new imap acl api.
1772
1773         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
1774         removed method.
1775
1776         * SoObjects/SOGo/SOGoPermissions.m: added the new role
1777         "SOGoMailRole_MessageEraser".
1778
1779         * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID]) 
1780         ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
1781         "defaultUserID" method into account.
1782
1783         * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser]) 
1784         ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
1785         "defaultUserID" method into account.
1786
1787         * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
1788         methods to support the IMAP acls mentionned in the RFC 4314,
1789         removed the ones specific to Cyrus.
1790
1791         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
1792         mandatory method for subclasses. Removed the SOGoDefaultUserID
1793         global var.
1794
1795         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
1796         overriden method to return @"<default>".
1797
1798         * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1799         -defaultUserID]): overriden method to return @"<default>".
1800
1801         * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1802         -aclsForUser:uid]): overriden method.
1803         ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
1804         ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
1805         ([SOGoMailFolder -defaultUserID]): overriden method.
1806         ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
1807
1808 2007-05-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1809
1810         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1811         -aclUsersForObjectAtPath:objectPathArray]): new method that being
1812         forwarded the calles to aclUsers for the GCS-based subclasses of
1813         SOGoObject.
1814
1815         * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
1816         methods that would have been used to support IMAP acls. Replaced
1817         them with the new protocol for them that has been implemented in
1818         SOGo during the last few weeks.
1819
1820         * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1821         -hasSupportForDefaultRoles]): override method by returning "YES".
1822
1823         * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
1824         -addObjectUniquely:object]): new method with an explicit name.
1825
1826         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
1827         "acl" to "aclUsers". Now designed to return only the uid of the
1828         users involved in an ACL.
1829         ([SOGoObject -hasSupportForDefaultRoles]): new method returning
1830         "NO" by default. To indicate to the acl editor that we don't want
1831         to handle a default user.
1832
1833         * SoObjects/SOGo/SOGoPermissions.[hm]: added the
1834         SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
1835         symbols.
1836
1837         * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
1838         provides a view to the IMAP acls.
1839
1840         * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
1841
1842         * UI/WebServerResources/MailerUI.js: replaced all invocations of
1843         addEventListener to the use of prototype's Event object. Also,
1844         configured all menus programmatically following descriptions lists
1845         containing their callbacks, or nulls, submenus id or separators.
1846
1847 2007-05-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1848
1849         * UI/Common/UIxObjectActions.m ([UIxObjectActions
1850         -addUserInAclsAction]): save the previous roles of the user
1851         (unlikely) or the default roles, or None instead of saving the
1852         roles that should appear the first time in the role editor when no
1853         default has been set...
1854
1855         * SoObjects/SOGo/SOGoObject.m: defined a new constant
1856         "SOGoDefaultUserID".
1857
1858         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1859         -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
1860         ignore the "AuthorizedSubscriber" role and add the "None" role
1861         when no other role is found.
1862
1863         * UI/Common/UIxAclEditor.m: added a button for the new default
1864         user roles feature.
1865
1866         * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
1867         -_initRights]): don't take the "None" role into account when
1868         initializing the list of current roles.
1869
1870         * SoObjects/SOGo/SOGoPermissions.m: added a new void role
1871         "SOGoRole_None".
1872
1873 2007-05-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1874
1875         * SoObjects/SOGo/NSString+Utilities.m ([NSString
1876         -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
1877         There is no need to subscract the start from the length if a space
1878         is not found since the range has not changed either. Finally, the
1879         first character before the url might also be a tab or a cr, so we
1880         match it against the "urlAfterEndingChars" custom NSCharacterSet.
1881         ([NSString -stringByDetectingURLs]): modified to handle email
1882         addresses and add a correct "mailto:" link.
1883
1884 2007-05-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1885
1886         * SoObjects/Appointments/SOGoAppointmentFolder.m
1887         ([SOGoAppointmentFolder -fetchContentObjectNames]): override
1888         method to return the events in the range of 2 weeks ago up to 4
1889         weeks from "now".
1890
1891         * UI/MailPartViewers/UIxMailPartTextViewer.m
1892         ([UIxMailPartTextViewer -flatContentAsString]): use the new
1893         "stringByDetectingURLs" method to offer clickable urls.
1894
1895         * SoObjects/SOGo/NSString+Utilities.m ([NSString
1896         -stringByDetectingURLs]): this new method replaces passive URLS
1897         with active ones for HTML resolution of the text.
1898
1899 2007-05-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1900
1901         * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1902         -asQPSubjectString:encoding]): simplified method.
1903         The headers indicates "utf-8" again thank to our fix in
1904         sope-mime.
1905
1906         * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
1907         being used.
1908
1909 2007-05-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1910
1911         * UI/Common/UIxObjectActions.m ([UIxObjectActions
1912         -removeUserFromAclsAction]): implemented this method which was
1913         missing and is required to remove users from ACLs.
1914
1915         * UI/Common/UIxFolderActions.m ([UIxFolderActions
1916         -subscribeAction]): folderDict was not autoreleased, resulting in
1917         a leak...
1918
1919         * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1920         -primaryFetchProfile]): when building with libFoundation, don't
1921         use the "propertyList" method from NSString. Rather, we convert
1922         the string to an NSData instance and passit as parameter to
1923         NSDeserializer. This way, we obtain a mutable dictionary rather
1924         than an immutable one.
1925
1926         * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText]) 
1927         ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
1928         constant string "contentTypeValue".
1929         contentTypeValue is now set back to iso-8859-1 since NGMime
1930         converts extracts the data in that encoding.
1931
1932 2007-05-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1933
1934         * SoObjects/SOGo/LDAPSource.m ([LDAPSource
1935         -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
1936         "bindFields" value is present in the user defaults, use the
1937         specified fields to find the dn of the user to bind.
1938         ([LDAPSource -allEntryIDs]) 
1939         ([LDAPSource -fetchContactsMatching:match]) 
1940         ([LDAPSource -lookupContactEntry:entryID]) 
1941         ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
1942         bind and unbind the connection on each request.
1943
1944         * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
1945
1946         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1947         -contactSearchAction]): simplified method to use the facilities
1948         provided by the LDAPUserManager. No longer takes care of the
1949         "ldap-only" url parameter since all requests are handled by the
1950         usermanager now.
1951
1952         * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1953         -primaryFetchProfile]): check that the value returned is not null
1954         before interpreting it.
1955
1956         * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
1957         -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
1958         ([LDAPUserManager -_fillContactMailRecords:contact]): if the
1959         system email is already present, remove it before adding it.
1960
1961         * SoObjects/SOGo/LDAPSource.m ([LDAPSource
1962         -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
1963         loginToCheck is not empty.
1964         ([LDAPSource -fetchContactsMatching:match]): check that match is
1965         not empty.
1966         ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
1967         not empty.
1968         ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
1969         uid is not empty.
1970
1971 2007-05-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1972
1973         * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
1974         for "mail" method.
1975         ([SOGoUser -systemEmail]): returns the email formed from the
1976         username and the default mail domain.
1977         ([SOGoUser -hasEmail:email]): test whether the user has the
1978         specified email, in a case-insensitive way.
1979
1980         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1981         -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
1982         check login information.
1983
1984         * SoObjects/Contacts/SOGoContactLDAPFolder.m
1985         ([SOGoContactLDAPFolder
1986         +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1987         no longer manage LDAP connections. The requests are forwarded to
1988         the relevant LDAPSource instead.
1989
1990         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1991         -appendSystemSources]): pass LDAPSource objects to
1992         SOGoContactLDAPFolder instances.
1993
1994         * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
1995         address of the "from" field before sending the message. Otherwise,
1996         sending the mail won't work.
1997
1998         * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
1999         rewrote this method to request all the available email identities
2000         for the current user. Also, the from field also contains the full
2001         name of the user, not just his/her email address.
2002
2003         * SoObjects/Appointments/SOGoCalendarComponent.m
2004         ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
2005         from the previous module iCalEntityObject+Agenor.
2006         ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
2007         ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
2008         idem.
2009
2010         * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
2011         replacing the SOGoContactLDAPEntry module. It was renamed as such
2012         because it now receives a dictionary instead of an NGLdapEntry.
2013         It thus can now handle data from any source of LDIF data, not
2014         only coming from LDAP.
2015
2016         * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
2017         implementing most of what used to be the AgenorUserManager class.
2018         The difference is that users are cached in the forme of
2019         dictionaries and many sources are used. Also, it can be used to
2020         search LDAP contacts.
2021
2022         * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
2023         the concept of "ldap source", to be used by all the classes
2024         needing access to LDAP-provided information: addressbooks and the
2025         user manager. Most the method thereing are transcriptions of
2026         methods previously found in SOGoContactLDAPFolder. It also contain
2027         utility methods for user matching and authentification.
2028
2029         * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
2030         module, rendered useless by code refactoring.
2031
2032         * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
2033         with the freshly written "LDAPUserManager".
2034
2035 2007-05-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2036
2037         * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
2038         SOGOContactLDIFEntry.
2039
2040         * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
2041         module, obsoleted by code in SOGo/LDAPSource.[hm].
2042
2043 2007-05-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2044
2045         * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
2046         new method with an explicit name.
2047
2048 2007-05-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2049
2050         * SoObjects/Appointments/SOGoCalendarComponent.m
2051         ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
2052         replacing "isOrganizer:orOwner:" by taking only one instance of
2053         SOGoUser as parameter.
2054         ([SOGoCalendarComponent -participant:user]): new method replacing
2055         the previous "isParticipant" boolean method by returning the first
2056         participant matching the user passed as parameter. This method is
2057         used so that both the regular email address and the "system email
2058         address" of the user are matched against the participants emails.
2059
2060         * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2061         -getSystemEMailForUID:uid]): new method that returns the email
2062         formed with the user's uid and the default mail domain.
2063
2064         * SoObjects/Appointments/SOGoCalendarComponent.m
2065         ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
2066         was previously commented out.
2067
2068         * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
2069         forwared to [AgenorUserManager getSystemEmailForUID:].
2070
2071         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2072         -toolbar]): method replacing the one with the same name in the
2073         task and appointment editor classes. This method makes also use of
2074         the new method "isOrganizerOrOwner:" and "participant:" in
2075         SOGoCalendarComponent.
2076
2077         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2078         -toolbar]): removed method, replaced with a method with the same
2079         name in UIxComponentEditor.
2080
2081         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
2082         method, replaced with a method with the same name in
2083         UIxComponentEditor.
2084
2085         * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2086         -primaryFetchProfile]): the values returned from the database are
2087         converted to a put dictionary first, since the dictionary returned
2088         is actually an immutable one, which can cause a crash afterwards.
2089
2090 2007-04-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2091
2092         * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
2093         and "SOGoRole_ObjectEditor".
2094
2095         * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2096         -prepareRightsForm]): this method is no longer mandatory.
2097
2098         * UI/Contacts/UIxContactsUserRightsEditor.m
2099         ([UIxContactsUserRightsEditor
2100         -setUserCanCreateObjects:userCanCreateObjects]): new subclass
2101         module to handle acls related to the address books. Partial
2102         implementation.
2103
2104         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2105         -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
2106         newly set roles.
2107         ([SOGoFolder
2108         -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
2109         specified roles from cache.
2110         ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2111         put resulting roles in cache.
2112
2113         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
2114         initWithName:inContainer:. Instead, directly initialize the ivars
2115         as it is supposed to be to avoid an infinite loop whenever one of
2116         those two methods are overriden.
2117
2118         * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
2119         removed method.
2120
2121         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2122         -aclsForUser:uid]): override method so that SOGo won't crash when
2123         loading the contact card.
2124
2125 2007-04-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2126
2127         * SoObjects/Appointments/SOGoAppointmentFolder.m
2128         ([SOGoAppointmentFolder -_privacySqlString]): the string for the
2129         "freebusy" special user should only require opaque elements.
2130
2131 2007-04-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2132
2133         * SoObjects/Appointments/SOGoAppointmentFolder.m
2134         ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
2135         our double declaration where the resulting XML would be screwed.
2136         There is only one collection per namespace.
2137
2138         * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
2139         rfc822DateString]): new method that returns a string conform to
2140         rfc 822 and suitable for email headers.
2141
2142         * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
2143         "rfc822DateString" category method on the date we put in the
2144         header.
2145
2146 2007-04-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2147
2148         * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction]) 
2149         ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
2150         which should never be overriden.
2151         ([UIxUserRightsEditor -appendRight:newRight]) 
2152         ([UIxUserRightsEditor -removeRight:right]) 
2153         ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list]) 
2154         ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
2155         methods that can be used by the subclasses.
2156         ([UIxUserRightsEditor -prepareRightsForm]): new method that should
2157         mandatorily be overriden to prepare the elements of the subclassed
2158         form.
2159         ([UIxUserRightsEditor -updateRights]): new method that should
2160         mandatorily be overriden to update the user rights from the
2161         elements of the subclassed form.
2162
2163         * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
2164         check if the uid is already listed before adding it to our array.
2165         This is because the acl table can contain more than one record per
2166         user/object relationship.
2167
2168         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2169         -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
2170         "roles" parameter is now an NSArray instead of a string. Therefore
2171         we loop throughout the array to populate the table. All the
2172         relevant records are removed prior to the addition of the new
2173         rights.
2174
2175         * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2176         -aclsForUser:uid]): new override that returns nil until we add
2177         support for IMAP acls.
2178
2179         * SoObjects/Mailer/SOGoMailAccounts.m
2180         ([SOGoMailAccounts -aclsForUser:uid]): same as below.
2181
2182         * SoObjects/Contacts/SOGoContactLDAPFolder.m
2183         ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
2184
2185         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2186         -aclsForUser:uid]): override this method which will always return
2187         nil.
2188
2189         * SoObjects/SOGo/SOGoPermissions.[hm]: added
2190         [Public,Private,Confidential]
2191         x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
2192         SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
2193         ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
2194
2195         * SoObjects/Appointments/SOGoAppointmentFolder.m
2196         ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
2197         that defines default roles for new elements in the acl.
2198
2199         * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
2200         module and subclass of UIxUserRightsEditor specific to the
2201         handling of user rights on calendar folders.
2202
2203 2007-04-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2204
2205         * SoObjects/Appointments/SOGoAppointmentFolder.m
2206         ([SOGoAppointmentFolder -groupDavResourceType]): return both
2207         "vevent-collection" and "vtodo-collection".
2208
2209         * UI/Common/UIxUserRightsEditor.[hm]: new template class module
2210         that implements the detailed editor of user rights per-object.
2211
2212 2007-04-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2213
2214         * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2215         -rolesForObject:objectinContext:context]): no longer query objects
2216         for "roleForUser:". Instead, all objects should implement
2217         "rolesForUser:".
2218
2219         * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
2220         new method to comply with the new acl "protocol" in SOGoObject.
2221         Uses SOGoFolder's new facilities for ACLS.
2222         ([SOGoContentObject -aclsForUser:uid]): idem.
2223         ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
2224         ([SOGoContentObject -removeAclsForUsers:users]): idem.
2225
2226         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2227         -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
2228         based folders. This method is derived from the code that was in
2229         UIxAclFolder before its removal.
2230         ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2231         idem.
2232         ([SOGoFolder
2233         -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
2234         ([SOGoFolder
2235         -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
2236         ([SOGoFolder -setRoleForUsers:uidsto:role]) 
2237         ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
2238
2239         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
2240         that requires overriding by subclasses.
2241         ([SOGoObject -aclsForUser:uid]): idem.
2242         ([SOGoObject -defaultAclRoles]): idem.
2243         ([SOGoObject -setRoles:rolesforUser:uid]): idem.
2244         ([SOGoObject -removeAclsForUsers:users]): idem.
2245
2246         * UI/Common/UIxObjectActions.m: new module implementing the web
2247         actions common to SOGoObject and all its subclasses.
2248         ([UIxObjectActions -addUserInAclsAction]): new method that adds a
2249         user with the clientObject defaults user rights to the object's
2250         acl.
2251
2252         * UI/Common/UIxAclEditor.m: modified module so as to simplify it
2253         to the point where it will only list the users (and their name)
2254         associated with an object acl.
2255
2256         * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
2257         methods have been moved into SOGoObject and SOGoFolder during a
2258         refactoring.
2259
2260         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2261         -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
2262         method made useless by the programmatic handling of iCalendar
2263         objects.
2264         ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
2265         ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
2266         ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
2267
2268         * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
2269         drop on all folder nodes, not just on leaves.
2270
2271         * SoObjects/Contacts/SOGoContactLDAPFolder.m
2272         ([SOGoContactLDAPFolder
2273         -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
2274
2275 2007-04-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2276
2277         * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
2278         debugging facilities when the SOGoDebugObjectAllocation user
2279         default is set.
2280
2281 2007-04-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2282
2283         * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
2284         method that SOGo will need with non-gnustep Foundation
2285         implementation.
2286         ([NSString -stringByAppendingPathComponent:component]): new method
2287         that SOGo will need when building with libFoundation. Method
2288         removed later since it is available from
2289         Foundation/NSPathUtilities.h.
2290
2291         * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
2292         from SOGoObject.m.
2293
2294         * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
2295         every subclass to access [WOApplication context] without having to
2296         invoke it more than once.
2297
2298         * SoObjects/Appointments/SOGoCalendarComponent.m
2299         ([SOGoCalendarComponent -changeParticipationStatus:_status]):
2300         moved method from SOGoTaskObject and SOGoAppointmentObject up to
2301         their parent class.
2302
2303         * UI/Scheduler/UIxCalSelectTab.m: removed module.
2304
2305 2007-04-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2306
2307         * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2308         -vCard]): test the prefix of the card in a case-independent way.
2309
2310         * OGoContentStore/OCSContactFieldExtractor.m
2311         ([OCSContactFieldExtractor
2312         -extractQuickFieldsFromContent:content]): we no longer accept
2313         records in a format other than versit vCard so we can get rid of a
2314         lot of code.
2315
2316 2007-04-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2317
2318         * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2319         -selectorComponentClass]): restored method.
2320
2321 2007-04-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2322
2323         * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
2324         -shouldDisplayCurrentTask]): the current task is not displayed if
2325         it is NOT completed or if the "showCompletedTasks" flag is set.
2326         The logic was inverted in Lightning and is now in SOGo too.
2327
2328 2007-04-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2329
2330         * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
2331         want the "work" url instead of the "home".
2332
2333         * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
2334         -_saveSnapshot]): save url values from snapshot.
2335         ([UIxContactEditor -initSnapshot]): load url values from snapshot.
2336
2337         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2338         -calendarList]): new method replacing "availableCalendars".
2339
2340         * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
2341         -calendarFolders]): we now take the list of subscribed calendar
2342         from the container.
2343
2344         * SoObjects/Appointments/SOGoAppointmentFolder.m
2345         ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
2346         method derived from and replacing [UIxCalView calendarFolders].
2347
2348 2007-03-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2349
2350         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2351         -toManyRelationshipKeys]): don't put the predefined folders in the
2352         list if they are returned by the server.
2353
2354         * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
2355         longer store the "flattenedBlocks" in a dictionary since the
2356         object will be deleted anyway and we don't need to put the folders
2357         in cache.
2358
2359         * UI/MailPartViewers/UIxMailPartHTMLViewer.m
2360         ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
2361         attachment path into account when computing the part urls.
2362
2363 2007-03-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2364
2365         * UI/Contacts/UIxContactsListViewContainer.m
2366         ([UIxContactsListViewContainer -additionalFolders]): take the list
2367         of subscribed folders from the new property list used for the user
2368         settings. The value of its key is SubscribedFolders for the
2369         dictionary entry named "Contacts".
2370
2371         * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2372         -canAccessContentAction]): new method to override the one from
2373         UIxFoldersActions by taking into account the fact that, this time,
2374         the clientObject is an ldap folder. Removed many method that used
2375         to be related to the handling of the user selector.
2376
2377         * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
2378         to make sure they can be removed.
2379
2380         * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
2381         populate the calendar entries based on the user settings plist.
2382
2383         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2384         -selectForMailerAction]): restored method.
2385
2386         * UI/Scheduler/UIxCalendarSelector.m: new template module derived
2387         from a simplified version of the old UIxContactEditor (removed).
2388
2389         * UI/Contacts/UIxContactsUserFolders.m: new template module for
2390         selecting users or user folders through an LDAP search of which
2391         the results are displayed as a tree.
2392
2393         * UI/WebServerResources/UIxMailEditor.js: moved previous generic
2394         method "onContactAdd" here since the Mailer is now the only module
2395         to use it when composing emails.
2396
2397         * UI/WebServerResources/generic.js: added code for handling the
2398         new scheme used for describing SOGo folders, common code to handle
2399         folder addition or removal.
2400
2401         * UI/Common/UIxFolderActions.m ([UIxFolderActions
2402         -activateFolderAction]): new method that change the "active"
2403         settings in the folder-related fields in the user settings.
2404         ([UIxFolderActions -deactivateFolderAction]): see above.
2405
2406         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2407         -checkRightsAction]): removed method.
2408
2409         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2410         -updateAdditionalAddressBooksAction]): removed method.
2411
2412         * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2413         -updateCalendarsAction]): removed method.
2414
2415 2007-03-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2416
2417         * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2418         -checkRightsAction]): removed method.
2419
2420         * UI/Common/UIxFolderActions.m ([UIxFolderActions
2421         -canAccessContentAction]): new method designed to replace
2422         [UIxCalMainView checkRightsAction] in a more universal way.
2423
2424 2007-03-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2425
2426         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2427         -roleOfUser:uidinContext:context]): take all the subkeys into
2428         account, not only the "personal" folder.
2429
2430         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2431         -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
2432         to the new components.
2433
2434         * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
2435         (see below).
2436
2437         * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2438         -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
2439         field of the sogo_user_profile table, where the user-customizable
2440         changes will be saved.
2441         ([AgenorUserManager -getUserSettingsForUID:uid]): new method
2442         similar to the one above, using the "settings" field where the
2443         automatic settings will be saved.
2444
2445         * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
2446         module to bind the userdefaults to a property list contained in a
2447         specified field of the sogo_user_profile table.
2448         ([AgenorUserDefaults
2449         -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
2450         added a "fieldName" parameter.
2451
2452         * UI/Common/UIxFolderActions.m: new module implementing web
2453         actions common to all GCS-based folders.
2454
2455 2007-03-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2456
2457         * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
2458         put a carriage return after the day name.
2459
2460         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2461         -readFreeBusyAction]): restored method.
2462
2463 2007-03-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2464
2465         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2466         -defaultAction]): remade module to redirect automatically to the
2467         Calendar url.
2468
2469         * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
2470
2471 2007-03-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2472
2473         * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2474         -deleteAction]): new web method to delete personal addressbook
2475         folders.
2476
2477         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2478         -delete]): override method to refuse the deletion of the folder if
2479         its nameInContainer is "personal".
2480
2481         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
2482         that forwards the deletion request to the folder manager.
2483
2484 2007-03-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2485
2486         * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
2487         -zoomList]): new method that returns the list of available zoom factors.
2488
2489         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2490         -changeStatusAction]): rewrote method.
2491
2492         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2493         -_handleAttendeesEdition]): make sure "attendeesNames" has a
2494         length > 0 before computing the attendees. Otherwise there will be
2495         an invalid empty entry.
2496         ([UIxComponentEditor -_handleOrganizer]): new method that adds the
2497         organizer when there are attendees and remove it when the
2498         attendees are removed.
2499
2500 2007-03-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2501
2502         * UI/Scheduler/UIxAttendeesEditor.m): new component.
2503
2504         * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
2505         the task and appointment editors. Now a container component
2506         handling the common elements of tasks and events.
2507
2508         * UI/Scheduler/UIxTaskEditor.m: same as below.
2509
2510         * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
2511         a subclass of UIxComponentEditor but a subcomponent of it.
2512
2513         * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
2514         toolbar can have the special value "none" to indicate there is
2515         none attached to the window.
2516
2517         * SoObjects/Appointments/SOGoCalendarComponent.m
2518         ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
2519         method.
2520         ([SOGoCalendarComponent -isParticipant:email]): new method.
2521         ([SOGoCalendarComponent -calendar:create]): takes one parameter
2522         "create" which is a boolean indicating whether we want to create
2523         the calendar if it does not exist.
2524
2525 2007-03-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2526
2527         * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
2528         of a table, the same way the dayly and weekly views have been for
2529         a few months now.
2530
2531 2007-02-09  Helge Hess  <helge.hess@opengroupware.org>
2532
2533         * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
2534           resourcetype
2535
2536         * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
2537           property to point at the user folder
2538
2539 2007-03-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2540
2541         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2542         -userInContext:]): returns "SOGoUser".
2543
2544         * SoObjects/Appointments/SOGoCalendarComponent.m
2545         ([SOGoCalendarComponent -contentAsString]): overriden method that
2546         takes the privacy into account and discard the relevant fields if
2547         needed by generating a new content string and caching it.
2548         ([SOGoCalendarComponent
2549         -saveContentString:contentStringbaseVersion:baseVersion]): if the
2550         new method above has cached a content string, release it and set
2551         it to nil so that it will have to be regenerated in the case it is
2552         requested further.
2553         ([SOGoCalendarComponent -_filterPrivateComponent:component]):
2554         discard the fields that have to be hidden when the card is
2555         private.
2556
2557         * SoObjects/Appointments/SOGoAppointmentFolder.m
2558         ([SOGoAppointmentFolder
2559         -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
2560         sure the cards are now handled as instances of
2561         SOGoCalendarComponent instead of SOGoContentObject so that their
2562         content string is taking the privacy classifiction into account.
2563         ([SOGoAppointmentFolder -_privacySqlString]): new method that
2564         generates a query to determine what information can be given and
2565         if the card itself has to be shown.
2566
2567         * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
2568         -getICalPersonsFromValue:selectorValue]): removed useless
2569         "isAccessRestricted" method.
2570
2571         * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
2572         -setStyle:_style]): test whether the values of orgmail and
2573         partmails are null before manipulating them, otherwise SOGo sends
2574         a "rangeOfString:" message to an NSNull, which makes it crashes.
2575
2576         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2577         -extractQuickFieldsFromEvent:_event]): we now use the new
2578         "symbolicAccessClass" method from iCalEntity to determine the
2579         value of the "classifiction" field.
2580         ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
2581         as above.
2582
2583 2007-03-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2584
2585         * SoObjects/Appointments/SOGoAppointmentFolder.m
2586         ([SOGoAppointmentFolder
2587         -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
2588         see below, the query is adapted consequently.
2589
2590         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2591         -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
2592         renamed to "classification" and can any integer as value.
2593         ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
2594         idem.
2595
2596 2007-02-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2597
2598         * UI/MailPartViewers/UIxMailPartHTMLViewer.m
2599         ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
2600         don't prepend anything to the class and id named. Instead, we
2601         make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
2602         class.
2603
2604 2007-02-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2605
2606         * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2607         -rolesOfUser:logininContext:context]): if object does not exists
2608         (for example when it's being created), the current user has the
2609         same rights on it than he/she has on its parent container.
2610
2611         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2612         -nameExistsInFolder:objectName]): methods that tests if a c_name
2613         corresponding to the name passed as parameter is present in the db
2614         folder.
2615
2616 2007-02-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2617
2618         * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2619         -rolesForObject:objectinContext:context]): test for
2620         "rolesOfUser:inContext:" in addition to "roleOfUser:...".
2621
2622         * SoObjects/Appointments/SOGoCalendarComponent.m
2623         ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
2624         returns the roles of the user on the container object if the event
2625         is uncreated.
2626
2627 2007-02-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2628
2629         * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
2630         alternativeViewer a multipart/related message is being handled.
2631
2632         * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
2633         from scratch.
2634
2635         * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
2636         text/html component before text/plain.
2637
2638         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2639         -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
2640         fetching of HTML parts.
2641
2642         * SoObjects/Appointments/SOGoCalendarComponent.m
2643         ([SOGoCalendarComponent -componentTag]): new template method that
2644         returns the vcalendar tag of the current object.
2645         ([SOGoCalendarComponent -component]): new method that returns the
2646         first object matching [self componentTag] within the current
2647         calendar object. This method replaces 'firstEventInCalendar:' as
2648         well as "firstTaskInCalendar:".
2649         ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
2650         moved method from SOGoAppointmentObject.m.
2651
2652 2007-02-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2653
2654         * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
2655         module which shows each selected user's calendar in a different
2656         column instead of mixing their events together.
2657
2658         * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
2659         replaced use of [NSString stringByTrimmingWhiteSpaces] with
2660         [NSString stringByTrimmingSpaces].
2661
2662         * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
2663         "cnWithoutQuotes" instead of "cnForDisplay", which no longer
2664         exists.
2665
2666         * UI/Scheduler/UIxCalDayOverview.m,
2667         UI/Scheduler/UIxCalDayChartview.m,
2668         UI/Scheduler/UIxCalDayListview.m,
2669         UI/Scheduler/UIxCalWeekOverview.m,
2670         UI/Scheduler/UIxCalWeekChartview.m,
2671         UI/Scheduler/UIxCalWeekListview.m,
2672         UI/Scheduler/UIxCalInlineMonthOverview.m,
2673         UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
2674
2675 2007-02-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2676
2677         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2678         -appendPersonalSourcesInContext:context]): release connectoin
2679         channel when everything is done.
2680
2681         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2682         -newAbAction]): new action method to crate a new contact folder
2683         from the web UI.
2684
2685         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
2686         that requests the folder manager to create a folder table with the
2687         specified type at the specified path. The type is taken from [self
2688         folderType].
2689
2690         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2691         -folderType]): implemented.
2692
2693         * SoObjects/Appointments/SOGoAppointmentFolder.m
2694         ([SOGoAppointmentFolder -folderType]): implemented.
2695
2696         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2697         -appendPersonalSourcesInContext:context]): we now fetch all
2698         folders with type "Contact" that belong to the current user.
2699         ([SOGoContactFolders -newFolderWithName:name]): new method to
2700         create a new contact folder.
2701
2702         * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
2703         resulting url with [NSString+Utilities hostlessURL] instead of
2704         using NSURL. This is because the url in question sometimes has a
2705         hostname and sometimes not. "hostlessURL" ensure the hostname is
2706         removed anyway.
2707         ([UIxComponent -applicationPath]): same as above.
2708
2709 2007-02-08  Ludovic Marcotte <ludovic@inverse.ca>
2710
2711         * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
2712         folders before doing the one on messages.
2713
2714 2007-02-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2715
2716         * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
2717         makeObjectsPerform:withObject:withObject: for GNUstep
2718         compatibility.
2719         
2720         * OGoContentStore/GNUmakefile, Protocols/common.make,
2721         SoObjects/common.make, UI/common.make: install in
2722         GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
2723
2724 2007-02-07  Ludovic Marcotte <ludovic@inverse.ca>
2725
2726         * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
2727         "Agendas"
2728
2729 2007-02-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2730
2731         * UI/MailerUI/UIxMailTree.m ([UIxMailTree
2732         -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
2733         for the moment.
2734
2735         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2736         -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
2737         password would be accepted anyway as long as its length was > 0.
2738         This can be the case ONLY when LDAP is disabled otherwise we have
2739         a serious security issue...
2740
2741         * SoObjects/Appointments/SOGoAppointmentObject.m
2742         ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
2743         user is not an organizer nor a participant, he is declared as
2744         "Owner" if he owns the calendar the entry where the entry is
2745         contained. Other cases should not be possible.
2746
2747 2007-02-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2748
2749         * UI/Contacts/UIxContactEditor.m: display and handle the new
2750         Freebusy URL entry.
2751
2752         * SoObjects/Contacts/SOGoContactLDAPFolder.m
2753         ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
2754         from the server.
2755
2756         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2757         -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
2758         entry.
2759
2760 2007-01-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2761
2762         * SoObjects/Appointments/SOGoCalendarComponent.m
2763         ([SOGoCalendarComponent -sendEMailNotifications]): new method that
2764         returns the value of ud "SOGoAppointmentSendEMailNotifications"
2765         (iMIP/iTIP).
2766         ([SOGoCalendarComponent
2767         -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
2768
2769 2007-01-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2770
2771         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
2772         -defaultAction]): invoke "flushMailCaches" on [self clientObject]
2773         so that the mailbox cache is refreshed everytime the user presses
2774         on "get mail". I doubt a mailbox cache really is useful in general
2775         anyway.
2776
2777 2007-01-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2778
2779         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2780         -userInContext:]): if the lookup is on "freebusy.ifb" and the
2781         username is "anonymous" the user is automatically set to
2782         "freebusy".
2783
2784 2007-01-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2785
2786         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2787         -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
2788         user with password "freebusy".
2789
2790         * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
2791         -contentAsString]): the default timerange is now 14 days before
2792         currentday and 1 month after.
2793
2794 2007-01-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2795
2796         * SoObjects/Appointments/SOGoAppointmentFolder.m
2797         ([SOGoAppointmentFolder
2798         -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
2799         escape the record string in a way suitable with XML encoding.
2800
2801 2007-01-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2802
2803         * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
2804         calendar view would not be updated properly.
2805
2806 2007-01-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2807
2808         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2809         -newStartDate]): fix the handling of the component start date
2810         depending on the "hm" and the "day" parameters.
2811
2812         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
2813         -roleOfUser:uidinContext:context]): set role of current user to
2814         "Assistant" if the object that is accessed is "freebusy.ifb".
2815
2816         * SoObjects/Appointments/SOGoAppointmentFolder.m
2817         ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
2818         moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
2819         ([SOGoAppointmentFolder
2820         -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
2821         lookupCalendarFolderForUID: method, which doesn't do security
2822         checks.
2823
2824 2007-01-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2825
2826         * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
2827         accessor that returns the comma-separated list of users with role
2828         "Assistant".
2829         ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
2830         ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
2831         "checkedUsers". Instead, each user is either classified in the
2832         list of assistants or the list of delegates.
2833
2834 2006-12-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2835
2836         * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
2837         -composeAction]): method imported from removed container modules.
2838         ([UIxMailMainFrame -mailFolderName]): method imported from removed
2839         container modules.
2840
2841         * UI/MailerUI/UIxMailPopupView.m: a new special popup component
2842         for wrapping UIxMailView with the "popupview" action.
2843
2844         * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
2845         since its the component that displays the same splash screen than
2846         the one in Thunderbird/Icedove.
2847
2848         * UI/MailerUI/UIxMailAccountViewContainer.[hm],
2849         UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
2850         UI/MailerUI/UIxMailListViewContainer.[hm],
2851         UI/MailerUI/UIxMailViewContainer.[hm]: removed
2852
2853 2006-12-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2854
2855         * UI/WebServerResources/HTMLElement.js: replaced the functional
2856         selectNode() and deselectNode() functions with select() and
2857         deselect() methods of HTMLElement.
2858
2859         * UI/WebServerResources/ContactsUI.js: cleanup, most of the
2860         events are initialized from here now instead of in the HTML code.
2861
2862         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2863         -checkRightsAction]): new method similar to the one with the same
2864         name in UIxCalMainView.m.
2865
2866         * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
2867         code to handle the publishing of freebusy information.
2868
2869 2006-12-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2870
2871         * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2872         -checkRightsAction]): new action method that returns a
2873         comma-separated list of boolean values matching the right of the
2874         current user to "view" (as a permission) each foreign calendar
2875         stored in his preferences.
2876
2877         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
2878         new method that sets a customOwner, which can be returned with
2879         ownerInContext it set.
2880
2881         * SoObjects/Appointments/SOGoAppointmentFolder.m
2882         ([SOGoAppointmentFolder
2883         -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
2884
2885 2006-12-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2886
2887         * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
2888         below, but for the Contacts and Calendar collections.
2889
2890         * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
2891         new acl facilities method from sope-gdl/GCSFolder.m.
2892
2893         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2894         -roleOfUser:uidinContext:context]): new method that returns
2895         SOGoRole_Assistant when the user is an assistant or a delegate on
2896         the "personal" ab object. This is so that setting roles on the
2897         SOGoContactFolders object is not required.
2898
2899 2006-12-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2900
2901         * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
2902
2903         * UI/Contacts/UIxContactsAclsSelection.m: new component specific
2904         to the handling of the user selection for the acls.
2905
2906         * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
2907         values from SoPermissions with ones specific to SOGo.
2908
2909         * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
2910         handles the storage for the acls.
2911
2912         * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
2913         class for SOGoAppointmentObject and SOGoTaskObject.
2914
2915         * UI/Common/UIxAclEditor.[hm]: new component that provides a
2916         general editor for folder acls.
2917
2918         * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
2919         renamed.
2920         ([NSString -davMethodToObjC]): method that returns the method name 
2921         for a DAV property implementation.
2922
2923         * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
2924         NSArray.
2925         ([NSArray -stringsWithFormat:format]): new method that returns
2926         formatted occurences of the strings stored in the array.
2927
2928         * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
2929         +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
2930         subclass module of SoWebDAVValue that supports collections of
2931         properties of the same type.
2932
2933 2006-11-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2934
2935         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2936         -lookupFolder:ofClassNamed:inContext:]): added the ability to
2937         configure the name of the SOGoDraftFolders with the ud var
2938         "SOGoDraftsFolderName".
2939
2940 2006-11-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2941
2942         * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2943         -userTimeZone:username]): new method that returns the timezone for
2944         the specified user depending on his preferences and the server
2945         defaults
2946
2947         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2948         -stringForData:partInfo:]): take the encoding into account and
2949         translate the text to "normal" before processing the charset data.
2950
2951 2006-11-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2952
2953         * UI/WebServerResources/generic.js: the progress indicator is on
2954         when loading the page so we turn it off, and we turn it back on
2955         whenever we switch to another module...
2956
2957         * UI/WebServerResources/SchedulerUI.js: make sure the day view
2958         synchronization mechanism works everywhere.
2959
2960         * UI/WebServerResources/generic.js: the log window is not only
2961         visible when UIxDebugEnabled is set.
2962
2963         * UI/WebServerResources/SchedulerUI.js: the month overview's day
2964         cells are now initialized with the DOM event interface methods
2965         instead of with html attributes.
2966
2967         * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
2968         headers (should be made configurable at some point)...
2969
2970         * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
2971         "not null" constraint on startdate, enddate, isopaque,
2972         participants and partmails.
2973
2974 2006-11-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2975
2976         * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
2977         -hoursToDisplay]): prevent a crash by retaining the
2978         "hoursToDisplay" array after it's created.
2979         ([UIxCalDayTable -clickableHourCellClass]): new method for the new
2980         clickable hours DIV.
2981
2982         * UI/WebServerResources/SchedulerUI.js: made the event
2983         participation status modification asynchronous, which also fixes a
2984         bug where the window would sometimes close before the accept or
2985         decline action was completed. Also, adapted the event handling
2986         related to the days or weeks view with the new DIV-based layout.
2987
2988         * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
2989
2990         * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
2991         DIV-based presentation of the days and weeks.
2992
2993         * SoObjects/Appointments/SOGoTaskObject.m: same as below...
2994
2995         * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
2996         might return an exception so we have to handle it if we don't
2997         wanna crash...
2998
2999 2006-11-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3000
3001         * UI/WebServerResources/SchedulerUI.js: updated the list
3002         initialization code to use the new event management scheme, adding
3003         what was missing to be able to delete events and tasks again.
3004
3005         * UI/WebServerResources/MailerUI.js: added code to activate the
3006         "Get mails" button. Fixed a bug which prevented messages to be
3007         deleted.
3008
3009         * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
3010         navigation and focus handling of INPUTs.
3011
3012 2006-11-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3013
3014         * UI/WebServerResources/MailerUI.js: added code to handle the
3015         possible drag and drop events to manager in the mail module.
3016         Moving messages, opening parent folders, ...
3017
3018         * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
3019         the drag and drop manager as well as the interface to HTMLElement
3020         to trigger drag and drop events.
3021
3022         * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
3023         action to move the current message to the mailbox named after the
3024         value of parameter "tofolder".
3025
3026         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3027         -moveToFolderNamed:folderNameinContext:]): new method base on
3028         -trashInContext:.
3029
3030 2006-11-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3031
3032         * UI/WebServerResources/generic.js: added and activated many
3033         "load" handlers to configure generic widgets used across the
3034         modules. More events are now handled in a DOM-fashion way instead
3035         of by setting the relative attributes in the templates.
3036
3037         * UI/Templates/UIxSortableTableHeader.wox: all the events are
3038         declared from the javascript DOM onload handlers.
3039
3040         * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
3041         library.
3042
3043         * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
3044         declared from the javascript DOM onload handlers.
3045
3046         * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
3047         we want everything to be separated from each other, as much as
3048         possible.
3049
3050         * UI/WebServerResources/SOGoDragHandles.js: new module containing
3051         the "SOGoDragHandlesInterface", implementing methods that can be
3052         attributed to DIV so that they can be used as drag handles.
3053
3054         * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3055         -asQPSubjectString]): initialize the tmp strings with '0' to make
3056         sure they don't contain garbage.
3057
3058 2006-11-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3059
3060         * UI/WebServerResources/MailerUI.js: register the messageList
3061         table as a dragging source and the leaf of the navigation tree as
3062         dnd destinations to the DNDManager.
3063
3064         * UI/WebServerResources/generic.js: initialize tabs from the
3065         "unload" event listener that is added programmatically instead of
3066         from the template... Also, added the new DNDManager object.
3067
3068         * UI/WebServerResources/HTMLTableElement.js: added code to
3069         simulate XUL drag n drop events. This code will possibly be moved
3070         to HTMLElement.js instead later...
3071
3072         * SoObjects/Contacts/SOGoContactLDAPFolder.m
3073         ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
3074         below.
3075
3076         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3077         -_qualifierForFilter:filter]): only search records which starts
3078         with the specified pattern.
3079
3080 2006-11-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3081
3082         * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3083         -asQPSubjectString]): new method that returns the special QP
3084         string with its qp declaration for email subjects.
3085         ([SOGoDraftObject -bodyPartForText]) 
3086         ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
3087         double-encode data in UTF-8.
3088
3089         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3090         -newStartDate]): new method to determine the start date depending
3091         on the URL parameters, the current day and the current time.
3092         ([UIxComponentEditor -toolbar]): new method to determine the
3093         filename of the toolbar that should be drawn depending on the
3094         ownership and the list of attendees of the task/event wrt to the
3095         current user...
3096
3097         * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3098         -setDayStartHour:aStartHour]): adjust the minutes to the next
3099         quarter of hour, if not already set to a quarter.
3100
3101         * UI/WebServerResources/UIxAppointmentEditor.js,
3102         UI/WebServerResources/UIxTaskEditor.js: added code to manage start
3103         date change.
3104
3105 2006-11-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3106
3107         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3108         -loadValuesFromComponent:component]): handles access class
3109         (privacy) and status.
3110
3111         * UI/Contacts/UIxContactsListViewContainer.m
3112         ([UIxContactsListViewContainer -additionalFolders]): return nil if
3113         [self additionalAddressBooks] returns an empty string.
3114
3115 2006-11-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3116
3117         * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
3118         rangesOf7Days]): enhanced and debugged algorithm to feed the array
3119         with slices where the first day is still in the requested month.
3120
3121         * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
3122         non-popup pages.
3123
3124         * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
3125         of events in the day boxes of the calendar's monthly view.
3126
3127         * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
3128         -davContentType]): declare "text/calendar".
3129
3130         * SoObjects/Appointments/SOGoAppointmentObject.m
3131         ([SOGoAppointmentObject -davContentType]): declare
3132         "text/calendar".
3133
3134         * SoObjects/Appointments/SOGoAppointmentFolder.m
3135         ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
3136         HTTP methods are handled by SOPE and requires nil to be returned,
3137         this method now invokes the new
3138         "requestNamedIsHandledLater:inContext:" method to check that.
3139         ([SOGoAppointmentFolder
3140         -requestNamedIsHandledLater:nameinContext:context]): new methods
3141         that returns "YES" only for the "OPTIONS" http method (for now...).
3142         ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
3143         overloaded method to append the "access-control" and
3144         "calendar-access" DAV abilities to the initial declaration.
3145
3146         * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
3147         imitate the look of Sunbird/Lightning's monthly view.
3148
3149         * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
3150         UIxCalMonthViewOld.[hm].
3151
3152 2006-11-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3153
3154         * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
3155         ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
3156         method.
3157         ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
3158         returns an image name based on the participation status of the
3159         current attendee.
3160
3161         * UI/WebServerResources/SchedulerUI.js: same strip down as for
3162         generic.js below.
3163
3164         * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks]) 
3165         ([UIxContactsListViewContainer -additionalFolders]) 
3166         ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder]) 
3167         ([UIxContactsListViewContainer -currentAdditionalFolder]): new
3168         methods to handle the external addressbooks a user has subscribed
3169         too, by retriving them from his preferences.
3170
3171         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3172         -updateAdditionalAddressBooksAction]): new method that updates the
3173         user settings with the list of addressbook he has subscribed to.
3174
3175         * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
3176         module for the address book selector.
3177
3178         * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
3179         a toolbar with two buttons ("add" and "remove") to manage the
3180         additional addressbooks a user might subscribe to.
3181
3182         * UI/WebServerResources/ContactsUI.js: added code to handle
3183         "external addressbooks" from the Javascript point-of-view, by
3184         extending existing methods and adding code for the "add ab" and
3185         "remove ab" buttons.
3186
3187         * UI/WebServerResources/generic.js: moved extensions methods to
3188         DOM elements to separate files for better clarity.
3189
3190         * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
3191         new method that returns "pageContent" as class, but also "popup"
3192         for the DIV where the page content lies, so that we can manipulate
3193         the content of popup's with CSS identifiers.
3194
3195 2006-10-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3196
3197         * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3198         -displayStyle]): new method that returns a string containing the
3199         css style relative to the current appointment cell. This code is
3200         currently inactive but might be reused later.
3201
3202         * UI/WebServerResources/SchedulerUI.js: added code to handle the
3203         display of the selected day (the day pointed by the mouse, or the
3204         current day when changing the view).
3205
3206         * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3207         -dayCellClasses]): new method that returns a string containing the
3208         css classes applicable to the current cell, depending on the
3209         position of the day in the week, the day of today and the
3210         requested day.
3211
3212         * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
3213         -currentContactAptBorder]): new method that returns the
3214         appropriate border color for the specified user.
3215
3216         * SoObjects/Appointments/SOGoAppointmentObject.m
3217         ([SOGoAppointmentObject
3218         -saveContentString:contentStringbaseVersion:baseVersion]):
3219         overloaded method that parse new events and detects if they have
3220         an organizer or not. If they are new and have no organizer set
3221         (Sunbird/Lightning...), the owner of the event is set as
3222         organizer.
3223
3224         * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
3225         category that provides facility methods and interfaces to the
3226         AgenorUserManager.
3227
3228         * SoObjects/Contacts/product.plist: give full access to ANY
3229         authenticated user, not just the owner (to every objects...).
3230
3231 2006-10-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3232
3233         * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
3234         every replica widgets are declared as such to their master
3235         counterpart. Take the days into account when displaying the time
3236         range taken by the appointment.
3237
3238         * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3239         -getICalPersonsFromValue:selectorValue]): method taken from
3240         UIxFreeBusyUserSelector, that is shared both by
3241         UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
3242
3243         * SoObjects/Appointments/SOGoAppointmentFolder.m
3244         ([SOGoAppointmentFolder
3245         -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.
3246
3247         * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
3248         derived and taken as a subset of UIxFreeBusyUserSelector that
3249         implements the table part of the FreeBusy view. Most of the
3250         methods of UIxFreeBusyUserSelector relative to that table were
3251         moved into UIxFreeBusyUserSelectorTable, which can also be used as
3252         a standalone view for AJAX operations.
3253
3254 2006-10-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3255
3256         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3257         -vCard]): change reverted.
3258
3259         * UI/Contacts/UIxContactEditor.m: check whether the client contact
3260         folder has selector "globallyUniqueObjectId" before calling that
3261         method.
3262
3263         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3264         -vCard]): the "setVClass" NGVCard method really is "setClass"
3265         instead.
3266
3267         * SoObjects/Contacts/SOGoContactLDAPFolder.m
3268         ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
3269         request the "streetAddress" instead of the "streetaddress".
3270         ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
3271         mails that *contain*, and not just *start with* the search
3272         pattern.
3273
3274         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3275         -vCard]): mark address returned from LDAP as the work address.
3276
3277         * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
3278         span covered with the anchor, not only the textual information
3279         within.
3280
3281         * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
3282         argument (event or task) to newEvent in the appointmentListMenu.
3283         Make the appointmentsListView display the appointmentsListMenu.
3284
3285         * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
3286         12 to 50 before displaying "...".
3287         ([SOGoAptFormatter -fullDetailsForApt::]): display location only
3288         if its length > 0, whether location itself is nil or not...
3289         ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
3290         of which the length > 0.
3291
3292 2006-10-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3293
3294         * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
3295         french and ISO dates.
3296
3297         * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
3298         from UIxContactSelector to handle contact lists (current and
3299         additional contacts).
3300
3301         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3302         -_freeBusyAsText]): added handling of an "additional"-named query
3303         parameter that describe the number of additional days after
3304         enddate that should be returned.
3305
3306         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3307         -_responseForResults:results]): give priority to results with
3308         "c_uid" fields. If none returned, use the first contact received.
3309
3310         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3311         -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
3312         2 and "CANCELLED" to 0.
3313
3314 2006-10-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3315
3316         * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
3317         of start and end dates to short string dates.
3318
3319         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3320         -readFreeBusyAction]): new method that returns an array of numbers
3321         corresponding to the state in the freebusy of each "quarter of an
3322         hour" between the "sday" and "eday" date parameters passed in the
3323         url. This permits to handle the display of the freebusy with Ajax
3324         mechanisms.
3325         ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
3326         since the free busy displays 2 days ahead.
3327
3328         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3329         -contactSearchAction]): new action that returns the uid and the
3330         username + email of the user whose name contain the value of the
3331         "search" url parameter.
3332
3333         * SoObjects/Appointments/SOGoAppointmentFolder.m
3334         ([SOGoAppointmentFolder
3335         -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
3336         useful for the computing of the status of the freebusy.
3337
3338         * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
3339         -init]): new component that incarnates a user selector for events
3340         inspired by the new one found in Thunderbird Lightning.
3341
3342 2006-10-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3343
3344         * UI/WebServerResources/generic.js: added code to enable or
3345         disable anchor visually (following our internal algorithm).
3346
3347         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
3348         added new "url" ivar with its classic accessors.
3349         ([UIxComponentEditor -urlButtonClasses]): new method that returns
3350         the class strings for the url button on the appointment/task
3351         editor (depending on the validity of the url).
3352
3353         * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
3354         UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
3355         the template to match the Lightning's new task/appointment editor.
3356
3357         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
3358
3359         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
3360
3361 2006-10-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3362
3363         * SoObjects/Contacts/SOGoContactLDAPFolder.m
3364         ([SOGoContactLDAPFolder
3365         -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
3366
3367         * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
3368         iCalEntityObject instances instead of just iCalEvent's.
3369
3370         * SoObjects/Appointments/SOGoAppointmentFolder.m
3371         ([SOGoAppointmentFolder
3372         -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
3373
3374         * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
3375         bad way of handling ownership that way.
3376
3377         * SoObjects/Contacts/SOGoContactLDAPFolder.m
3378         ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
3379         on "cn", just like Mozilla.
3380
3381 2006-10-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3382
3383         * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
3384         "to" should be retained, otherwise it will be autoreleased and a
3385         crash will occur.
3386
3387         * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3388         -writeAction]): updated method to fetch the card before initing
3389         the snapshot.
3390
3391         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3392         -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
3393         of NSNotFound.
3394
3395         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3396         -iCalStringTemplate]): start and due date are now optional.
3397
3398         * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3399         -setDayStartHour:aStartHour]):  added a new "isDisabled" ivar with
3400         appropriate accessors to be settable through the templates.
3401
3402         * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
3403         new "isDisabled" ivar with appropriate accessors to be
3404         settable through the templates.
3405
3406         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3407         -availableCalendars]): new method that list the calendars to which
3408         the user has subscribed.
3409         ([UIxComponentEditor -componentOwner]): returns the owner of the
3410         editted object.
3411
3412         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3413         -extractQuickFieldsFromTodo:_task]): set the start and enddate of
3414         quickentries to null whenever each or all of them are null, by
3415         providing an impossible timestamp from with NSNotFound as value.
3416
3417 2006-10-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3418
3419         * UI/WebServerResources/UIxMailEditor.js: update the algorithm
3420         that handles the creation of new fields with the new APIs and the
3421         new node structure on the page.
3422
3423         * UI/Scheduler/UIxAppointmentEditor.m,
3424         UI/Scheduler/UIxTaskEditor.m:
3425         refactored to user UIxComponentEditor as parent class.
3426
3427         * UI/Scheduler/UIxComponentEditor.[hm]: new class module
3428         containing the methods common to the UIxTaskEditor and the
3429         UIxAppointmentEditor.
3430
3431 2006-10-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3432
3433         * SoObjects/Appointments/SOGoAppointmentFolder.m
3434         ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
3435         the handling of time-ranges.
3436
3437         * UI/WebServerResources/ContactsUI.js: specify a notification type as
3438         parameters when onConfirmContactSelection in invoked.
3439
3440         * UI/WebServerResources/generic.js: specify a notification type as
3441         parameters when onContactRemove in invoked.
3442
3443         * UI/WebServerResources/SchedulerUI.js: when the user deselects
3444         all calendars, select his entry.
3445
3446 2006-10-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3447
3448         * UI/WebServerResources/SchedulerUI.js: edit and delete events
3449         with their owner-relative urls. Generate a correct entry in the
3450         css color table when a user is added to the calendars list. Put
3451         the same color next to the user id.
3452
3453         * UI/WebServerResources/generic.js: implemented some new helper
3454         methods.
3455
3456         * SoObjects/Appointments/SOGoAppointmentFolder.m
3457         ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
3458         entries if their owner is not the current user.
3459
3460         * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3461         -displayClasses]): return the correct class for the current event
3462         representation depending on its owner.
3463
3464         * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
3465         and associate a color for each user login depending on its
3466         position in the list.
3467
3468         * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
3469         -currentRowCSSClass]): return the correct class for the current
3470         row depending on the owner of the event.
3471
3472         * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
3473         -setColors:colors]): new method to associate a color table with
3474         each user in the list.
3475
3476         * SoObjects/Appointments/SOGoAppointmentFolder.m
3477         ([SOGoAppointmentFolder
3478         -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
3479
3480         * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
3481         NSObject to associate an instance with a user.
3482
3483 2006-10-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3484
3485         * UI/WebServerResources/SchedulerUI.js: added handling of multiple
3486         calendars.
3487
3488         * UI/WebServerResources/ContactsUI.js: added handling of
3489         notification of changes to contact selectors.
3490
3491         * UI/WebServerResources/generic.js: added handling of notification
3492         of changes to contact selectors.
3493
3494         * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3495         -updateCalendarsAction]): proxy method to update the user
3496         preference table with the new selected calendar uids.
3497
3498         * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3499         -calendarsContactsAction]): new method.
3500
3501         * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes]) 
3502         ([UIxContactSelector -setHasCheckBoxes:aBool]) 
3503         ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
3504         permit the drawing of checkboxes instead of card icons.
3505
3506         * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
3507         wrap a selector the the "Calendars" tab.
3508
3509         * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
3510         new user calendar selector.
3511
3512 2006-10-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3513
3514         * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
3515         may cover hour 0 to hour 23.
3516
3517         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3518         -iCalStringFromQueryParameter:format:]): dates explicitly set to
3519         utc tz.
3520
3521         * UI/WebServerResources/SchedulerUI.js: manage both lists of
3522         objects wrt to the toolbar actions.
3523
3524         * UI/WebServerResources/generic.js: added code to the "String"
3525         class to decode number-encoded char entities.
3526
3527         * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3528         -batchDeleteAction]): new method to delete selected entries in the
3529         lists.
3530
3531         * SoObjects/Appointments/SOGoAppointmentFolder.m
3532         ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
3533         that delete identified entries in batch.
3534
3535         * UI/SOGoUI/UIxComponent.m ([UIxComponent
3536         -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
3537
3538         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
3539         UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3540         -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
3541         -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3542         -saveAction]):
3543         return a UIxJSClose component if everything went fine.
3544
3545         * UI/Scheduler/UIxTaskEditor.h: interface extracted from
3546         UIxTaskEditor.m.
3547
3548         * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
3549         UIxAppointmentEditor.m.
3550
3551         * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
3552         a very light page with javascript code to close a window, by
3553         calling a method on the opener if specified. This component is
3554         designed to work as a response to form postings.
3555
3556 2006-10-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3557
3558         * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
3559         SOGoAppointmentObject adapted for the handling of tasks.
3560
3561         * SoObjects/Appointments/NSArray+Appointments.[hm]: category
3562         extracted from SOGoAppointmentObject.
3563
3564         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3565         -saveUrl]): returns the url needed to POST the new form to.
3566         redirect the user to <aptid>/editAsAppointment instead of /edit,
3567         so that SOGoAppointmentFolder can return the correct object type.
3568
3569         * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
3570         -compareAptsAscending:_other]): accept empty start or end dates.
3571
3572         * SoObjects/Appointments/SOGoAppointmentFolder.m
3573         ([SOGoAppointmentFolder
3574         -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.
3575         ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
3576         components of type "vtodo" as well as "vevent".
3577         ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
3578         url specified ends with AsTask or AsAppointment, returns the
3579         an object of the appropriate class, otherwise deduce it from its
3580         content if the HTTP method is "PUT", otherwise read its type from
3581         the quick table.
3582
3583         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3584         -extractQuickFieldsFromTodo:_task]): extract quick fields from
3585         tasks.
3586
3587         * UI/Scheduler/UIxCalView.m ([UIxCalView
3588         -fetchCoreAppointmentsInfos]): replacement methods for
3589         fetchCoreInfos but by retrieving object with component "vevent".
3590         ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
3591         components.
3592
3593         * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
3594         UIxCalAptListView adapted for the handling of tasks.
3595
3596         * UI/Scheduler/UIxTaskProposal.[hm],
3597         UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
3598         clones of the UIxAppointment* classes for the handling of tasks.
3599
3600         * UI/WebServerResources/UIxTaskEditor.js: clone of
3601         UIxAppointmentEditor adapted for the handling of tasks.
3602
3603         * UI/WebServerResources/SchedulerUI.js: added support for tasks.
3604         Scroll the daily view to the appropriate hour when an appointment
3605         is selected in the appointments list.
3606
3607 2006-10-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3608
3609         * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3610         -setDayStartHour:aStartHour]): specifies the user timezone on the
3611         given date.
3612
3613         * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
3614         as timezone.
3615
3616         * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate]) 
3617         ([NSCalendarDate -driftedDate]): methods made useless by a better
3618         comprehension of the NSTimeZone API...
3619
3620 2006-10-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3621
3622         * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
3623         new methods from the NSCalendarDate methods.
3624
3625         * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
3626         extending UI/Scheduler/NSCalendarDate+Scheduler.m.
3627         ([NSCalendarDate
3628         +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).
3629         ([NSCalendarDate -adjustedDate]): this method returns another
3630         instance set to the correct hour after the original date was set
3631         from a non-GMT timezone. This date can be used for storage.
3632         ([NSCalendarDate -driftedDate]): this method does exactly the
3633         opposite of -adjutedDate, that is, it enables the method
3634         hourOfDay, minuteOfHour etc... to return the values according to
3635         the original date's timezone. This date CANNOT be used for storage.
3636
3637         * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
3638         -shortDateString]): new method that will return a "short date
3639         string" (yyyymmdd) from a calendar date object.
3640
3641         * UI/SOGoUI/UIxComponent.m ([UIxComponent
3642         -_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.
3643
3644         * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
3645         to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
3646
3647 2006-10-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3648
3649         * UI/WebServerResources/SchedulerUI.js: added code to scroll the
3650         view of the day at the height of hour 8:00.
3651
3652         * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
3653         ([UIxCalView -dayEndHour]): returns 24.
3654
3655         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction]) 
3656         ([UIxContactFoldersView -newAction]): invoke
3657         _selectActionForApplication: on self with the proper attribute too.
3658
3659         * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
3660         we now use the action mechanism in UIxContactsListView to keep the
3661         same view for the contact selectors and the regular contact view.
3662
3663         * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
3664         UIxContactsListViewContainerBase.[hm]
3665
3666         * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
3667
3668         * UI/WebServerResources/generic.js: generalized emailstring
3669         handling functions. Generalized address book access functions.
3670
3671         * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
3672         -isPopup]): return YES if the "popup" query parameter is set.
3673
3674         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3675         -defaultAction]): keep the url parameters when redirecting.
3676         ([UIxContactFoldersView -selectForSchedulerAction]) 
3677         ([UIxContactFoldersView -selectForMailerAction]): new action
3678         methods for the /scheduler-contacts and /mailer-contacts invocations.
3679
3680         * SoObjects/SOGo/SOGoObject.m: compose the action url using the
3681         newly available NSString+URL category.
3682
3683         * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
3684         -asURLParameters]): handle dictionary entries which could be
3685         instances of NSArray rather than NSString.
3686
3687         * SoObjects/SOGo/NSString+URL.m ([NSString
3688         -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
3689         ([NSString -urlWithoutParameters]): new method that returns the
3690         url without its parameters.
3691
3692         * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
3693
3694         * SoObjects/SOGo/NSDictionary+URL.[hm],
3695         UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
3696
3697         * UI/WebServerResources/UIxMailEditor.js: add support for
3698         additions of different types (to, cc, bcc) of recipients from the
3699         address book.
3700
3701         * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
3702         "<?xml..." header.
3703
3704         * UI/Contacts/UIxContactsMailerSelection.m,
3705         UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
3706         UI/Contacts/UIxContactsSelectionView.m to provide a different set
3707         of widgets depending on the application invoking the contact list.
3708
3709 2006-09-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3710
3711         * UI/WebServerResources/ContactsUI.js: hide the current contact
3712         whenever the user changes of contact folder.
3713
3714         * UI/WebServerResources/UIxContactEditor.js: the contact UID is
3715         now provided by the template when loading the page.
3716
3717         * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3718         -iCalPersonWithUid:uid]): new method taken from removed module
3719         'iCalPerson+UIx';
3720
3721 2006-09-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3722
3723         * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
3724         -categoriesAsString]): same as below.
3725
3726         * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
3727         vcalendar API's iCalEvent instead of the removed SOGoAppointment.
3728
3729         * SoObjects/Appointments/SOGoAppointmentObject.m
3730         ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
3731         ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
3732         helper method.
3733
3734         * SoObjects/Appointments/SOGoAppointmentFolder.m
3735         ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
3736         hackish test to detect whether the request concernes VEVENT's or
3737         anything else. Return events only in the former case.
3738         ([SOGoAppointmentFolder
3739         -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
3740         c_name quickfield so that the calendar list can identify the
3741         appointments with their complete "filename".
3742
3743         * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
3744         groupsOfClass:fromSource: to parse the given vcalendar.
3745
3746         * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
3747
3748         * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
3749
3750         * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
3751         obsolete class.
3752
3753         * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
3754
3755 2006-09-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3756
3757         * SoObjects/Appointments/SOGoAppointmentFolder.m
3758         ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
3759         sensitive to the CalDAV method names.
3760         ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
3761         "calendar-query" CalDAV method name.
3762
3763         * UI/WebServerResources/ContactsUI.js: removed a lot of useless
3764         code coming originally from MailerUI.js.
3765
3766         * UI/WebServerResources/UIxContactEditor.js: imitate the
3767         Thunderbird address book by completing the display name with the
3768         content of the first and last name fields, until the display name
3769         is modified manually.
3770
3771         * UI/WebServerResources/generic.js: added a "trim" method to the
3772         String class.
3773
3774         * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
3775         -displayName]): new method that returns the display name from "cn"
3776         or from the "displayName" key if found.
3777
3778         * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3779         -initSnapshot]): check if "[card n]" returns anything to avoid a
3780         crash.
3781
3782         * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
3783         that returns an unparsed doctype definition for the pages.
3784
3785         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3786         -vCard]): set the card's fn to attribute "displayName" if found
3787         before "cn".
3788
3789 2006-09-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3790
3791         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3792         -vCard]): handle the "streetAddress" and "l" fields.
3793
3794         * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
3795         header fields by converting the tables to DIVs and SPANs.
3796
3797         * UI/WebServerResources/generic.css: attempted unification of font
3798         families and size across all the elements. changed the
3799         logConsole's "position" from "fixed" to "absolute" to avoid
3800         performance issues.
3801
3802 2006-09-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3803
3804         * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
3805         empty the contact view when the current contact is being deleted.
3806
3807         * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
3808         parse the email field and provide the address full name if found
3809         as the "contactFN" parameter.
3810
3811         * UI/WebServerResources/generic.js (openMailTo): do not give a
3812         name to the opened window so that serveral ones can be opened at
3813         the same time.
3814
3815         * UI/MailPartViewers/UIxMailPartTextViewer.m
3816         ([UIxMailPartTextViewer -flatContentAsString]): override method by
3817         replacing carriage returns with "<br />" in the result string from
3818         super's implementation.
3819
3820         * UI/Contacts/UIxContactView.m ([UIxContactView
3821         -_urlOfType:aType]): don't manage non-mailto urls through
3822         javascript, let the user decide what's best for him.
3823
3824         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3825         -newAction]): transfer all the query parameters by using the
3826         "asURLParameters"'s result string from [self queryParameters].
3827
3828         * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3829         -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
3830         query parameters and put their values (if any) into the snapshot.
3831
3832         * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
3833         carriage-returns to "<br />".
3834         ([UIxContactView -workCompany]): explicitly initialize company to
3835         nil if org is nil or empty.
3836
3837         * UI/WebServerResources/UIxContactEditor.js: updated validation
3838         code after we added and renamed some fields.
3839
3840         * UI/WebServerResources/ContactsUI.js: added code to cache contact
3841         cards and to handle card updates.
3842
3843 2006-09-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3844
3845         * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
3846         test the length of the returned string since they will never be
3847         nil.
3848
3849         * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
3850         return self if the process went successful, returns an exception
3851         otherwise (and only otherwise...).
3852
3853         * OGoContentStore/OCSContactFieldExtractor.m
3854         ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
3855         adapted method to the new VCard api. Since the cards are stored in
3856         vcard format, we no longer deal with a dictionary but with a
3857         NGVCard object...
3858
3859 2006-09-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3860
3861         * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
3862         return a string with a "mailto" url.
3863         ([UIxContactView -_urlOfType:aType]): generic method to return a
3864         url string with a html anchor pointing to it.
3865
3866         * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
3867         since subclass "UIxContactEditor" did nothing. Implemented code to
3868         display and modify the values parsed from the vcards, displayed in
3869         a way similar to the Thunderbird addressbook.
3870
3871         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3872         -save]): new dummy method.
3873
3874         * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
3875         -save]): made method void.
3876
3877 2006-09-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3878
3879         * UI/Contacts/UIxContactView.m: added many wrapper methods to
3880         display blocks of data Ã  la Thunderbird Addressbook. If data is
3881         available, those wrappers (around the NGVCard methods) will
3882         enclose the results in a proper HTML output with the correct label
3883         (if present), otherwise it will return an empty string.
3884         ([UIxContactView -vcardAction]): new action to return the contact
3885         as text/vcard (for exporting).
3886
3887         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3888         +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
3889
3890         * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
3891         -vCard]): create a new NGVCard instance when no data is available
3892         and retain it.
3893         ([SOGoContactGCSEntry -save]): save the vCard using the new
3894         "versitString" API method/message.
3895
3896         * UI/Contacts/UIxContactView.h: separated interface from
3897         UIxContactView.m.
3898
3899         * UI/WebServerResources/ContactsUI.js: add-ed code to download card
3900         views and display them beneath the list.
3901
3902 2006-09-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3903
3904         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
3905         the timezone even when it's the server timezone.
3906
3907         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3908         -privateContacts:inContext:]): no long configure the calendar
3909         object with the user's timezone since it's now accessible
3910         application-wide throught the SOGoObject methods.
3911
3912         * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
3913         method. Removed the "backendTimeZone" method.
3914
3915         * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
3916         instead of SoComponent.
3917
3918         * SoObjects/Appointments/SOGoAppointmentObject.m: 
3919         ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
3920         [self serverTimeZone] instead of "EST" (which was removed).
3921
3922         * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
3923         "timeZone" ivar and its accessors.
3924
3925         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
3926         centralized method returing the timezone configured in the
3927         userdefaults db or "Canada/Eastern" if missing.
3928         ([SOGoObject -userTimeZone]): new centralized method returing the
3929         timezone of the current user or the server timezone if missing
3930         from the user configuration table.
3931
3932 2006-09-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3933
3934         * UI/WebServerResources/SchedulerUI.js: implemented caching of
3935         date selectors.
3936
3937         * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
3938         return a path based on the object's context instead of the first
3939         level in SOGo's object hierarchy...
3940
3941 2006-09-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3942
3943         * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
3944         be clicked.
3945
3946         * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
3947         timezone ([self viewTimeZone]) to the WEMonthOverview component to
3948         avoid a confusion with the days.
3949
3950         * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
3951         can now be clicked.
3952
3953         * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
3954         imitate Sunbird's synchronization between the 3 visible views.
3955
3956         * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
3957         sure the numbers in dateString are formatted so as to take 4 chars
3958         for the year and 2 for the day and the month, otherwise
3959         NSCalendarDate will return a nil date.
3960         ([UIxComponent -applicationPath]): return a path based on the
3961         object's context instead of the second level in SOGo's object
3962         hierarchy...
3963
3964 2006-09-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3965
3966         * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
3967         user's timezone abbreviation to the date string passed as parameter to
3968         NSCalendarDate to generate an accurate date instance. Do the same
3969         when no date is specified and today is chosen.
3970
3971         * UI/WebServerResources/UIxAppointmentEditor.js: convert the
3972         form's time values to integers before comparing them.
3973
3974         * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime]) 
3975         ([UIxCalAptListView -currentEndTime]): initialize the resulting
3976         dates timezone with [self viewTimeZone].
3977
3978         * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
3979         "viewTimeZone" ivar destined to hold an instance of the user's
3980         timezone in memory.
3981         ([UIxComponent -viewTimeZone]): take the timezone from the user's
3982         prefs.
3983
3984 2006-08-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3985
3986         * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
3987         rearranged the layout.
3988
3989         * UI/WebServerResources/UIxAppointmentEditor.js: added code to
3990         manage showing and hiding appointment details.
3991
3992         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3993         -privateContacts:inContext:]): init the SOGoAppointmentFolder's
3994         timezone by taking the current user's timezone setting.
3995
3996         * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
3997
3998         * SoObjects/Appointments/SOGoAppointmentObject.m
3999         ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
4000         set default timezone to EST, although this code should be
4001         rewritten to handle a system and a user default value.
4002
4003         * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4004         -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
4005         take the values from the hour and minute INPUTs when data is
4006         POSTed since we no longer use the UIxTimeSelector component.
4007         ([UIxTimeDateControl -selectableHours]) 
4008         ([UIxTimeDateControl -selectableMinutes]): new methods used by the
4009         template SELECTs to display reasonable and acceptable values
4010         instead of all the possibilities.
4011
4012         * UI/WebServerResources/generic.js: adapted code for the new
4013         implementation of the UIxContactSelector component (added a
4014         "remove" button, removed the previous INPUT and replaced them with
4015         links of class "button").
4016
4017         * UI/Scheduler/UIxTimeDateControl.h: separated interface from
4018         UIxTimeDateControl.m.
4019
4020         * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay]) 
4021         ([UIxCalDayTable -currentAppointmentHour]): new methods that
4022         returns correctly formatted values used as attributes for JS code.
4023
4024         * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4025         -initialContactsAsString]): renamed implementation of
4026         initialParticipants.
4027         ([UIxContactSelector -currentContactId]) 
4028         ([UIxContactSelector -currentContactName]): new methods used when
4029         listing the initial contacts in the widget. Currently, both return
4030         the person's cn but the latter should ultimately return a user
4031         fullname.
4032
4033         * UI/Contacts/UIxContactSelector.h: separated interface from
4034         UIxContactSelector.m.
4035
4036         * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
4037         all javascript code is now put in Scheduler.js/generic.js.
4038
4039         * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
4040         moved into NSCalendarDate+Scheduler instead.
4041
4042         * SoObjects/Appointments/SOGoAppointmentFolder.m
4043         ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
4044         configure the timezone from SOGoUserFolder when the instance is
4045         being created.
4046         ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
4047         the value of the new "timezone" ivar.
4048
4049 2006-08-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4050
4051         * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
4052         the date selector in the first page and the container of the
4053         future calendar selector in the second page.
4054
4055         * UI/WebServerResources/generic.js: added code for handling tabbed
4056         views.
4057
4058         * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
4059         returns the bundle name associated to the current running product.
4060
4061 2006-08-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4062
4063         * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
4064         exception by invoking a timeout on the opener rather than invoking
4065         the list refresh method.
4066
4067         * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
4068         removed method.
4069
4070         * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters]) 
4071         ([UIxCalWeekView -prevWeekQueryParameters]) 
4072         ([UIxCalWeekView -nextWeekQueryParameters]) 
4073         ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
4074         that return the dates relatively to the current day.
4075         ([UIxCalWeekView -lastWeekName]) 
4076         ([UIxCalWeekView -currentWeekName]) 
4077         ([UIxCalWeekView -nextWeekName]) 
4078         ([UIxCalWeekView -weekAfterNextWeekName]) 
4079         ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
4080         methods that returns the label for the corresponding weeks.
4081
4082         * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
4083         used by UIxCalDayView and UIxCalWeekView to display the events
4084         occuring in one or more days.
4085
4086 2006-08-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4087
4088         * UI/Scheduler/UIxCalMainView.m: extended class to populate the
4089         entries in the new "monthMenu" and "yearMenu".
4090
4091         * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
4092         method to return the current day as a string formatted depending
4093         on the current locale.
4094
4095         * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate]) 
4096         ([UIxCalAptListView -endDate]): "today" is now the default filter
4097         for displayed events.
4098         ([UIxCalAptListView -currentSerialDay]): new method returning the
4099         date of the current enumerated appointment in serial form
4100         (yyyymmdd).
4101
4102         * UI/WebServerResources/SchedulerUI.js: added code to select the
4103         relevant day when an appointment is selected. Added code to popup
4104         a month and a year menu whenever the header entries are clicked in
4105         the calendar widget.
4106
4107         * UI/WebServerResources/generic.js: made addClassName and
4108         removeClassName methods of HTMLElement.
4109
4110 2006-08-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4111
4112         * UI/WebServerResources/MailerUI.js: fixed the contact creation
4113         from email addresses.
4114
4115         * UI/WebServerResources/generic.js: centralized the search-related
4116         functions here since the same code was used across the 3
4117         applications.
4118
4119         * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate]) 
4120         ([UIxCalAptListView -endDate]): return the required dates needed
4121         depending on the value given to the "filterpopup" url parameter.
4122
4123         * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
4124         code by invoking UIxComponent's labelForKey:.
4125
4126         * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
4127         [self pageResourceManager] instead of [self resourceManager].
4128
4129         * UI/Contacts/UIxContactEditorBase.m: invokes
4130         globallyUniqueObjectId on the clientobject's class instead of the
4131         hardcoded "SOGoFolder".
4132
4133         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4134         -newAction]): redirect the "new" action to the personal (default)
4135         contact folder.
4136
4137         * SoObjects/SOGo/SOGoObject.m ([SOGoObject
4138         +objectWithName:inContainer:]): new constructor.
4139
4140         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4141         -lookupContactWithId:recordId]): always create a contact object,
4142         even if it does not exist.
4143
4144 2006-08-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4145
4146         * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
4147         component that lays out the different components of SOGoCalendar.
4148         Only serves as an Objective-C counterpart to its xml template.
4149
4150         * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
4151         from its .m file.
4152
4153         * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
4154         display a widget to handle the information displayed in the
4155         appointments list. Not currently used, lacks implementation.
4156
4157         * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
4158         display a calendar as a dynamic widget from where one can select
4159         the current visible day.
4160
4161         * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
4162         extracted from UIxCalInlineMonthOverview.m.
4163
4164         * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
4165         calendarPageURL methods. The javascript code is handled by .js
4166         files as much as possible...
4167
4168         * UI/WebServerResources/ContactsUI.js,
4169         UI/WebServerResources/MailerUI.js: adapted to the code refactoring
4170         in generic.js.
4171
4172         * UI/WebServerResources/SchedulerUI.js: implemented functions to
4173         handle the new widgets. XmlHTTPRequest code taken from
4174         MailerUI.js.
4175
4176         * UI/WebServerResources/generic.js: put some functions related to
4177         element selections as methods to HTMLElement and HTMLTableElement.
4178
4179         * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
4180         display the list of appointments (embodies the code-size of
4181         UIxCalAptListView; answers to the "aptlist" method).
4182
4183 2006-08-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4184
4185         * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
4186         -correctURLAction]): new short action method replacing the method
4187         below by taking far less code.
4188
4189         * SoObjects/Appointments/SOGoAppointmentFolder.m
4190         ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
4191         with an action in the view-related code.
4192
4193         * UI/Scheduler/UIxAppointmentEditor.m: invoke
4194         "stringByEscapingHTMLString" on the resulting value to avoid
4195         issues with accented characters.
4196         ([-jsCode]): removed method since the javascript code was merged
4197         into SchedulerUI.js.
4198
4199 2006-08-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4200
4201         * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
4202         new class method that returns an iCalPerson based on the UID given
4203         as param.
4204
4205         * UI/Contacts/UIxContactsListViewContainerBase.m: 
4206         UIxContactsListViewContainer renamed to serve as a base class for
4207         the contact lists in both the contact editor and the contact
4208         selectors.
4209
4210         * SoObjects/Contacts/SOGoContactLDAPFolder.m
4211         ([SOGoContactLDAPFolder
4212         -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
4213         setUserIdentifier:setRootDN:]): an LDAP field specifying the
4214         loginname of the users can now be specified.
4215
4216         * UI/WebServerResources/generic.js: added code to manage contact
4217         lists through the new implementation of the UIxContactSelector.
4218
4219         * UI/Templates: put the templates related to SchedulerUI in its
4220         own directory.
4221
4222         * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4223         -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
4224         entry for "uid" with the field name representing the login name of
4225         the user in the corresponding LDAP branch.
4226
4227 2006-08-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4228
4229         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4230         -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
4231         request is a PUT, always create an entry, even if we're not sure
4232         it does exist.
4233
4234 2006-08-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4235
4236         * UI/WebServerResources/ContactsUI.js: implemented live-search.
4237
4238         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
4239         -appendSystemSourcesInContext:context]): populated method with
4240         code that creates entries mapped to instances SOGoContactFolder,
4241         based on the configuration found in the NSUserDefaults under the
4242         key "SOGoLDAPAddressBooks".
4243         ([SOGoContactFolders
4244         -lookupName:nameinContext:contextacquire:acquire]):
4245         "contactsources" do not exist anymore, SOGoContactFolder was split
4246         into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
4247         and one protocol: SOGOContactFolder, instead.
4248         ([SOGoContactFolders -contactFolders]): new accessor used by the
4249         views of SOGoContactXXXFolder to list the possible sources.
4250
4251         * SoObjects/Contacts/SOGoContactObject.h: new protocol that
4252         defines the methods that UIxContactsView, ..Editor and so on...
4253         can expect.
4254
4255         * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
4256         defines the methods that UIxContactsListViewBase expects as well
4257         as the data fields returned in the contact lists.
4258
4259         * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
4260         returns entries an LDAP server. Conforms to the new
4261         SOGOContactFolder protocol.
4262
4263         * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
4264         returns a vCard based on contact entries from an LDAP server.
4265         Conforms to the new SOGOContactObject protocol.
4266
4267         * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
4268         ([NGVCardSimpleValue -vCardEntryString]): generates the correct
4269         entry for the textual representation of the vCard.
4270
4271         * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
4272         extension.
4273
4274         * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
4275         "SOGoContactObject".
4276
4277         * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
4278         method that generates a textual representation of the vcard.
4279
4280         * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
4281
4282         * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
4283         "SOGoContactFolder".
4284
4285         * SoObjects/Contacts/SOGoContactSource.h,
4286         SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
4287         protocols.
4288
4289         * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4290         -singleAttributeWithName:key]): new method that returns the first
4291         object associated with an ldap key (where generally one value is
4292         returned by key).
4293         ([NGLdapEntry
4294         -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
4295         map the entry into an NSDictionary for processing by
4296         UIxContactsListViewBase.m with the least possible overhead.
4297
4298         * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
4299         extension.
4300
4301 2006-08-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4302
4303         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4304         -privateContacts:inContext:]): now returns an instance of
4305         SOGoContactFolders.
4306
4307         * UI/Contacts/UIxContactsListViewContainer.m
4308         ([UIxContactsListViewContainer -contactFolderName]): new method to
4309         return the absolute path to the current contact folder, called
4310         from within the template.
4311
4312         * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
4313         JS code to initialize the 'currentContactFolder' generic var.
4314
4315         * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
4316         +contactFolderWithSource:inContainer:andName:]): new class
4317         method meant to return an instance connected to the specified
4318         source. Currently useless but won't be anymore in the next few
4319         days.
4320
4321         * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
4322         the "lookupFreeBusyObject" method since it does not exist.
4323
4324         * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
4325         as a "view" for the SOGoContactFolders object. Does nothing but
4326         redirect the browser to the URL of the personal address book of
4327         the user. It does not even have a template.
4328
4329         * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
4330         implementing the SOGoContactSource protocol. Does nothing
4331         currently but will be used to implement access to the personal
4332         address book of the user stored in the SOGo database.
4333
4334         * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
4335         protocol defining an API common to all possible types of contact
4336         sources.
4337
4338         * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
4339         serving as the root of the contact folders available to the
4340         current user. Correctly lists the contact sources in webdav.
4341
4342 2006-08-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4343
4344         * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
4345         -composeAction]): new action method that permits external object
4346         to write a message from the default (primary) account.
4347
4348         * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4349         -initSnapshot]): new method with code taken from "defaultAction"
4350         but needed for others.
4351         ([UIxContactEditorBase -writeAction]): new action designed to
4352         compose the correct URL needed to obtain the MailerUI's email
4353         editor with the correct "mailto" parameter.
4354
4355         * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
4356         Common so that other modules can use it.
4357
4358         * UI/Contacts/UIxContactsListViewContainer.m: container to make it
4359         easier to manage both ajax and non-ajax requests.
4360
4361         * UI/Contacts/UIxContactsFilterPanel.m: clone of
4362         UIxMailFilterPanel, but applicable to contact lists.
4363
4364         * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
4365         -vcardContentFromSOGoContactRecord]): use the new standard methods
4366         created for each type of entry. If a line is determined to not
4367         contain information, it will be skipped.
4368
4369         * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4370         +initialize]): init defaultMailDomain with the user default
4371         "SOGoDefaultMailDomain".
4372
4373 2006-08-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4374
4375         * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4376         -saveAction]): reorganized methods to only have ONE return point.
4377         Invoke saveRecord: directly on the clientObject instead of
4378         saveContentString, which does the same thing anyway.
4379
4380         * SoObjects/Contacts/NSDictionary+Contact.m
4381         ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
4382         method to convert the dictionary returned with the user submission
4383         to a record in VCARD format to be stored in the database.
4384
4385 2006-08-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4386
4387         * UI/WebServerResources/MailerUI.js: when opening the context menu
4388         of the message list, select the message below the mouse cursor and
4389         deselect the other selected messages temporarily. This mimics the
4390         behaviour of Thunderbird for that matter and was already
4391         implemented for the entries of the folder tree.
4392
4393         * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
4394         -iconForMenuItem]): new method that returns the fully qualified
4395         relative URL to the icon representing the mailbox, or the default
4396         mailbox icon if needed.
4397
4398         * UI/SOGoUI/UIxComponent.m ([UIxComponent
4399         -urlForResourceFilename:filename]): automatically return an empty
4400         string whenever the filename passed as argument is nil.
4401
4402         * UI/WebServerResources/MailerUI.js: open the mailboxes with the
4403         "desc" parameter set to 1 so that they are sorted in descending
4404         order by default. Also, added "onHeaderClick()", triggered by
4405         clicking on the message list header elements.
4406
4407         * UI/MailerUI/UIxMailSortableTableHeader.m
4408         ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
4409
4410         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
4411         -isSortedDescending]): defaults to "YES" when the sort order is
4412         not specified.
4413
4414 2006-07-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4415
4416         * UI/WebServerResources/MailerUI.js:
4417         - message cache: set the max num of cached messages to 20. Limit
4418         the cached message size to 30000 bytes.
4419         - ajax: when a message request is called while one is already
4420         being performed, the latter will be cancelled. Idem when
4421         retrieving the content of a mailbox.
4422         - folder tree: when a mailbox is selected because of the URL
4423         requested (initMailboxSelection), the dtree is expanded throughout
4424         the mailbox entry's parent hierarchy to ensure it is made visible
4425         when the page is being displayed. (new function: expandUpperTree).
4426         - mailbox loading: when loading a mailbox where a message was
4427         previously selected, we invoke its url with the "pageforuid"
4428         parameter correctly specified. During callback processing, we scan
4429         the table for the related row and reselect it.
4430         Also, the message area is set blank before loading any mailbox.
4431
4432         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
4433         -defaultAction]): if the "pageforuid" parameter is passed in the
4434         url, take its value and invoke [self firstMessageOfPageFor:]
4435         consequently to deduce the first message to display. Otherwise,
4436         set it to "idx", otherwise set it to 0.
4437         ([UIxMailListView -firstMessageOfPageFor:]): new method
4438         that determines the first message of the page where the message
4439         passed as parameter is contained.
4440
4441         * UI/WebServerResources/UIxMailListView.js: removed this module,
4442         its code was put in MailerUI.js instead.
4443
4444 2006-07-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4445
4446         * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
4447         which returns the nodes for the parent specified in "parentMenu".
4448         Used to generate the javascript code for the folder dtree.
4449
4450         * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
4451         using that container-template are now using UIxMailMainFrame
4452         since UIxMailPanelFrame had no real interest. File removed.
4453
4454         * UI/WebServerResources/dtree.{css,js}: new files to handle
4455         javascript-generated mailbox tree. Modified from original version
4456         by integrating the previous code with the one we are using for
4457         selections and mailbox handling. Minor visual enhancements too...
4458
4459 2006-07-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4460
4461         * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
4462         returned, put it in an NSArray before returning it (fixes
4463         bug#217).
4464
4465 2006-07-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4466
4467         * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
4468         that returns a url string stripped from its "http://hostname"
4469         prefix.
4470
4471         * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
4472
4473         * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
4474
4475 2006-07-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4476
4477         * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
4478         -mailDateFormatter]): retrieve the timezone from the user settings
4479         and pass it to the returned dateFormatter. Also, the dateFormatter
4480         is kept in a static variable to avoid useless
4481         creations/destructions.
4482
4483         * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
4484         -setTimeZone:newTimeZone]): new accessor to specify the timezone.
4485
4486         * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:]) 
4487         ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
4488         s/Criteria/Text/ to handle the "criteria" form parameter.
4489
4490 2006-07-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4491
4492         * UI/WebServerResources/uix.css: enhanced the toolbar appearance
4493         to integrate better with the firefox look&feel. Added entries for
4494         the new "menu" DIV class (popup menus).
4495
4496         * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
4497         takes any chunk of text as param, detects the user email and the
4498         optional first and last names and return them in a well-formatted
4499         way. Renamed "getSelection" to "getSelectedNodes" to avoid a
4500         namespace conflict. Added "onMenuClick(node, event, menuId)" to
4501         handle popup menus through "onclick" element attributes (node =
4502         this, event = event and menuId = name of the menu DIV id to
4503         popup).
4504
4505         * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4506         -snapshot]): add an entry for "email" into the snapshot
4507         dictionary if a "contactEmail" URL parameter was detected and if
4508         the entry for "email" is empty.
4509
4510         * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
4511         button now invokes the newContact() js function in ContactsUI.js
4512         instead of opening "new" directly. newContact() pops up a window
4513         stripped from its navigation bar.
4514
4515         * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
4516         bundle (AddressBook).
4517
4518         * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
4519         "menu" and id "addressMenu" have the header email addresses
4520         display it with the new menu code in generic.js.
4521
4522         * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
4523         replaced the body tables with a div of class "pageContent"
4524         (standardization across the page templates).
4525
4526         * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
4527         productJavaScriptURL and pageJavaScriptURL (conditionnally) since
4528         those are now inherited from UIxPageFrame.
4529
4530         * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
4531
4532         * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
4533         a "mailto" URL parameter is detected and the "to" array is empty,
4534         initialize "to" with the value of "mailto" before returning it.
4535
4536         * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
4537         -composeAction]): rewrote method in a cleaner way and with usage
4538         of the URL extensions to NSString and NSDictionary (see below).
4539         Also, if a "mailto" url parameter is detected, pass it to the
4540         redirected url.
4541
4542         * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
4543         reduce code.
4544
4545         * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
4546         returns a parameter string to add to a base URL.
4547
4548         * UI/Common/NSString+URL.m ([NSString
4549         -composeURLWithAction:parameters:andHash:useHash]): new method to
4550         compose a complete URL from an object URL with parameters and an
4551         optional '#' character.
4552
4553         * UI/Common/UIxPageFrame.h: separated interface from
4554         UIxPageFrame.m.
4555
4556 2006-07-07  Wsourdeau Sourdeau  <wsourdeau@inverse.ca>
4557
4558         * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
4559
4560         * UI/WebServerResources/generic.js: added code to manage
4561         selections within HTML containers.
4562
4563         * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
4564         added method to determine the possible URL for a product-specific
4565         javascript filename of the forme <productname>.js.
4566         ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
4567         ([UIxPageFrame -isPopup]): new method to determine whether the
4568         application navigator bar should be displayed (main page) or not
4569         (popup page).
4570
4571         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
4572         -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
4573         the user through LDAP.
4574
4575 2006-07-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4576
4577         * The toolbar code from the MailerUI product was taken, renamed as
4578         "UIxToolBar" and put into UI/Common. Toolbar plists were created
4579         for the Contacts and Scheduler products and put in their respectir
4580         Toolbars/ subdirectories. Finally,
4581         UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
4582         UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
4583         and an invocation to the UIxToolbar component was put at the top
4584         of UI/Templaces/UIxPageFrame.wox.
4585
4586         * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
4587         within the templates whether a separator should be displayed.
4588
4589         * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
4590         that returns NO if the toolbar is empty.
4591
4592 2006-07-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4593
4594         * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
4595
4596         * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
4597         new toolbar objects.
4598
4599         * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
4600
4601         * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
4602         linkbanner as a DIV instead of a TABLE.
4603
4604         * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
4605         showLinkBanner]:
4606         returns 'YES' to request the display of the navigation bar between
4607         applets.
4608
4609 2006-06-15      ludovic@inverse.ca
4610
4611         * It's now possible to set the default
4612           domain using for email using the
4613           SOGoDefaultMailDomain preference key.
4614
4615 2006-06-15      ludovic@inverse.ca
4616         
4617         * Initial import of SOGo from trunk.