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