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