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