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