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