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