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