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