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