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