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