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