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