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