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