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