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