1 2007-12-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -crashAction]): new
4 action methods that generates a segmentation faults.
5 ([SOGoRootPage -exceptionAction]): new method that returns an
7 ([SOGoRootPage -raisedExceptionAction]): new method that raises an
8 exception without returning it.
10 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWithStatus:status])
11 ([UIxComponent -responseWithStatus:statusandString:contentString])
12 ([UIxComponent -responseWithStatus:statusandJSONRepresentation:contentObject])
13 ([UIxComponent -responseWith204]): new utility methods.
15 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
16 -responseWithStatus:statusandString:contentString])
18 -responseWithStatus:statusandJSONRepresentation:contentObject]):
21 * SoObjects/SOGo/NSScanner+BSJSONAdditions.m ([NSScanner
22 -scanJSONStringDelimiterString]): new category module taken from
25 * SoObjects/SOGo/NSDictionary+BSJSONAdditions.[hm]: new category
26 module taken from BSJSONAdditions 1.3.
27 http://blakeseely.com/downloads.html
29 2007-12-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
31 * SoObjects/SOGo/NSString+Utilities.m ([NSString
32 -stringByDetectingURLs]): we now go back until the real start of
35 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
36 -fetchAttachmentIds]): new method that wanders through the mail
37 structure to collect the attachment content ids and to associate
40 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
41 ([_UIxHTMLMailContentHandler
42 -startElement:_localNamenamespace:_nsrawName:_rawNameattributes:_attributes]):
43 the content-ids are now enclosed between "<>" before retrieval
44 from the attachment dictionary.
45 ([UIxMailPartHTMLViewer -cssContent])
46 ([UIxMailPartHTMLViewer -flatContentAsString]): the content-ids
47 are now fetch from the clientobject (an instance of
48 SOGoMailObject) with the new "fetchAttachmentIds" method.
50 2007-12-12 Francis Lachapelle <flachapelle@inverse.ca>
52 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
53 -eventsListAction]): added the state of the calendar's owner with
54 respect to the current event.
56 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
57 -_loadAttendees]): added the retrieval of attendees state on
60 2007-12-12 Ludovic Marcotte <ludovic@inverse.ca>
62 * UI/MailPartViewers/UIxMailRenderingContext.{h,m}
63 Removed template caching which added very little
64 and created re-entrant issues.
66 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
67 Added a hack (and stated so in the source file)
68 to avoid what seems to be a bug in libxml.
70 2007-12-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
72 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
74 ([SOGoContentObject -davLastModified])
75 ([SOGoContentObject -davContentLength]): implemented dav methods.
77 2007-12-10 Francis Lachapelle <flachapelle@inverse.ca>
79 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
80 -GETAction:]): when asAttachment is set to true, the header
81 "content-disposition" is set to "attachment" so browsers like IE
82 and Safari properly asks the user to save the file.
84 2007-12-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
86 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
87 ([UIxMailPartHTMLViewer -flatContentAsString]): when in
88 UIxMailPartAlternative, scan the filenames of potential cid at the
89 same level as our parent.
91 2007-12-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
93 * Main/SOGo.m ([SOGo -run]): the table creation script now have a
94 @{tableName} substitution variable to be substitued with the real
95 table name obtained from the configuration variables.
97 2007-12-07 Ludovic Marcotte <ludovic@inverse.ca>
99 * UI/MailPartViewers/UIxMailRenderingContext.m
100 We treat multipart/appledouble like multipart/mixed
101 for now. That allows the user to save both parts.
103 * Corrected typos in Localizable.string files.
105 2007-12-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
107 * UI/Common/UIxAclEditor.m ([-currentUserIsOwner]): replaced
108 method with -canModifyAcls that invokes the security manager
109 instead for the permission "SaveAcls" on the client object.
111 * SoObjects/Appointments/SOGoCalendarComponent.m
112 ([SOGoCalendarComponent -contentAsString]): securize the returned content.
113 ([SOGoCalendarComponent -aclsForUser:uid]): check whether the user
114 is an organizer or a participant as well.
116 * SoObjects/Appointments/SOGoAppointmentObject.m
117 ([SOGoAppointmentObject -changeParticipationStatus:_status]): the
118 user we should change the status of is not the active user but the
119 owner of the object. This is for delegation.
121 * SoObjects/Appointments/SOGoAppointmentFolder.m
122 ([SOGoAppointmentFolder -fetchContentObjectNames]): fetch the
123 elements through the fetchFields:from:to:title:component: method
124 method, so that the result is already filtered depending on the
127 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
128 -toolbar]): if the current user is a delegate, take the permission
129 "ModifyComponent" into account. Also, do not let him/her modify an
130 event for which he/she is the organizer.
132 * SoObjects/Contacts/SOGoContactLDAPFolder.m
133 ([SOGoContactLDAPFolder -davResourceType]): declared as a carddav
134 addressbook collection.
136 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
137 -davResourceType]): declared as a carddav addressbook collection.
139 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davLastModified]):
140 override SoObject's implementation. Otherwise a localized date is returned.
142 * UI/Common/UIxPageFrame.m ([UIxPageFrame -isCalendar])
143 ([UIxPageFrame -isContacts], [UIxPageFrame -isMail]): getters to
144 determine which module is the current one.
146 2007-12-06 Francis Lachapelle <flachapelle@inverse.ca>
148 * UI/Scheduler/NSArray+Scheduler.m ([NSArray -compareEventsTitleAscending:otherEvent])
149 ([NSArray -compareEventsLocationAscending:otherEvent])
150 ([NSArray -compareEventsEndDateAscending:otherEvent])
151 ([NSArray -reversedArray]): new methods that sort an array of
152 events depending of various parameters.
154 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
155 -eventsListAction]): added support for sorting events.
157 2007-12-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
159 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction])
160 ([UIxMailEditor -sendAction]): make sure that the attachments
161 having the same filename are correctly sequenced (ex: base.ext,
162 base-1.ext, base-2.ext).
164 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
165 -fetchBLOB]): added support for quoted-printable decoding. Also,
166 we return nil if the type is not supported.
168 2007-12-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
170 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -newAction]):
171 create task obejcts with the .ics extension.
173 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
174 -newAction]): create appointment objects with the .ics extension.
176 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -newAction]):
177 create objects with the .vcf extension.
179 * Main/NSException+Stacktrace.m: added missing symbols from
180 NSException.m and NSDebug.m (GNUstep).
182 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
183 -foldersSearchAction]): make use of the new search methods in
184 SOGoUserFolder (see below).
186 * UI/Contacts/UIxContactFoldersView.m ([-foldersSearchAction]):
187 moved method into ../MainUI/SOGoUserHomePage.m.
189 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
190 -foldersOfType:folderTypeforUID:uid]): only return folders owned
191 by the specified user.
193 2007-12-05 Francis Lachapelle <flachapelle@inverse.ca>
195 * SoObjects/Mailer/SOGoDraftObject.m: the condition for replyToAll
196 has to be done later to avoid duplicated to and cc addresses.
198 2007-12-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
200 * SoObjects/Appointments/SOGoAppointmentFolder.m
201 ([SOGoAppointmentFolder -davCalendarQuery:queryContext]): fixed a leak.
203 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder -davSubscribe:localContext])
204 ([SOGoGCSFolder -davUnsubscribe:localContext]): subscribe an
205 unsubscribe from DAV-based accesses. We could be compatible with
206 Microsoft's extensions but we have no need for a "subcription id",
207 so we implement our own.
209 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
210 -POSTAction:localContext]): new method to intercept DAV POSTs,
211 which we now use to implement certain custom commands such as
212 "subscribe" and "unsubscribe".
214 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
215 -davNamespaces]): declare the
216 "urn:inverse:params:xml:ns:inverse-dav" xml ns.
217 ([SOGoUserFolder -foldersOfType:folderTypeforUID:uid]): new method
218 designed to replace the UIxContactFoldersView.m mechanism for
219 displaying folders to subcribe to, as a common code base for both
220 Web and DAV-based subscriptions.
221 ([SOGoUserFolder -foldersOfType:typematchingUID:uid]): same as
223 ([SOGoUserFolder -davCollectionQuery:queryContext]): new method
224 that implement a custom DAV-based protocol query for querying
225 folder based on specified attributes.
227 2007-12-03 Ludovic Marcotte <ludovic@inverse.ca>
229 * Main/NSException+Stacktrace.{h,m} - new files
230 to handle automatic stack trace generation
231 upon an uncaught exception.
233 * Updated the templates and Localizable.string files
234 to fix typos and add new strings.
236 * SoObjects/Mailer/SOGoMailBodyPart.m
237 Fixed attachment retreival when the first character
240 * SoObjects/SOGo/SOGoGCSFolder.m
241 Fixed the sending of emails when folders are created/removed.
242 Notifications are sent if the defaults SOGoFoldersSendEMailNotifications
245 * UI/Common/UIxUserRightsEditor.m
246 * UI/Templates/SOGoACLEnglishModificationAdvisory.wox
247 * UI/Templates/SOGoACLFrenchModificationAdvisory.wox
248 * UI/Templates/SOGoACLGermanModificationAdvisory.wox
249 Added the capabilities to email notifications when ACLs have
250 changed on a DAV collection or an IMAP mailbox. Also added
251 new templates (3 .wox) to deal with this.
253 * UI/WebServerResources/ContactsUI.js
254 UI/WebServerResources/SchedulerUI.js
255 Added warnings on operations w/o selection.
257 2007-11-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
259 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
260 -appendSubscribedSources]): don't include sources for which we
261 don't have the SOGoPerm_AccessObject permission.
263 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
264 -rfc822DateString]): we want positive timezones to be specified
265 with a leading "+" too.
267 2007-11-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
269 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
270 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
271 return nil if the subscribed folder has no display name (meaning
272 it no longer exists).
274 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
275 -appendPersonalSources]): don't include sources which are no
278 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
279 -ocsPathOfContainer]): return the intended value, not that of
282 * SoObjects/Appointments/SOGoCalendarComponent.m
283 ([SOGoCalendarComponent -sendResponseToOrganizer]): send the
284 message only of sendEMailNotifications is set.
286 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -subscriptionRoles]):
287 new method that returns the roles that qualifies for adding the
288 special "authorized subscribed" sogo role.
290 2007-11-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
292 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
293 -aclsForUser:uid]): copy all the roles from the container. If the
294 object is new, make sure the roles contain "ObjectEditor" if and
295 only if "ObjectCreator" is present.
297 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
298 -aclsForUser:uid]): no longer take the "ObjectReader" role into
301 * UI/Common/UIxFolderActions.m ([UIxFolderActions
302 -canAccessContentAction]): always return HTTP status 204. We want
303 this because we are relying on the SOPE access control manager to
304 grant access to this method. This requires a fine-tuned access
305 control in SOGo itself...
307 * UI/Contacts/UIxContactsUserRightsEditor.m ([-userCanReadObjects])
308 ([-setUserCanReadObjects:userCanReadObjects]): removed methods.
310 * UI/MailerUI/UIxMailUserRightsEditor.m ([UIxMailUserRightsEditor
311 -updateRights]): no longer take the "ObjectReader" role into account.
312 ([-userCanReadMails], [-setUserCanReadMails:userCanReadMails]):
315 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
316 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): specify context
317 when looking up the Calendar folder.
319 2007-11-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
321 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): same as below.
323 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
324 -event]): create the event if it doesn't exist.
326 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -userHasCalendarAccess])
327 ([UIxPreferences -userHasMailAccess]): same as below, for
328 displaying preference tabs.
330 * UI/Common/UIxPageFrame.m ([UIxPageFrame
331 -userHasCalendarAccess]): new accessor for the link banner.
332 ([UIxPageFrame -userHasMailAccess]): same as above.
334 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
335 -toManyRelationshipKeys]): do not report the path to modules to
336 which the user has no access. No longer cache this information
337 statically, the array will be generated at each call.
338 ([SOGoUserFolder -lookupName:_keyinContext:_ctxacquire:_flag]):
339 ignore the path to modules to which the user has no access.
341 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -canAccessModule:module]):
342 new method that returns whether the user has access to the
345 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
346 -initFromUDSource:udSource]): take a new parameter named
347 'ModulesContraints' that defines a set of constraints for
348 accessing specified named modules. This is an optout, meaning the
349 modules will be present unless a constraint is specified.
351 * SoObjects/Appointments/SOGoAppointmentFolder.m
352 ([SOGoAppointmentFolder
353 -roleForComponentsWithAccessClass:accessClassforUser:uid]): cache
354 acl to reduce method calls.
355 ([SOGoAppointmentFolder
356 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
357 if the user is not the current user, we strip the useless info
360 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
361 -labelForKey:key]): new category method.
363 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
364 -event]): same as below.
366 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): request a
367 secured version of the component.
369 * UI/MailPartViewers/UIxMailPartViewer.m
370 ([-fallbackStringEncoding]): removed method.
371 ([UIxMailPartViewer -flatContentAsString]): we no longer use [self
372 fallbackStringEncoding]. Instead we directly specify
373 NSISOLatin1StringEncoding if UTF-8 has failed.
375 * UI/MailPartViewers/UIxMailPartICalViewer.m
376 ([-fallbackStringEncoding]): removed method.
378 2007-11-25 Ludovic Marcotte <ludovic@inverse.ca>
380 * SoObjects/Mailer/SOGoMailForward.m
381 Use [sourceMail decodedSubject] instead of [sourceMail subject]
382 Signature fix in -signature - see the comment
385 * SoObjects/Mailer/SOGoMailObject.m
386 Improved -stringFromData: to try UTF-8 then fallback to Latin1
388 * SoObjects/Mailer/SOGoMailReply.m
389 Modified -messageBody to strip the signature from the reply.
390 Also modified -signature to add "-- \n%@" instead of the
391 broken ""--\r\n%@" pattern.
393 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m
394 We now favor text/calendar parts over text/html and
395 text/plain parts when viewing a multipart/alternative mail.
396 This allows us to show the email invitations coming from
399 * UI/MailerUI/UIxMailAccountActions.m
400 Signature fix in -composeAction - see the comment
403 * UI/MailPartViewers/UIxMailPartViewer.m
404 Modified -flatContentAsString to use UTF-8 as the
405 default fallback encoding for 8-bit content.
407 * SoObjects/Mailer/SOGoDraftObject.m
408 Modified _fillInReplyAddresses:replyToAll:envelope:
409 so that if there's no recipient, we add at least
411 Fixed a mem leak in the same method.
413 2007-11-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
415 * UI/MailPartViewers/UIxMailRenderingContext.m
416 ([UIxMailRenderingContext -viewerForBodyInfo:_info]): same as below.
418 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
419 -plainTextContentFetchKeys]): same as below.
421 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
422 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): accept the
423 application/ics type from Google Calendar.
425 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
426 +distantFuture]): rewrote method to return an object that is
427 compatible with NSCalendarDate, unlike the implementation in
429 ([NSCalendarDate +distantPast]): same as above.
431 2007-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
433 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: fixed infinite loop
434 when charset is us-ascii, match it to ascii rather than none.
436 * SoObjects/Appointments/SOGoAppointmentFolder.m
437 ([SOGoAppointmentFolder
438 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
439 added search on the c_title column too.
441 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
442 -eventsListAction]): take the "search" url parameter into account.
443 ([UIxCalListingActions -eventsListAction]): fetch events matching
444 the title filter too.
446 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -connectAction]): the
447 user infos are now posted as "application/x-www-form-urlencoded".
448 So we have to have like a form has been posted.
450 2007-11-21 Francis Lachapelle <flachapelle@inverse.ca>
452 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
453 -calendarList]): also returns the calendar of the current
454 event. This is required so the proper calender is selected when
455 you view an event to which you don't have write access.
457 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
458 also returns true for super users.
460 2007-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
462 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
463 -lookupImap4BodyPartKey:inContext:]): return a correct body part
464 when "0" is requested, taking its mime-type into account.
466 * UI/MailPartViewers/UIxMailRenderingContext.m
467 ([UIxMailRenderingContext -flatContentForPartPath:_partPath]):
468 return content for part "0", which would be the message body.
470 2007-11-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
472 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
473 ([_UIxHTMLMailContentHandler
474 -setContentEncoding:newContentEncoding]): new method that
475 specifies an xml charset to return to the parser.
476 ([UIxMailPartHTMLViewer -flatContentAsString]): specifies the
477 charset to the content handler before parsing.
479 * SoObjects/Appointments/SOGoAppointmentObject.m: don't take an
480 empty c_name as a valid response when looking up an event. Create
481 one in that case instead.
483 2007-11-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
485 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -signature]):
486 returns the signature for the default identity of the default
488 ([UIxPreferences -setSignature:newSignature]): accessor that sets
489 the default signature.
491 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
492 -composeAction]): append the message signature to the new draft.
494 * SoObjects/Mailer/SOGoMailReply.m ([SOGoMailReply -signature]):
497 * SoObjects/Mailer/SOGoMailForward.m ([SOGoMailForward
498 -signature]): new method that takes the user's signature and put
499 it at the end of the message, if exists.
501 * UI/Common/UIxPageFrame.m ([UIxPageFrame -isSuperUser]): new
502 accessor that forwards the call to the active user.
504 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -signature]): returns the
505 user default signature.
506 ([SOGoUser -isSuperUser]): declares whether the user is listed
507 among the super users.
509 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
510 -setComponent:newComponent]): retain the component object.
511 ([UIxComponentEditor -organizerIdentity]): new accessor method to
512 handle list of possible organizers.
514 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
515 -event]): retain the returned event object.
517 * SoObjects/Appointments/SOGoAppointmentObject.m
518 ([SOGoAppointmentObject -saveComponent:newEvent]): reset the
519 organizer only if there are no attendees AND the owner of the
520 component is not the organizer him-/herself.
522 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
523 -toolbar]): rewrote in a way that ensures that each case is
526 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -isEqual:otherUser]): new
529 * UI/Scheduler/UIxTaskEditor.m ([-acceptAction])
530 ([-declineAction]): commented out unused methods.
532 * UI/MailPartViewers/UIxMailPartICalActions.m
533 ([UIxMailPartICalActions -deleteFromCalendarAction]): actually
534 delete the found object.
536 2007-11-18 Ludovic Marcotte <ludovic@inverse.ca>
538 * SoObjects/Mailer/SOGoMailBodyPart.m
539 SoObjects/Mailer/SOGoMailObject.m
540 UI/MailPartViewers/UIxMailPartViewer.m
541 Added support of messages containing non-textual
542 content and no parts.
544 * UI/MailerUI/UIxMailView.m
545 SoObjects/Mailer/SOGoMailObject.m
546 UI/Templates/MailerUI/UIxMailView.wox
547 Added support for the Reply-To header upon
550 2007-11-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
552 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]):
553 invoke saveComponent:.
555 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -hasOrganizer])
556 ([UIxComponentEditor -organizerName]): new template accessor
557 related to displaying the event's organizer.
558 ([-containsConflict:_component]): removed method.
559 ([UIxComponentEditor -takeValuesFromRequest:_rqinContext:_ctx]):
560 set RSVP to "TRUE" on each attendee.
562 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
563 -saveAction]): invoke saveComponent:.
565 * UI/MailPartViewers/UIxMailPartICalViewer.m
566 ([UIxMailPartICalViewer -isLoggedInUserTheOrganizer]): make use of
567 the -userIsOrganizer: category method.
568 ([-isLoggedInUserAnAttendee]): make use of -userIsParticipant:.
569 ([UIxMailPartICalViewer -hasSenderStatusChanged]): new template
570 accessor that determines whether the "Update" button should be
573 * UI/MailPartViewers/UIxMailPartICalActions.m
574 ([UIxMailPartICalActions -deleteFromCalendarAction]): implemented
576 ([UIxMailPartICalActions -updateUserStatusAction]): implemented
579 * UI/Common/UIxPageFrame.m ([UIxPageFrame
580 -setCssFiles:newCSSFiles]): new accessor that enables the
581 sub-templates to specify extra CSS files to load.
583 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
584 -homeFolderInContext:context]): cache the home folder of the user
585 object instead of the current user.
587 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
588 -deleteEntriesWithIds:ids]): invokes the "prepareDelete" optional
589 method if the child object implements it.
591 * SoObjects/SOGo/SOGoContentObject.m ([-setContentString:])
594 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
595 -setBaseDN:newBaseDNIDField:newIDFieldCNField:newCNFieldUIDField:newUIDFieldmailFields:newMailFieldsandBindFields:newBindFields]):
596 take a new "mailFields" parameter defining an array of fields
597 where to look at when searching the user's emails. It defaults to
598 the standard "mail" LDAP field.
600 * SoObjects/Appointments/SOGoAptMailICalReply.[hm]: new
601 SoComponent implementing a template for ITIP replies.
603 * SoObjects/Appointments/iCalPerson+SOGo.m ([iCalPerson
604 -mailAddress]): new method that returns a properly formatted email
605 address for the specified person entry.
606 ([iCalPerson -uid]): new method that tests whether the user is
607 known to the system and if so, returns its user id.
609 * SoObjects/Appointments/iCalPerson+SOGo.[hm]: new category module.
611 * SoObjects/Appointments/iCalEventChanges+SOGo.m
612 ([iCalEventChanges -sequenceShouldBeIncreased]): determine whether
613 the changes involved need a sequence inscrease, based on the
616 * SoObjects/Appointments/iCalEventChanges+SOGo.[hm]: new category
619 * SoObjects/Appointments/iCalEvent+SOGo.m ([iCalEvent
620 -isStillRelevant]): new overriden method determining the relevance
621 of the current event based on its end date.
623 * SoObjects/Appointments/iCalEvent+SOGo.[hm]: new category module.
625 * SoObjects/Appointments/iCalEntityObject+SOGo.m
626 ([iCalEntityObject -attendeeUIDs]): new category methods that
627 returns an array containing the uids of the system-know attendees.
628 ([iCalEntityObject -isStillRelevant]): new template method.
629 ([iCalEntityObject -itipEntryWithMethod:method]): clone the
630 current entry calendar with the specified ITIP method.
631 ([iCalEntityObject -attendeesWithoutUser:user]): returns an array
632 of attendees while making sure the specified user is not listed.
634 * SoObjects/Appointments/SOGoCalendarComponent.m
635 ([SOGoCalendarComponent -calendar:create:secure]): new name for
636 -calendar:. Added a "secure" parameter that specifies whether a
637 stripped calendar instance is needed or not. Also, we no longer
638 cache the content to simplify handling of new data.
639 ([SOGoCalendarComponent -component:create:secure]): same as above.
640 ([SOGoCalendarComponent
641 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
642 test whether the component is "still relevant" before sending an
644 ([SOGoCalendarComponent -sendResponseToOrganizer]): new method for
645 sending ITIP replies.
646 ([SOGoCalendarComponent -getUIDsForICalPerson:iCalPerson]):
647 removed method. Replaced with -[iCalPerson uid] category method.
649 * SoObjects/Appointments/SOGoAppointmentObject.[hm]: rewrote
650 class. No longer override saveContentString:,
651 saveContentString:baseSequence:, .... Implemented the
652 saveComponent: and the prepareDelete methods instead. Those
653 methods are called only from the web methods. This avoids the
654 risks related to email sending and changes propagation.
656 * UI/Common/UIxTabItem.m: removed useless class module.
658 * UI/Common/UIxTabView.[hm]: removed useless class module.
660 * UI/Common/UIxPrintPageFrame.m: removed useless class module.
662 * UI/Common/UIxAppNavView.m: removed useless class module.
664 2007-11-16 Ludovic Marcotte <ludovic@inverse.ca>
666 * SoObjects/Mailer/SOGoMailBaseObject.m
669 * SoObjects/Mailer/SOGoMailBodyPart.m
670 We also grok image/jpeg and return the SOGoMailBodyPart
671 for attachments fetching.
673 * SoObjects/Mailer/SOGoMailObject+Draft.m
674 Prevent a crash in case body decoding failed during
677 * SoObjects/Mailer/SOGoMailObject.m
678 Improved body decoding during a reply to also try
679 latin1 as an encoding.
681 * UI/MailPartViewers/UIxMailRenderingContext.m
682 Greatly improved the display mechanisms for emails.
683 Also properly consider the content disposition for
686 * UI/MailerUI/UIxMailToSelection.m
687 Removed worthless code.
689 * UI/WebServerResources/MailerUI.css
690 CSS fix for table views.
692 2007-11-15 Ludovic Marcotte <ludovic@inverse.ca>
694 * UI/WebServerResources/MailerUI.js
695 We now check for empty selection and warn the
696 user about it when deleting messages
698 * SoObjects/Mailer/SOGoDraftObject.m
699 Correctly check for the presence of a subject
700 before attempting to forward a message from
703 * SoObjects/Mailer/SOGoMailObject+Draft.m
704 We no longer use "[Fwd: ]" but simply "Fwd:"
705 when forwarding email messages.
707 * SoObjects/SOGo/SOGoUser.m
708 Modified the default forwarding format to be
709 inline instead of "attachment".
711 * SoObjects/Mailer/SOGoDraftObject.m
712 We now create and use a NGMimeContentDispositionHeaderField
713 in order to avoid encoding the whole Content-Disposition
714 header in case a non-ASCII char is present!
716 2007-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
718 * SoObjects/SOGo/iCalEntityObject+Utilities.m ([iCalEntityObject
719 -findParticipant:user]): new method based on the one removed from
720 SOGoCalendarComponent below.
722 * SoObjects/SOGo/iCalEntityObject+Utilities.[hm]: new category
723 module for iCalEntityObject.
725 * SoObjects/Appointments/SOGoCalendarComponent.m
726 ([-findParticipant:user]): removed method.
728 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
729 -setContentString:newContent]): new accessor method.
731 -saveContentString:newContentbaseVersion:newBaseVersion]): invoke
732 -[self setContentString:].
734 * UI/MailPartViewers/UIxMailPartICalViewer.m
735 ([UIxMailPartICalViewer -authorativeEvent]): returns the most
737 ([-isLoggedInUserTheOrganizer]): make use of -[SOGoUser
740 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
741 -stringByConvertingCRLNToHTML]): fixed crashes due to overflows in
742 temporary buffer we are handing.
744 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
745 -setComponent:newComponent]): check that newComponent is non-nil
746 before replacing the default values.
747 ([UIxComponentEditor -calendarList]): privacy is already an ivar.
748 We don't need to refetch it.
750 2007-11-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
752 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
753 -fetchMailForReplying:sourceMailtoAll:toAll]): remove the current
754 user from the list of recipients and make sure no other address is
757 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
758 -stringByConvertingCRLNToHTML]): build the returned NSString
759 without the ending \0.
761 2007-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
763 * UI/MailPartViewers/UIxMailPartICalViewer.m
764 ([UIxMailPartICalViewer -acceptLink])
765 ([UIxMailPartICalViewer -declineLink])
766 ([UIxMailPartICalViewer -tentativeLink]): removed useless methods.
768 * UI/MailPartViewers/UIxMailPartICalAction.m
769 ([UIxMailPartICalAction -addToCalendarAction])
770 ([UIxMailPartICalAction -deleteFromCalendarAction]): new stub
773 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
774 -lookupImap4BodyPartKey:]): make use of the new method below.
776 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
777 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): new method
778 that returns an appropriate Class depending on a given mime type.
780 * UI/SOGoUI/UIxComponent.m ([UIxComponent -canCreateOrModify]):
781 new boolean accessor that determines whether someone can create
782 (i.e. modify a new entry) or modify an existing entry.
784 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
785 -lookupName:lookupNameinContext:localContextacquire:acquire]):
786 overriden method to bind looked up keys to So methods but by
787 avoiding a call to toOneRelationshipKeys. This will be the top
788 method of the chain, meant to override SoObject's behaviour.
790 * SoObjects/Contacts/SOGoContactLDAPFolder.m
791 ([SOGoContactLDAPFolder
792 -lookupName:objectNameinContext:lookupContextacquire:acquire]):
793 removed hack to prevent [super lookupName...] to read the entire
794 LDAP directory when looking up a record.
796 2007-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
798 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
799 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
802 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
803 ([UIxMailPartHTMLViewer -_attachmentIds]): the reference was one
804 character too short, which cause the images not to be displayed
805 sometimes and crashes to happen whenever the references on a
806 message were wrong (due to bugs in SOPE).
808 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
809 -hasMessageAttachment]): consider an attachment any content that
810 has a non-nil disposition.
812 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
813 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
814 fixed method to make use of the parameters instead of the useless
815 remains that weren't even initialized.
817 * SoObjects/Appointments/SOGoAppointmentObject.m
818 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
819 don't propagate the event among the attendees if this is not an
821 ([SOGoAppointmentObject -deleteWithBaseSequence:]): same as above.
823 * Main/SOGo.m ([SOGo -authenticatorInContext:context]): make use
824 of the new category method below.
826 * SoObjects/SOGo/WORequest+SOGo.m ([WORequest
827 -handledByDefaultHandler]): new method that returns whether this
828 is an "so" or alike request.
830 * SoObjects/SOGo/WORequest+SOGo.[hm]: new category module.
832 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
833 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
834 write the new folder's name in the folder cache.
836 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
837 -calendars]): same as below.
839 * UI/Contacts/UIxContactsListViewContainer.m
840 ([UIxContactsListViewContainer -currentContactFolderName]):
841 translate the display name if its the default one.
843 * SoObjects/Appointments/SOGoAppointmentFolder.m
844 ([SOGoAppointmentFolder -create]): overriden method that invokes
845 its ancestor and then activate itself within the user settings.
847 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
848 -appendPersonalSources]): when the user is the owner of the
849 current folder, we create the "personal" folder if it doesn't
850 exist by invoking "create".
852 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
853 -primaryFetchProfile]): when no row is returned, we initialize
854 "values" to a new dictionary. This solves a bug where the defaults
855 would not be initialized properly.
857 2007-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
859 * SoObjects/SOGo/SOGoGCSFolder.m ([-compare:otherFolder]): method
860 moved into the SOGoFolder class.
862 * SoObjects/Appointments/SOGoAppointmentObject.m
863 ([SOGoAppointmentObject -saveContentString:_iCalinUIDs:_uids]):
864 simplified method by directly building a similar appointment
865 object with the current folder as container.
867 * SoObjects/Contacts/SOGoContactLDAPFolder.m
868 ([SOGoContactLDAPFolder
869 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
870 take the content of an object returned by
871 lookupName:inContext:acquire: instead of the dictionary passed as
872 parameter since it represents a flattened entry return by
873 lookupContactsWithFilter...
875 * SoObjects/Contacts/SOGoFolder+CardDAV.m: NSObject+CardDAV
876 category renamed to SOGoFolder+CardDAV.
878 * SoObjects/SOGo/SOGoParentFolder.m: no longer a subclass of
879 SOGoObject, but of SOGoFolder instead.
881 * SoObjects/SOGo/SOGoUserFolder.m: no longer a subclass of
882 SOGoGCSFolder, but of SOGoFolder instead.
884 * SoObjects/Appointments/SOGoAppointmentFolder.m
885 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): fixed
886 to take the new SOGoParentFolder class into account. Also, create
887 the personal folder if it doesn't exist.
889 * SoObjects/SOGo/SOGoFolder.[hm]: new class module implementing
890 the parent of all SOGo containers.
892 * SoObjects/SOGo/SOGoGCSFolder.[hm]: SOGoFolder class renamed to
895 2007-11-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
897 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection
898 -getAddressesFromFormValues:_dict]): take NSString and NSArray
899 values. Ignore addresses with a length of 0.
901 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -mailAccounts]): we now
902 fetch the accounts from the user defaults and create default
905 2007-11-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
907 * UI/MailPartViewers/UIxMailPartTextViewer.m
908 ([UIxMailPartTextViewer -flatContentAsString]): re-added
909 conversion of line-break to sequences of HTML "BR", with a fast
912 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
913 -flatContentAsString]): simplified method now that we know
914 -[NSString stringWithData:usingEncodingNamed:] has a more robust
917 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
918 -showToAddress]): the answer is cached.
920 * UI/Common/UIxObjectActions.m ([UIxObjectActions +initialize]):
921 read "SOGoACLsSendEMailNotifications" from the user defaults to
922 determiner whether to send an email when a user is added or
923 removed from an object's acl.
925 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
926 -contentForEditing]): make sure the htmlContent flag is set to NO
927 when we select the textual part. Also we select only the relevant
930 * UI/MailerUI/WOContext+UIxMailer.m ([-mailSubjectFormatter]):
933 * UI/MailerUI/UIxMailView.m ([UIxMailView -messageSubject]): new
934 method replacing -objectTitle, written like the ones below.
936 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
937 -messageSubject]): rewrote method to act the one below.
939 * UI/MailPartViewers/UIxMailPartMessageViewer.m
940 ([UIxMailPartMessageViewer -messageSubject]): new method that
941 returns the decoded mail subject or "Untitled" if the subject is
944 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
945 -decodedSubject]): new method that invoke -decodedSubject from the
946 NSString and NSData class, depending on the identity of the
947 subject obtained from the envelope.
949 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
950 -subjectForReply]): take the value of -[SOGoMail decodedSubject]
951 instead of the subject of the envelope.
952 ([SOGoMailObject -filenameForForward]): same as above.
953 ([SOGoMailObject -subjectForForward]): same as above.
955 * SoObjects/Mailer/NSString+Mail.m ([NSString -decodedSubject]):
956 same as below for NSString.
958 * SoObjects/Mailer/NSData+Mail.m ([NSData -decodedSubject]): new
959 method that decodes the subject of a mail taken as an NSData
960 instance. Handling the exceptions and the badly formatted headers.
962 * UI/MailerUI/UIxSubjectFormatter.[hm]: dropped class module.
964 2007-11-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
966 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
967 -deleteEntriesWithIds:ids]): make sure the objects returned by
968 lookupName:... are not instances of NSException.
970 2007-11-03 Ludovic Marcotte <ludovic@inverse.ca>
972 * UI/Scheduler/UIxAppointmentEditor.m
973 Fixed monthly recurrences support.
975 2007-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
977 * SoObjects/Appointments/SOGoAppointmentObject.m
978 ([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
979 sent when modifying an event, when the event was considered
980 relevant. The same thing is now implemented for event deletion.
982 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
983 -primaryFetchProfile]): make sure that the deserialized "values"
984 is an instance of NSMutableDictionary, otherwise we override it
987 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
988 -contentForReply]): make use of the SOGoMailReply WO page.
990 * SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
991 from SOGoMailForward to handle mail replies instead. Only three
992 methods remaining: date, from and messageBody. The latter is
995 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
996 -fetchMailForForwarding:sourceMail]): fetch attachments for
999 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1000 -hasMessageAttachment]): initialize hasAttachment with "NO" to
1001 avoid false positives.
1003 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
1004 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
1005 set title to an empty string where the event/task summary is null.
1007 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1008 -setHeaders:newHeaders]): make sure there is a message id in the
1009 headers dictionary, if not, generate one.
1010 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
1011 message id from the existing draft.
1012 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
1013 message id in the header map.
1015 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1016 -deleteFolderAction]): no longer prefix the target folder with
1019 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1020 -listMailboxesAction]): base the folder type on the folder
1023 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1024 -lookupName:_keyinContext:acquire:_acquire]): compare the full
1025 traversal to the potential looked up folder with the special
1026 folder names and return an object with the appropriate
1027 SOGoMailFolder subclass.
1029 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1030 -traversalFromMailAccount]): don't prepend the whole string with
1033 * SoObjects/Mailer/SOGoMailAccount.m
1034 ([-lookupSentFolder:_keyinContext:_ctx])
1035 ([-lookupDraftsFolder:_keyinContext:_ctx])
1036 ([-lookupTrashFolder:_keyinContext:_ctx])
1037 ([-lookupFiltersFolder:_key:_ctx]): removed methods.
1038 ([SOGoMailAccount -inboxFolderNameInContext:])
1039 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1040 ([SOGoMailAccount -sentFolderNameInContext:])
1041 ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
1042 the resulting name with "prefix" since we might return a nested
1044 ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
1045 names with "/". Sorts the resulting folder list with
1046 localizedCaseInsensitiveCompare: instead of
1047 caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
1048 that were removed, instead, we choose the appropriate class
1049 depending on the folder name. And since we are in SOGoMailAccount,
1050 we don't have to compute a traversal path to match the key with
1053 -folderWithTraversal:traversalandClassName:className]): new method
1054 that returns an instance of the specified SOGoMailFolder subclass,
1055 based on the traversal path passed as parameter.
1056 ([SOGoMailAccount -inboxFolderInContext:_ctx])
1057 ([SOGoMailAccount -draftsFolderInContext:_ctx])
1058 ([-sentFolderInContext:_ctx])
1059 ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
1060 -folderWithTraversal:andClassName: method described above.
1062 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1063 -primaryFetchProfile]): make use of -[NSPropertyListSerialization
1064 propertyListFromData:mutabilityOption:format:errorDescription:] to
1065 deserialize the plist. Removed variant for libFoundation since it
1066 should support the above.
1067 ([AgenorUserDefaults -generateSQLForInsert])
1068 ([AgenorUserDefaults -generateSQLForUpdate]): make use of
1069 -[NSPropertyListSerialization
1070 dataFromPropertyList:format:errorDescription:] to serialize the
1071 plist. Removed variant for libFoundation since it should support
1072 the above. Escape the backslashes from the resulting string.
1074 2007-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1076 * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
1077 SOGoMailFolder: SOGoMailSpecialFolder.
1079 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1080 -traversalFromMailAccount]): overridden method that returns the
1081 initialized mutable string.
1082 ([SOGoMailAccount -allFolderPaths]): take the special folder paths
1083 with -traversalFromMailAccount and reposition them at the
1084 beginning of the list. By creating the special folders during that
1085 request, we also make sure that the folder exists thanks to the
1086 new initialisation method of the new "SOGoSpecialMailFolder"
1088 ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
1090 ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
1092 ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
1093 longer use lookupImap4Folder.
1094 ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
1097 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1098 -traversalFromMailAccount]): new method that returns the full
1099 IMAP4 path to the object.
1101 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
1102 "superUsernames" after fetching it from the ud.
1104 2007-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1106 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1107 -eventsListAction]): substitude the start and end date with their
1108 UTC counterpart, taking into account the offset from UTC related
1109 to those dates instead of the current one. This renders
1110 -[UIxCalMainView -userUTCOffset] obsolete because the computings
1111 that occured in javascript are now done server-side.
1113 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
1114 removed obsolete method.
1116 * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
1117 method converting html content to plain text.
1119 * SoObjects/Mailer/NSString+Mail.[hm]: new category module
1120 enhancing NSString with utility methods pertaining to mail handling.
1122 * SoObjects/Mailer/SOGoMailObject.m
1123 ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
1125 -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
1126 modified method to be always recursive and to take an array of the
1127 accepted mime-types as parameter. The returned array now contains
1128 the mime-type as well as the part keys.
1130 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1131 -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
1132 ([SOGoMailObject -contentForEditing]): rewrote method to take into
1133 account the first text/plain part or the first text/html part
1134 converted to text/plain with our new -[NSString htmlToText]
1137 * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
1138 "replyToAll:" with YES as parameter instead of NO.
1140 2007-10-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1142 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1143 -davContentType]): ignore any possible parameter taken from the
1144 mime-info of the body part.
1146 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1147 -lastFirstMessageNumber]): new accessor that returns the first
1148 message number of the last series of messages.
1149 ([UIxMailListView -fetchKeys]): request the bodystructure for each
1151 ([UIxMailListView -hasMessageAttachment]): extract the attachment
1152 information from the message bodystructure.
1154 2007-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1156 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1157 -GETAction:]): use the "application/octet-stream" mime type for
1158 elements of type "application/x-xpinstall" to avoid confusing
1161 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
1162 ([UIxPreferences -itemMessageCheckText])
1163 ([UIxPreferences -userMessageCheck])
1164 ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
1165 methods for handling the retrieval of new messages automatically.
1167 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
1168 that returns the interval of time between automatic message
1171 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1172 -defaultAction]): now expunges the last folder marked for expunge.
1174 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1175 -trashInContext:_ctx]): now marks the container folder for
1178 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1179 -markForExpunge]): new method that marks the folder for the next
1180 automatic expunge operation in the user settings.
1181 ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
1182 takes the last folder marked for expunge, expunges it and removes
1183 it from the user settings, if it exists.
1185 2007-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1187 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1188 -messageSubjectCellStyleClass]): added support for replied,
1189 forwarded, forwarded and replied mails.
1191 * SoObjects/Mailer/NSData+Mail.m ([NSData
1192 -bodyDataFromEncoding:encoding]): new utility method that decodes
1193 the NSData instance properly depending on the encoding string
1194 passed as parameter.
1196 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1197 -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
1199 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1200 -stringForData:_datapartInfo:_info]): simplified by invoking
1201 -bodyDataFromEncoding: from our new NSData category methods.
1203 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1204 -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
1205 where only the body part of the first of the keys fetched was
1206 returned. Also decodes the body parts properly following their
1209 * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
1210 extends the NSData class with utility methods useful for handling
1213 2007-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1215 * SoObjects/SOGo/NSArray+Utilities.m
1216 ([NSArray -stringsWithFormat:format]): replace instances of NSNull
1219 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1220 -keysWithFormat:keyFormat]): replace instances of NSNull with
1223 * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
1224 empty, use "c_cn" instead.
1226 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1227 ([SOGoMailAccount -draftsFolderInContext:_ctx])
1228 ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
1229 of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
1230 no always be specified from the root instead of sometimes from the
1233 2007-10-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1235 * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
1236 ([UIxPageFrame -productLocalizableStrings]): invoke the new
1237 +[SOGoUser language] method if the user is nil.
1239 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
1240 that returns any generically-found language.
1241 ([SoUser -language]): modified to call the above.
1242 ([SOGoUser -language]): modified to call the above if the user
1243 language has a null length.
1245 * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
1246 -davEntityTag]): modified to return the "hash" of the vCard string.
1248 * UI/MailerUI/UIxMailActions.m ([UIxMailActions
1249 -removeAllLabelsAction]): new method that removes all label flags
1250 from the associated message.
1251 ([UIxMailActions -addLabel1Action]
1252 [UIxMailActions -addLabel2Action]
1253 [UIxMailActions -addLabel3Action
1254 [UIxMailActions -addLabel4Action]
1255 [UIxMailActions -addLabel5Action]): new methods that adds label
1256 flags to the associated message.
1257 ([UIxMailActions -removeLabel1Action]
1258 [UIxMailActions -removeLabel2Action]
1259 [UIxMailActions -removeLabel3Action
1260 [UIxMailActions -removeLabel4Action]
1261 [UIxMailActions -removeLabel5Action]): new methods that removes
1262 label flags from the associated message.
1264 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
1265 new accessor that returns the labels associated with the message.
1267 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1268 -allFolderPaths]): new method that returns all the paths of all
1269 the subfolders of the folder object.
1270 ([SOGoMailFolder -allFolderURLs]): new method replacing
1273 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1274 -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
1275 role from its parent folder.
1277 2007-10-19 Francis Lachapelle <flachapelle@inverse.ca>
1279 * SoObjects/SOGo/SOGoUser.m
1280 ([SOGoUser -rolesForObject:objectinContext:context]): allow
1281 multiple super usernames to be defined. The user default
1282 SOGoSuperUsername is renamed SOGoSuperUsernames and must be
1285 2007-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1287 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1288 -userInContext:]): override the super method by returning
1289 anonymous if the super returns nil.
1291 * UI/Common/UIxPageFrame.m ([UIxPageFrame
1292 -productLocalizableStrings]): new method that returns the
1293 product-specific translation dictionary as a JSON hash.
1294 ([UIxPageFrame -commonLocalizableStrings]): same as above but for
1295 the "Common" framework.
1296 ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
1297 the requestor components to require additional Javascript files.
1298 This is useful now that all the scripts are loaded at the end of
1300 ([UIxPageFrame -additionalJSFiles]): new getter related to the
1303 2007-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1305 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
1306 implemented new web method.
1308 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1309 -copyToFolderNamed:folderNameinContext:]): new method with the
1310 code cut/pasted from -moveToFolderNamed:inContext:.
1311 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
1312 modified to use the code from -copyToFolderNamed:inContext:, which
1313 is common between the two actions.
1315 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1316 ([SOGoMailAccount -sentFolderNameInContext:])
1317 ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
1318 the user settings into account.
1320 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
1321 ([UIxMailFolderActions -setAsSentFolderAction])
1322 ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
1323 that change the purpose of the active folder to "Sent", "Drafts"
1326 * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
1327 returns the subject as quoted-printable.
1329 * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
1330 SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
1331 the "aclMethod" method for the subsequent language-dependent
1334 * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
1335 returns the subject as quoted-printable.
1337 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1338 -dealloc]): release item, aptStartDate and aptEndDate.
1340 2007-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1342 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1343 -initWithName:newNameinContainer:newContainer]): the owner of a
1344 shared folder is set to "nobody" by default.
1346 * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
1347 that returns whether the object has an owner or not.
1349 2007-10-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1351 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1352 the folder even if the current user is not its owner.
1354 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
1356 * We now send advisory emails when folders
1357 are created / deleted.
1359 * Fixed the sending of advisory emails upon
1360 ACL changes on folders.
1362 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
1364 * UI/Scheduler/UIxComponentEditor.m
1365 Implemented event/task priority support.
1367 * SoObjects/Contacts/SOGoContactGCSFolder.m
1368 Added CardDAV support.
1370 * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
1371 Implemented From: based on LDAP results based on
1372 the MailFieldNames attribute (an array) specified
1373 in every LDAP-based authentication sources.
1375 * UI/MailPartViewers/UIxMailPartTextViewer.m and
1376 UI/WebServerResources/MailerUI.css
1377 We avoid replacing "\r\n" and "\n" with <br /> and
1378 rather use CSS capabilities for proper formatting.
1379 This is _WAY_ faster on very large mails.
1381 2007-10-10 Francis Lachapelle <flachapelle@inverse.ca>
1383 * UI/Scheduler/UIxComponentEditor.m
1384 ([UIxComponentEditor -componentCalendar]): returns the calendar
1385 object of the current event.
1387 2007-10-05 Ludovic Marcotte <ludovic@inverse.ca>
1389 * UI/WebServerResources/MailerUI.js
1390 We check if at least one message is selected
1391 before performing a Reply/Reply All/Forward
1393 * SoObjects/Appointments/SOGoAppointmentFolder.m
1394 and others - implemented support for recurring
1395 events (with some known limitations right now,
1396 all soon to be fixed).
1398 2007-10-04 Francis Lachapelle <flachapelle@inverse.ca>
1400 * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
1401 the constraint that a username can't start with a digit.
1403 2007-10-02 Francis Lachapelle <flachapelle@inverse.ca>
1405 * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
1406 repository to Inverse's branch.
1408 2007-09-28 Francis Lachapelle <flachapelle@inverse.ca>
1410 * SoObjects/Mailer/SOGoDraftObject.m
1411 ([SOGoDraftObject -isValidAttachmentName:_name]): removed
1412 constraint on space in file name.
1413 ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
1414 now removes from file name all characters preceding a backslash.
1415 This happens with IE7 because the complete attachment file path
1418 2007-09-25 Francis Lachapelle <flachapelle@inverse.ca>
1420 * SoObjects/Appointments/SOGoAptMailNotification.m
1421 ([SOGoAptMailNotification -appointmentURL]): set personal as the
1422 default calendar where to add the event.
1424 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1425 activate the SOGoUIxDefaultModule user defaults.
1427 2007-09-21 Francis Lachapelle <flachapelle@inverse.ca>
1429 * UI/SOGoUI/UIxComponent.m
1430 ([UIxComponent -shortUserNameForDisplay]): returns the string
1431 "wrongusernamepassword" when authentication failed.
1433 2007-09-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1435 * UI/MailPartViewers/UIxMailPartICalViewer.m
1436 ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
1437 entry of the Calendars parent folder.
1439 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1440 -messageSubject]): new accessor method to work-around a problem
1441 within SOPE where a subject could be returned as an NSData.
1443 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1444 -appendPersonalSources]): make sure the value of the "c_path4" of
1445 the returned rows are not NSNull, otherwise, discard them.
1447 2007-09-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1449 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1450 -compare:otherFolder]): new overriden method that compares two
1451 contact foldes based on their class and then transfer the control
1452 to the super method in SOGoFolder.
1454 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1455 ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
1456 compare two contact folders based on their class and then their
1459 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
1460 new method for sorting folders. The folders are compared based on
1461 their ownership, whether they are a main folder and finally
1462 depending on their display name.
1464 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1465 -pathArrayToSOGoObject]): do not reorder the paths if the third
1466 element is an instance of NSNull.
1468 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1469 -subFolders]): returns a sorted array using the "compare:"
1472 2007-09-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1474 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1475 -calendars]): also returns the owner of the listed folders.
1477 * SoObjects/Appointments/SOGoAppointmentFolder.m
1478 ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
1480 * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
1481 method into UIxFolderActions.
1483 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1484 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
1485 freebusy info from the "personal" calendar.
1487 * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
1488 -createFolderAction]): new standardized method for requesting
1489 folder creations among gcs-based modules.
1491 * UI/Common/UIxParentFolderActions.[hm]: new action class module.
1493 * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
1494 module, equivalent to the SOGoParentFolder's child
1495 SOGoContactFolders, but for calendars.
1497 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
1498 method that returns translated strings for controller bundles
1499 (same as what UIxComponent does for view bundles).
1500 ([SOGoObject -pathArrayToSOGoObject]): new method that returns
1501 the real path to a subscribed folder (if subscribed).
1502 ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
1503 ([SOGoObject -globallyUniqueObjectId]): new instance method
1504 calling its class equivalent.
1506 2007-09-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1508 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
1509 whether the user is logged in and if so, redirect to his/her
1511 ([SOGoRootPage -appendToResponse:inContext:]): removed useless
1514 2007-09-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1516 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1517 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1519 ([SOGoFolder -displayName]): new method.
1520 ([SOGoFolder -delete]): accept to proceed only if nameInContainer
1523 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1524 ([SOGoContactLDAPFolder
1525 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1526 renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
1528 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1529 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1530 removed method, reimplemented in SOGoFolder.
1531 ([SOGoContactGCSFolder -displayName]): removed method,
1532 reimplemented in SOGoFolder.
1533 ([-delete]): removed method, modified in SOGoFolder.
1535 * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
1536 a subclass of SOGoParentFolder.
1538 * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
1539 from SOGoContactFolders and modified to be more content-independent.
1541 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
1542 ([UIxMailActions -markMessageReadAction]): new methods moved from
1543 UIxMailListView and adapted to invoke the client object directly,
1544 since the previous versions had to to a lookup from the parent
1547 * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
1548 method into UIxMailActions.
1549 ([-markMessageReadAction]): same as above.
1550 ([-viewAction]): removed useless method.
1551 ([-javaScriptOK]): removed useless method.
1552 ([-isJavaScriptRequest]): removed useless method.
1553 ([-lookupActiveMessage]): removed useless method.
1555 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1556 -responseWithStatus:status]): new method that returns a WOResponse
1557 initialized with the specified status code.
1558 ([WODirectAction -responseWith204]): new method that invokes the
1559 above one with "204" as parameter.
1560 ([WODirectAction -redirectToLocation:newLocation]): rewrote method
1561 to make use of -responseWithStatus:.
1563 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
1564 method that returns a WOResponse initialized with the 204 status
1567 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
1568 always use a "not deleted" search qualifier along with the user
1569 qualifier (if present).
1571 2007-09-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1573 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1574 -contactSearchAction]): only return the records which have an
1577 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1578 -trashInContext:_ctx]): no longer expunge the mailbox after
1579 marking a message deleted.
1580 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
1583 * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
1584 ([-trashAction]): moved method into UIxMailActions.
1585 ([-moveAction]): moved method into UIxMailActions.
1587 2007-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1589 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1590 ([_UIxHTMLMailContentHandler
1591 -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
1592 comments from the CSS code, do not add the CSS code to the body
1593 content and remove references of body from the CSS declarations.
1594 ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
1595 ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
1596 common with cssContent in a different method and invoke it only
1599 * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
1600 instead of UIxPageFrame.
1602 2007-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1604 * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
1605 ([-appendToResponse:responseinContext:ctx]): commented out.
1606 ([SOGoRootPage -connectURL]): new accessor that returns the full
1607 url the the "connect" method.
1608 ([-connectAction]): rewrote method to return a properly formatted
1609 auth. cookie based on the username and password passed as
1612 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1613 set the value of the cookie to "discard" and set its expiration
1616 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1617 -preprocessCredentialsInContext:context]): consider the user
1618 anonymous if the cookie value is "discard".
1619 ([SOGoWebAuthenticator
1620 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1621 set the expiration date of the cookie to yesterday.
1623 * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
1624 returns the path to the application if the clientObject is not a
1627 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
1628 moved the requirement of authentication from the SOGo application
1631 * SoObjects/Appointments/SOGoAppointmentObject.m
1632 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
1633 check whether the new appointment object is still relevant before
1634 sending a notification.
1636 2007-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1638 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1639 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1640 render the login page through the SoDefaultRenderer.
1642 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
1643 -isPublicInContext:localContext]): new overriden method that
1646 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1647 -currentCalendarLogin]): replace css-unsafe characters with _.
1649 * UI/SOGoUI/UIxComponent.m ([UIxComponent
1650 -shortUserNameForDisplay]): simplified method.
1651 ([-user]): removed method since [context activeUser] is as useful.
1653 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1655 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1656 set the cookie path to "/".
1658 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
1659 authenticator based on the request handler key. "dav" returns the
1660 SOGoDAVAuthenticator, anything else returns the Web authenticator.
1662 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
1663 "SOGoAuthenticator".
1665 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
1666 implementing a subclass of SoCookieAuthenticator, designed for
1667 web-based cookie authentication of users.m
1669 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1670 new method that resets the authentification cookie.
1672 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1674 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
1675 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
1676 didBind to NO to make sure no false authentication is returned if
1677 the bind operation is not executed.
1679 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1681 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
1682 "In-Reply-To" header field when replying.
1684 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
1685 table field names that are queried.
1687 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1688 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
1689 add the "c_" prefix to the quick table field names that are
1692 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1694 * SoObjects/Appointments/SOGoAppointmentFolder.m
1695 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
1696 "personal" to the ocs path of the appointment folder.
1698 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1699 -flatContentAsString]): use latin1 when the encoding is not
1700 specified, and to reencode data chunk which were not correctly
1701 decoded with the original charset.
1703 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
1704 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
1705 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
1706 ([SOGoAppointmentFolder
1707 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
1708 override those methods to use the "personal" additional directory.
1710 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
1711 append "/personal" to the calendar path to simulate a single
1712 calendar in a choice of many.
1714 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1715 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
1716 methods back here. Moved the folder existence check here, and do
1717 it on self only when the lookup happens for a non-folder object.
1718 This permits to accept entries for folders with parents who
1721 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1723 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1724 -shouldTakeValuesFromRequest:requestinContext:context]): same as
1727 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1728 -shouldTakeValuesFromRequest:requestinContext:context]):
1729 redesigned method since any method called can be received from a
1730 POST or a GET. Instead we check the method call itself and we
1731 accept only if it has the "save" prefix.
1733 * SoObjects/Appointments/SOGoAptMailNotification.m
1734 ([SOGoAptMailNotification -getSubject]): returns the subject an a
1735 quoted-printable encoded string, if needed.
1737 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1738 -asQPSubjectString:encoding]): moved method into
1739 NSString+Utilities.m.
1741 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1743 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1744 -messageForwardingList])
1745 ([UIxPreferences -itemMessageForwardingText])D
1746 ([UIxPreferences -userMessageForwarding])
1747 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
1748 new template methods for manage the user preference regarding
1751 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
1752 algorithm to return, in order, the user's defined language or the
1753 first browser language or, finally, the default language.
1754 ([SOGoUser -messageForwarding]): new method that returns the user
1755 preference for message forwarding: "inline" or "attached",
1756 defaulting to "attached".
1758 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1759 -contentForInlineForward]): new method that returns the content of
1760 the message for inline forwarding based on the SOGoMailForward
1763 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1764 -fetchMailForForwarding:sourceMail]): check the user preference
1765 for message forwarding and compose inline forwarded messages if required.
1767 * SoObjects/Appointments/SOGoCalendarComponent.m
1768 ([SOGoCalendarComponent
1769 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1770 now use a template based on the language returned from the
1773 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
1774 a subclass of SOGoMailForward for English locale.
1776 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
1777 a subclass of SOGoMailForward for French locale.
1779 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
1780 helps build template for inline forwarded messages.
1782 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1784 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
1785 to handle "<var:if-ie>" template tags.
1787 * UI/SOGoElements: new extension bundle containing sogo-specific
1790 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1791 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
1792 selected in the dialog.
1793 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
1794 first category, if ever, of the calendar entity.
1796 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1797 -composeAction]): restored method since it is needed by the
1800 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1801 -composeAction]): the address fields should be arrays and not
1804 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
1805 that returns the build date of SOGo in the template.
1807 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1809 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1810 -_flattenedRecords:records]): when the c_cn field is empty,
1811 returns set a formatted string with the concatenation of
1812 c_givenname and c_sn as the displayName.
1814 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1815 -isValidMailAccountName:_key]): prevent unknown accounts from
1818 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1819 -pathToAttachmentObject]): we no longer need the filename
1820 extension for SoLookup...
1822 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1823 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
1824 filename to have an extension, and thus accept any filename.
1826 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1827 -currentCName]): new method that returns the c_name of the
1828 contact, correctly escaped to be passed by url afterwards.
1830 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1831 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
1832 instance of [self decodedFlatContent] instead of the buggy
1833 NSString from [super flatContentAsString] to the parser.
1835 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1837 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
1838 new category method to reponds to the "delete" web command on
1840 ([UIxMailActions -deleteAttachmentAction]): new category method to
1841 reponds to the "deleteAttachment" web command on drafts, taking
1842 the "filename" url parameter into account.
1844 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1845 -contentForEditing]): new method that retrieve the editable mail
1847 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
1848 returns the body keys for attached files (parts with a "filename"
1851 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1852 -asQPSubjectString:encoding]): do not change the string if the
1853 encoded string has the same length (which means it is already
1855 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
1856 that retrieve a draft along with its attachments for editing.
1857 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
1858 choke if the "to" header field is empty.
1859 ([SOGoDraftObject -delete]): new method to delete the draft folder
1860 whenever operations are done.
1862 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1864 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
1865 useless stub method, of which the intention was implemented in
1867 ([-lookupSentFolderUsingAccount]): removed obsolete method.
1868 ([-selectedMailIdentity]): removed obsolete method.
1869 ([-lookupSentFolderUsingFrom]): removed obsolete method.
1870 ([-storeMailInSentFolder:_path]): removed obsolete method, of
1871 which the mechanism has been put in -[SOGoDraftObject sendMail]
1873 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
1874 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
1875 adapted algorithms to the new SOGoDraftObject methods.
1876 ([-deleteAction]): removed method since local draft objects cannot
1877 be removed by the user.
1879 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1880 -expungeAction]): new method replacing the one previously found in
1882 ([UIxMailFolderActions -createFolderAction])
1883 ([UIxMailFolderActions -renameFolderAction])
1884 ([UIxMailFolderActions -deleteFolderAction])
1885 ([UIxMailFolderActions -emptyTrashAction])
1886 ([UIxMailFolderActions -subscribeAction])
1887 ([UIxMailFolderActions -unsubscribeAction]): error situations
1888 should have http return code 500 instead of 403.
1890 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1891 -composeAction]): new method replacing the one previously in
1894 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1895 -imap4URLString]): removed overriden method (see below).
1897 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
1898 cache the mailbox acl.
1899 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
1900 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
1902 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
1903 the new method of determining the users mail accounts.
1905 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
1906 longer adds a "/" at the end of the string (the default for
1907 folders), therefore this will be overriden in SOGoMailFolder
1908 rather than in SOGoMailObject.
1910 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
1911 method, moved into the new UIxMailActions module class.
1913 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
1914 -newDraft]): new method that returns a new SOGoDraftObject
1915 instance with a unique filename based on the current timestamp and
1916 the "newDraft" prefix.
1918 -lookupName:nameinContext:localContextacquire:acquire]): overriden
1919 method by detecting local drafts with their "newDraft" prefix.
1920 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
1922 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
1923 from scratch by making it a subclass of SOGoMailFolder.
1925 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
1928 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
1931 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
1934 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
1935 new method, initializing the new ivars: IMAP4ID, headers, text,
1936 sourceURL and sourceFlag.
1937 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
1938 ([-_ensureUserSpoolFolderPath])
1939 ([-saveMimeMessageToTemporaryFileWithHeaders:])
1940 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
1941 ([-deleteTemporaryMessageFile:], [-delete], [-content])
1942 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
1943 ([-uid], [-flags], [-size], [-envelope]): removed methods.
1944 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
1946 ([SOGoDraftObject -setSourceURL:newSourceURL])
1947 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
1948 methods to store the url of the original message between accesses
1949 so that, depending on the action taken (forward or reply), the
1950 correct flag can be given.
1951 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
1952 the imap4 id that is returned for the message whenever it is saved
1953 into the drafts folder.
1954 ([SOGoDraftObject -save]): new method that takes in charge the
1955 saving of the message in the IMAP drafts folder.
1956 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
1957 new method that fills the original data of the new message with
1958 the reply content of the original message.
1959 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
1960 above for message forwarding.
1961 ([-spoolFileManager]): removed useless method (only returned the
1962 default filemanager...)
1963 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
1964 the resulting message as an NSData chunk.
1966 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
1967 containing a rewrite of the mail action methods found in
1968 UI/Mailer/, that needed to be put in the SOGoMailObject class.
1969 ([SOGoMailObject -subjectForReply]): new method that returns a
1970 subject suitable for replies.
1971 ([SOGoMailObject -contentForReply]): new method that returns the
1972 textual content of an email, quoted for replying.
1973 ([SOGoMailObject -filenameForForward]): new method that returns
1974 the name of the filename that should contain the forwarded
1975 message, based on its subject.
1976 ([SOGoMailObject -subjectForForward]): explicit.
1978 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1980 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1981 -mailAccounts]): rewrote method to return the name of the mail
1982 accounts now available with the -[SOGoUser mailAccounts] method.
1983 ([UIxMailMainFrame -showLinkBanner]): removed method.
1984 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
1985 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
1986 ([UIxMailMainFrame -rootURL]): removed method.
1987 ([UIxMailMainFrame -userRootURL]): removed method.
1988 ([UIxMailMainFrame -calendarRootURL]): removed method.
1989 ([UIxMailMainFrame -contactsRootURL]): removed method.
1990 ([UIxMailMainFrame -hasErrorText])
1991 ([UIxMailMainFrame -errorText])
1992 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
1993 ([-composeAction]): removed method. Now provided by
1994 UIxMailAccountActions.
1995 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
1996 ([UIxMailMainFrame -hideFolderTree]): removed method.
1997 ([UIxMailMainFrame -treeRootClassName]): removed method.
1998 ([UIxMailMainFrame +initialize]): removed method.
1999 SOGoMailTreeRootClass userdefaults will no longer have any effect.
2001 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
2002 -redirectToLocation:newLocation]): new method that implements the
2003 same functionality as WOComponent.
2005 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
2007 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
2008 method that returns whether the current mail is store in the
2009 drafts folder hierarchy.
2011 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
2012 ([-primaryEmail]): removed method.
2013 ([SOGoUser -primaryIMAP4AccountString]): removed method.
2014 ([SOGoUser -mailAccounts]): new method that returns an array
2015 containing description dictionaries for all the user mail
2016 accounts. Each account also contain the user's identities for that
2018 ([SOGoUser -allIdentities]): new utility method that returns all
2019 the user identities on all accounts.
2020 ([SOGoUser -primaryIdentity]): new method return the first
2021 identity of the first account.
2023 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
2025 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2026 -isInDraftsFolder]): returns NO.
2027 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
2029 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
2031 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2032 -isInDraftsFolder]): new method that detects if self is contained
2033 by the drafts folder by calling itself on the container object.
2035 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
2037 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
2038 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
2039 return the name of the mail accounts now available with the
2040 -[SOGoUser mailAccounts] method.
2042 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
2045 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
2048 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
2049 -keysWithFormat:format]): method that forward the method of the
2050 same name to each member of the array, considering they all are
2051 instances of NSDictionary.
2052 ([NSArray -objectsForKey:key]): same principle as above.
2053 ([NSArray -flattenedArray]): new method that transforms an array
2054 of arrays into a single array containing all the elements of the
2057 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
2058 -keysWithFormat:keyFormat]): new method inspired by the python
2059 string formatting system and which replaces occurences of "%{key}"
2060 by the corresponding keys.
2062 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2064 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
2065 sql script before the generic one when initializing mandatory
2068 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2070 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2071 -pureEMailAddress]): new utility method inspired by the
2072 "_rawSender" private method in SOGoDraftObject, which it now
2075 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
2076 provides a common API for sending emails, no matter what the
2079 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2081 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2082 -quotasAction]): invoke "relativeImap4Name" instead of
2083 "nameInContainer" since the latter also returns the "folder"
2086 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2087 -listMailboxesAction]): declare the output as text/plain in UTF-8.
2089 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2090 -deleteFolderAction]): fixed the url of the destination folder.
2092 * Main/SOGo.m ([SOGo +initialize]): show the build date and
2093 hostname at startup.
2095 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2097 * SoObjects/Appointments/SOGoCalendarComponent.m
2098 ([SOGoCalendarComponent
2099 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
2100 set the mail date to the current date string returned by our
2101 rfc822DateString extension method.
2103 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2104 -_gcsFoldersFromFolder:): ignore the personal folders who are
2105 returned but don't really exist.
2107 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
2109 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
2110 has to return only one element.
2112 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2114 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
2115 -content]): new method returning the decoded content of the
2116 corresponding attachment as an NSData instance.
2117 ([UIxMailPartViewer -filename]): if the "filename" parameter of
2118 the metadata parameterList is empty, try to find out the filename
2119 from the "disposition" metadata returned with the BODYSTRUCTURE
2122 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
2123 -composeAction]): prefix the INBOX folder with "folder".
2125 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
2126 -relativeImap4Name]): return nameInContainer stripped from its
2127 first 6 characters since all folder names are prefixed with
2130 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2131 -imap4URLString]): invoke -relativeImap4Name instead of
2132 "nameInContainer" since the former will return the fixed IMAP4
2133 foldername and the latter the SoObject name.
2135 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2136 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
2138 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
2139 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
2140 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
2141 ([SOGoMailAccount -sentFolderNameInContext:])
2142 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
2143 names with "folder".
2144 ([SOGoMailAccount -inboxFolderInContext:_ctx])
2145 ([SOGoMailAccount -sentFolderInContext:_ctx])
2146 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
2147 the folder names with "folder" since they are prefixed earlier.
2149 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2151 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
2152 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
2153 all starts with "folder".
2155 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
2156 longer declare security info from here.
2158 * SoObjects/Mailer/SOGoMailFolder.m
2159 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
2160 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
2161 folder names now always start with "folder".
2163 * SoObjects/Mailer/SOGoMailAccount.m
2164 ([-lookupName:inContext:acquire:]): folder names now always start
2167 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2169 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
2170 -forwardAction]): adapted to the new saveAttachment:withMetadata:
2173 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
2174 code to save the attached filenames with the filename returned by
2175 the web server as well as their mime types.
2177 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
2178 ([UIxMailPartMessageViewer -toAddresses])
2179 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
2180 the corresponding fields separated with a ", " (if needed).
2182 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
2183 -saveAttachment:_attachwithMetadata:metadata]): new method
2184 replacing -saveAttachment:withName: and which takes a dictionary
2185 as parameter with the filename and the mime type of the
2187 The mimetype is then saved in a hidden text file.
2188 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
2189 take the mime type from the hidden text file related to the
2192 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
2193 ([SOGoContactGCSFolder
2194 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2195 return records if the db records are > 0 and not just > 1...
2197 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2199 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
2201 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
2203 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2204 ([SOGoContactLDAPFolder
2205 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2206 translate the returned records to a normalized form.
2208 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2209 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2210 translate the returned records to a normalized form.
2212 * UI/Scheduler/UIxCalListingActions.m,
2213 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
2214 SoObjects/SOGo/AgenorUserDefaults.m,
2215 SoObjects/Contacts/SOGoContactGCSFolder.m,
2216 SoObjects/Appointments/SOGoAppointmentFolder.m,
2217 OGoContentStore/OCSiCalFieldExtractor.m,
2218 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
2219 table fields with "c_".
2221 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2223 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
2224 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
2225 the application settings. If set, both limit will influence the
2226 maximum size of the resultsets and the time taken to solve them.
2227 ([LDAPSource -_initLDAPConnection]): initialize the limits.
2229 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2231 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
2232 method that declares the DAV namespace related to CardDAV.
2233 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
2234 method that declares the "access-control" and "addressbook-access"
2235 classes to the list.
2237 * SoObjects/Appointments/SOGoAppointmentFolder.m
2238 ([-lookupActionForCalDAVMethod:]): removed method.
2239 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
2240 method that declares the DAV namespace related to CalDAV.
2242 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
2243 optional method for subclasses which handle specific extensions to
2244 the DAV protocol: CardDAV or CalDAV.
2246 -lookupName:lookupNameinContext:localContextacquire:acquire]):
2247 new overriden method that handles dav invocations for extensions
2248 to DAV by returning an appropriate SoSelectorInvocation.
2250 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2251 -asDavInvocation]): new method returning a dictionary with a "ns"
2252 key representing the dav namespace and a "method" key representing
2253 the dav method name of the request.
2255 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
2256 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
2258 ([UIxPreferences -shouldDisplayPasswordChange]): new template
2259 method that returns the value of SOGoUIxUserCanChangePassword.
2261 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
2262 scan the value of SOGoUIxDefaultModule. If not set, the default
2263 module defaults to "Calendar".
2264 ([SOGoUserHomePage -defaultAction]): redirect the user to the
2265 value of "SOGoUIxDefaultModule".
2267 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2269 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2270 -contactInfos]): cache the results to avoid multiple invocations.
2272 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2273 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
2274 really should return something or if we fake to return nil...
2276 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2278 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
2279 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
2280 default is set to "bypass".
2282 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2283 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
2284 when authMethod is set to "bypass" from now on. This would avoid a
2285 security concern with a default installation of SOGo.
2286 AuthentificationMethod is now prefixed with "SOGo" for better
2289 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2291 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2292 -quotasAction]): new method that returns a json representation of
2295 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2297 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2298 -imap4URL]): rewrote method to support accented mailbox names.
2299 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
2300 SOGoAuthenticator's passwordInContext:.
2302 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2303 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
2304 start and due dates to nil if hasStartDate and hasDueDate are
2307 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2308 -passwordInContext:context]): made method public.
2310 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2311 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
2312 to false to avoid a null violation.
2314 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2316 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2317 -contentAsString]): returns the message encoded in ISO Latin 1
2320 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
2321 SOGoSuperUsername user defaults.
2322 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
2324 ([SOGoUser -rolesForObject:objectinContext:context]): if the
2325 current user is the superuser, grant him/her the "owner" role.
2327 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
2328 the folder only if the current user is the owner of the future
2331 * SoObjects/Appointments/SOGoCalendarComponent.m
2332 ([SOGoCalendarComponent -contentAsString]): we return the content
2333 based on the permissions returned by the security manager instead
2334 of by looking at the user roles.
2336 * SoObjects/Appointments/SOGoAppointmentFolder.m
2337 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
2338 folders of the user to whom this folder belongs instead of the
2339 active user. This way, a delegate user will be able to have the
2340 same view that the original user has if he connects from his user
2343 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
2344 user exists before creating the SOGoUserFolder instance. If not,
2347 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
2348 return the message source code in plain text.
2350 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2351 -contentAsString]): returns the message encoded in UTF8.
2353 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2355 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
2356 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
2357 leading tagname into account when serializing the element values.
2359 * Main/SOGoProductLoader.m: only load bundle directories ending
2360 with the "SOGo" extension.
2362 * Main/SOGo.m ([SOGo
2363 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
2364 result set if the query has caused no exception. Otherwise we get
2365 an "evaluation is in progress exception".
2367 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2369 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2370 -generateSQLForInsert]): initialize error to nil before the
2371 serialization. Otherwise the method can get confused if it ever is
2372 initialized to something else.
2374 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
2375 -folderIsMandatory]): returns NO unconditionnally.
2377 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2378 -appendPersonalSources]): add the "personal" folder to the list of
2379 user folders even if it doesn't exist, so that it is created when
2380 the user accesses it.
2382 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2383 -folderIsMandatory]): returns YES if nameInContainer is set to
2384 "personal", which is the default address book.
2386 * SoObjects/Appointments/SOGoAppointmentFolder.m
2387 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
2388 users must have one Calendar folder (one and only one).
2389 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
2390 escaping '\' so make the carriage return a real one. This way,
2391 PgSQL 8 won't complain about escaping the string.
2393 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
2394 method that create the folder if considered mandatory.
2395 ([SOGoFolder -folderIsMandatory]): new method that determines
2396 whether the folder should be created automatically or not. To be
2397 overriden by subclasses.
2399 * Main/SOGo.m ([SOGo -run]): override method and create the
2400 missing system tables if needed.
2402 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2404 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
2405 -mailDateFormatter]): returns the user's date formatter.
2407 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
2408 applies the user timezone to the date object before returning it.
2410 * UI/Common/UIxSortButton.m: removed useless class module.
2412 * UI/Common/UIxSortableTableHeader.m: removed useless class
2415 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2416 -contactInfos]): use the "asc" url parameter instead of "desc" to
2417 determine the ordering.
2418 ([-sortOrdering]): removed method.
2419 ([UIxContactsListView -init]): removed the "searchText" ivar.
2420 (general): the template no longer use the UIxSortableTableHeader
2423 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
2424 -defaultSortKey]): default sort following the messages arrival
2425 instead of their date.
2426 ([-isSortedDescending]): removed method.
2427 ([-imap4SortOrdering]): use the "asc" url parameter instead of
2428 "desc" to determine the ordering.
2429 (general): the template no longer use the UIxSortableTableHeader
2432 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2434 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
2436 ([-setQualifier:_msg], [-qualifier]): removed methods.
2437 ([UIxMailListView -defaultAction]): added code to handle the
2438 search criteria and value passed as url parameters. Also, we now
2439 handle the same search criterias as Thunderbird/Icedove.
2441 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2443 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
2444 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
2445 the string instead of the string itself.
2446 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
2448 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
2449 bool var "acceptAnyUser" that is set when the AuthenticationMethod
2450 user default is nil.
2451 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
2452 unconditionnally returns an instance whenever acceptAnyUser is set.
2454 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2456 * Main/sogod.m (main): prevent SOGo from running as root.
2458 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2460 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2461 -setCurrentPassword:newPassword]): new stub method.
2462 ([SOGoUser -dateFormatterInContext:context]): new method that
2463 returns an instance of SOGoDateFormatter configured based on the
2466 * UI/Common/UIxPageFrame.m ([UIxPageFrame
2467 -relativePreferencesPath]): new method.
2469 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
2470 removed useless method.
2472 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
2473 different configurable formats (long and short date + time).
2475 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
2477 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2478 -isInternetRequest]): removed method.
2480 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2481 -jsonRepresentation]): new method with an explicit name.
2483 * UI/PreferencesUI/product.plist: new bundle that provides a web
2484 ui for handling user defaults.
2486 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
2488 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
2490 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
2492 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2494 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
2496 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2498 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
2499 -compareEventsAscending:otherEvent]): no longer use compare: on
2500 the time objects since one of them could be an NSNull, which
2501 crashes when comparing with anything.
2503 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2504 -eventsListAction]): sort events from here.
2505 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
2507 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
2508 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
2510 * SoObjects/Appointments/SOGoAppointmentFolder.m
2511 ([SOGoAppointmentFolder
2512 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
2513 no longer sort elements from here.
2515 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2517 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2518 -aclsForUser:uid]): implemented method by forwarding the request
2519 to the container. This fixes a bug where users could no longer
2520 read emails from shared folders.
2522 * SoObjects/Appointments/SOGoCalendarComponent.m
2523 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
2524 here, but rather in its parent class.
2526 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
2527 -stringForSecondsSinceThe70s:seconds]): new utility method.
2529 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2530 -eventsListAction]): no longer reduce the end day of one day for
2531 all day events since everything has been fixed in
2532 OCSiCalFieldExtractor.
2534 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2535 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
2536 the end date of all day events of 1 so that they stay on their
2539 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2541 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
2543 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
2545 ([-fetchCoreTasksInfos]): removed method.
2547 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2548 -init]): initialize an instance of SOGoDateFormatter.
2549 ([UIxCalListingActions -eventsListAction]): the display start and
2550 end dates are added to the listing for each event.
2552 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
2554 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2555 -isAllDay]): returns YES if the "hm" url parameter is set to
2557 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
2558 is displayed one day earlier.
2560 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2562 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2563 -_setupContext]): take the range of dates specified by the popup
2566 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
2567 WODirectAction that returns WOResponse objects with the events or
2568 todos satisfying the parameters passed in the url.
2570 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2571 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
2572 "isAllDay" into account and compute the amount of days to pass to
2575 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
2577 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
2578 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
2579 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
2580 new method that returns a json-formatted array of the visible tasks
2581 for the current user.
2583 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2585 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
2586 object must be present in the list of UIDs we delete the object
2587 from. Otherwise Calendar objects having no organizer and no
2588 attendees will remain in their owner's Calendar.
2590 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2591 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
2592 first 3 elements of the path array if the url returned by
2593 baseURLInContext: returns a hostname.
2595 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2596 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
2597 nil, in which case a crash happens when calling hasPrefix:.
2598 ([SOGoMailFolder -_sharesACLs]): same as above.
2599 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
2600 otherUsersFolderName is nil, we return nil.
2601 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
2602 nil from [self otherUsersPathToFolder], we return nil too.
2604 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2606 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2607 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
2608 the result of [self baseURLInContext:] to avoid a double escaping
2609 in the resulting string.
2611 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
2612 the user has the "ObjectReader" role on the parent container, then
2613 he is granted the "ObjectViewer" role on this object. Same for
2614 "ObjectEraser", although this might change later.
2616 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2617 -toolbar]): determine the toolbar filename based on the
2618 permissions declared by the securitymanager. The role mechanism
2619 has been adjusted on a lowerlevel so we can simplify the code.
2621 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2622 -initWithName:newNameinContainer:newContainer]): read the content
2623 directly from here. That way we can determine whether the object
2625 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
2626 the ObjectCreator role is enabled, we also grant the ObjectEditor
2627 role to the current user.
2629 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
2630 changed the method paradigm to only return HTTP code 204. Not test
2631 is done whatsoever since the security manager does it for us.
2633 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
2634 removed method because the same exists in UIxFolderActions.m
2636 * UI/Contacts/UIxContactsUserRightsEditor.m
2637 ([UIxContactsUserRightsEditor
2638 -setUserCanReadObjects:userCanReadObjects]): new method.
2640 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
2641 "FolderEraser" and special permission "Access Object". Removed
2642 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
2643 can be used instead. Removed "FolderReader" since it is useless.
2645 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2646 -vCard]): directly use the "content" ivar since it is initialized
2647 during object creation.
2649 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2650 ([SOGoContactLDAPFolder -init]): no longer handle the
2651 nameInContainer no the container ivars. They were removed because
2652 this class is a descendant of SOGoObject which already has them.
2653 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
2654 returning "displayName".
2655 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
2658 * SoObjects/Appointments/SOGoCalendarComponent.m
2659 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
2660 ([SOGoCalendarComponent -findParticipant:user]): new name for
2661 method "participant:".
2662 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
2663 findparticipant but taking a uid string as parameter.
2664 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
2665 iCalendar automatically. Instead, this is done only when the user
2666 is a "date and time viewer".
2667 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
2668 (modifier and responder) into account by compiling them with the
2671 * SoObjects/Contacts/SOGoContactFolder.h: removed
2672 "nameInContainer" from the list of required methods.
2674 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
2675 -davContentType]): returns "text/calendar".
2677 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2678 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
2679 groupdav resource-type.
2681 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2682 -davContentType]): same as below.
2684 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2685 -initWithName:newNameinContainer:newContainer]): new overriden
2686 method setting the custom owner directly.
2688 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2689 -davContentType]): same as below.
2691 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2692 -davContentType]): same as below.
2694 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
2695 declare "httpd/unix-directory".
2697 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
2698 "UTC" as fallback timezone instead of "Canada/Eastern".
2699 ([-hasEmail:email]): make use of the new NSArray's
2700 containsCaseInsensitiveString: method.
2702 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2703 -davContentType]): declare "message/rfc822" as content type.
2705 * SoObjects/Appointments/SOGoAppointmentFolder.m
2706 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
2708 ([SOGoAppointmentFolder
2709 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
2710 ([-fetchContentObjectNames]): commented out method since it was
2711 usefull only for testing Funambol.
2713 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
2714 -containsCaseInsensitiveString:match]): an enhanced version of
2717 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
2719 ([-showMarkDeletedButton]): removed useless method.
2720 ([-showTrashButton]): removed useless method.
2722 * SoObjects/Appointments/iCalEntityObject+SOGo.m
2723 ([iCalEntityObject -userIsParticipant:user]): new proxy method
2724 that invoked isParticipant on self for each possible email
2725 addresses of the user passed as parameter.
2726 ([iCalEntityObject -userIsOrganizer:user]): same as above.
2728 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
2731 * SoObjects/Appointments/SOGoAppointmentObject.m
2732 ([SOGoAppointmentObject
2733 -saveContentString:contentStringbaseVersion:baseVersion]): remove
2734 method since an event may not have an organizer.
2736 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2737 -GETAction:localContext]): clarified method. Added support for
2738 content-type (thanks to Helge Hess).
2739 ([SOGoObject -initWithName:_nameinContainer:_container]):
2740 initialize and retain the owner.
2741 ([SOGoObject -davContentType]): returns "text/plain".
2743 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2745 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2746 -addUserInAclsAction]): send an acl addition mail.
2747 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
2750 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2751 -_realActionWithFolderName:folderDict]): handle the possible
2752 presence of the "mail-invitation" url parameter. If present, the
2753 user will be redirected to the relevant folder.
2755 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
2756 ([SOGoUser -language]): new method that returns the user's
2757 preferred language, or the system's if none has been set yet.
2759 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
2760 that returns the full dav url to self.
2761 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
2762 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
2763 returns the full so url to the base of the SOGo module to which
2764 self belongs, and for the specified user.
2765 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
2766 but for the current user.
2767 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
2768 required by the acl advisory templates and which returns a link
2769 the target user can click to activate its new subscription.
2770 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
2771 but for inclusion of the application/x-sogo-notification part,
2772 which will be handled by the Lightning enhancer plugin.
2774 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
2775 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
2776 do nothing yet since imap folder subscription is not handled yet.
2778 * SoObjects/SOGo/SOGoContentObject.m
2779 ([-hasSupportForDefaultRoles]): removed method.
2781 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2782 -getFullEmailForUID:uid]): new method that returns the username +
2785 * SoObjects/Appointments/SOGoCalendarComponent.m
2786 ([SOGoCalendarComponent +initialize]): the default language for
2787 mail templates is now set to English.
2789 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
2790 SOGoACLAdvisory implementing the french template for user removal
2793 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
2794 SOGoACLAdvisory implementing the french template for user
2797 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
2798 SOGoACLAdvisory implementing the english template for user removal
2801 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
2802 SOGoACLAdvisory implementing the english template for user
2805 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
2806 supercall of all the acl advistory templates. The model is based
2807 on SOGoAptMailNotification except that the template encapsulates
2808 the message to be sent. Later, we might create a superclass common
2809 to all template-based emails.
2811 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2812 -addRange:newRange]): new method that store a string
2813 representation of the NSRange passed as parameter.
2814 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
2815 any range contained in self intersect with the one passed as parameter.
2817 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
2818 store ranges in an array to prevent them from intersecting with
2819 each other during the passes.
2821 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2823 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2824 -primaryFetchMailboxInfo]): useless method. Removed.
2826 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2828 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2829 -toManyRelationshipKeys]): invoke [self subfolders].
2830 ([SOGoMailFolder -subfolders]): new method containing what used to
2831 be in toManyRelationshipKeys.
2832 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
2835 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2836 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
2837 named and at the beginning of which we put the predefined folders.
2839 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2840 -emptyTrashAction]): new method inspired by a similar one from
2841 UIxMailListView, to which we added the ability to remove
2844 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
2845 method. Replaced with a similar one in UIxMailFolderActions.
2847 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2848 -renameFolderAction]): implemented method.
2849 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
2850 specified folder. Instead, we put it in the trash folder.
2852 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
2853 method, replaced with a similar method in the new
2854 UIxMailFolderAction class module.
2855 ([-deleteFolderAction]): idem.
2857 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2858 -createFolderAction]): new method implementing subfolder creation.
2859 ([UIxMailFolderActions -renameFolderAction]): new method
2860 implementing subfolder renaming (basic implementation to be
2862 ([UIxMailFolderActions -deleteFolderAction]): new method
2863 implementing folder deletion.
2865 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
2866 web actions related to the handling of imap folder.
2868 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2870 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2871 -ownerInContext:localContext]): overriden method because we are an
2872 IMAP4 client and we need a bit more intelligence to deduce the
2873 owner of the current folder.
2874 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
2875 return an NSException so we need to be careful here to avoid a
2877 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
2878 NSException so we need to be careful here to avoid a crash.
2880 * SoObjects/Mailer/SOGoMailAccounts.m
2881 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
2882 there is no longer any concept of Intranet or Internet connection
2885 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2886 -sharedFolderName]): new method.
2887 ([SOGoMailAccount -otherUsersFolderName]): new method.
2889 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
2890 new javascript code and the new UIxMailAccountActions class.
2892 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
2893 javascript code and the new UIxMailAccountActions class.
2895 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
2896 new javascript code and the new UIxMailAccountActions class.
2898 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2899 -listMailboxesAction]): new method that returns a json-formatted
2900 tree of all the mailboxes available to the current user.
2902 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
2903 web actions related to the handling of mail accounts.
2905 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
2908 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
2909 -jsonRepresentation]): new interface method meant to be overriden
2910 by the primitive classes.
2912 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2914 * UI/MailerUI/UIxMailSplashView.m: removed.
2916 * SoObjects/Appointments/SOGoCalendarComponent.m
2917 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
2918 the uid to the list only when the user email is recognized by the
2921 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2923 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2924 -isDeletionAllowed]): completed method with the new imap acl api.
2926 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
2929 * SoObjects/SOGo/SOGoPermissions.m: added the new role
2930 "SOGoMailRole_MessageEraser".
2932 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
2933 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
2934 "defaultUserID" method into account.
2936 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
2937 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
2938 "defaultUserID" method into account.
2940 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
2941 methods to support the IMAP acls mentionned in the RFC 4314,
2942 removed the ones specific to Cyrus.
2944 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
2945 mandatory method for subclasses. Removed the SOGoDefaultUserID
2948 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
2949 overriden method to return @"<default>".
2951 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2952 -defaultUserID]): overriden method to return @"<default>".
2954 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2955 -aclsForUser:uid]): overriden method.
2956 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
2957 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
2958 ([SOGoMailFolder -defaultUserID]): overriden method.
2959 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
2961 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2963 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2964 -aclUsersForObjectAtPath:objectPathArray]): new method that being
2965 forwarded the calles to aclUsers for the GCS-based subclasses of
2968 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
2969 methods that would have been used to support IMAP acls. Replaced
2970 them with the new protocol for them that has been implemented in
2971 SOGo during the last few weeks.
2973 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2974 -hasSupportForDefaultRoles]): override method by returning "YES".
2976 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2977 -addObjectUniquely:object]): new method with an explicit name.
2979 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
2980 "acl" to "aclUsers". Now designed to return only the uid of the
2981 users involved in an ACL.
2982 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
2983 "NO" by default. To indicate to the acl editor that we don't want
2984 to handle a default user.
2986 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
2987 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
2990 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
2991 provides a view to the IMAP acls.
2993 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
2995 * UI/WebServerResources/MailerUI.js: replaced all invocations of
2996 addEventListener to the use of prototype's Event object. Also,
2997 configured all menus programmatically following descriptions lists
2998 containing their callbacks, or nulls, submenus id or separators.
3000 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3002 * UI/Common/UIxObjectActions.m ([UIxObjectActions
3003 -addUserInAclsAction]): save the previous roles of the user
3004 (unlikely) or the default roles, or None instead of saving the
3005 roles that should appear the first time in the role editor when no
3006 default has been set...
3008 * SoObjects/SOGo/SOGoObject.m: defined a new constant
3009 "SOGoDefaultUserID".
3011 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3012 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
3013 ignore the "AuthorizedSubscriber" role and add the "None" role
3014 when no other role is found.
3016 * UI/Common/UIxAclEditor.m: added a button for the new default
3019 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
3020 -_initRights]): don't take the "None" role into account when
3021 initializing the list of current roles.
3023 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
3026 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3028 * SoObjects/SOGo/NSString+Utilities.m ([NSString
3029 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
3030 There is no need to subscract the start from the length if a space
3031 is not found since the range has not changed either. Finally, the
3032 first character before the url might also be a tab or a cr, so we
3033 match it against the "urlAfterEndingChars" custom NSCharacterSet.
3034 ([NSString -stringByDetectingURLs]): modified to handle email
3035 addresses and add a correct "mailto:" link.
3037 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3039 * SoObjects/Appointments/SOGoAppointmentFolder.m
3040 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
3041 method to return the events in the range of 2 weeks ago up to 4
3044 * UI/MailPartViewers/UIxMailPartTextViewer.m
3045 ([UIxMailPartTextViewer -flatContentAsString]): use the new
3046 "stringByDetectingURLs" method to offer clickable urls.
3048 * SoObjects/SOGo/NSString+Utilities.m ([NSString
3049 -stringByDetectingURLs]): this new method replaces passive URLS
3050 with active ones for HTML resolution of the text.
3052 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3054 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3055 -asQPSubjectString:encoding]): simplified method.
3056 The headers indicates "utf-8" again thank to our fix in
3059 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
3062 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3064 * UI/Common/UIxObjectActions.m ([UIxObjectActions
3065 -removeUserFromAclsAction]): implemented this method which was
3066 missing and is required to remove users from ACLs.
3068 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3069 -subscribeAction]): folderDict was not autoreleased, resulting in
3072 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3073 -primaryFetchProfile]): when building with libFoundation, don't
3074 use the "propertyList" method from NSString. Rather, we convert
3075 the string to an NSData instance and passit as parameter to
3076 NSDeserializer. This way, we obtain a mutable dictionary rather
3077 than an immutable one.
3079 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
3080 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
3081 constant string "contentTypeValue".
3082 contentTypeValue is now set back to iso-8859-1 since NGMime
3083 converts extracts the data in that encoding.
3085 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3087 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
3088 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
3089 "bindFields" value is present in the user defaults, use the
3090 specified fields to find the dn of the user to bind.
3091 ([LDAPSource -allEntryIDs])
3092 ([LDAPSource -fetchContactsMatching:match])
3093 ([LDAPSource -lookupContactEntry:entryID])
3094 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
3095 bind and unbind the connection on each request.
3097 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
3099 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3100 -contactSearchAction]): simplified method to use the facilities
3101 provided by the LDAPUserManager. No longer takes care of the
3102 "ldap-only" url parameter since all requests are handled by the
3105 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3106 -primaryFetchProfile]): check that the value returned is not null
3107 before interpreting it.
3109 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
3110 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
3111 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
3112 system email is already present, remove it before adding it.
3114 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
3115 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
3116 loginToCheck is not empty.
3117 ([LDAPSource -fetchContactsMatching:match]): check that match is
3119 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
3121 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
3124 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3126 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
3128 ([SOGoUser -systemEmail]): returns the email formed from the
3129 username and the default mail domain.
3130 ([SOGoUser -hasEmail:email]): test whether the user has the
3131 specified email, in a case-insensitive way.
3133 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3134 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
3135 check login information.
3137 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3138 ([SOGoContactLDAPFolder
3139 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
3140 no longer manage LDAP connections. The requests are forwarded to
3141 the relevant LDAPSource instead.
3143 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3144 -appendSystemSources]): pass LDAPSource objects to
3145 SOGoContactLDAPFolder instances.
3147 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
3148 address of the "from" field before sending the message. Otherwise,
3149 sending the mail won't work.
3151 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
3152 rewrote this method to request all the available email identities
3153 for the current user. Also, the from field also contains the full
3154 name of the user, not just his/her email address.
3156 * SoObjects/Appointments/SOGoCalendarComponent.m
3157 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
3158 from the previous module iCalEntityObject+Agenor.
3159 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
3160 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
3163 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
3164 replacing the SOGoContactLDAPEntry module. It was renamed as such
3165 because it now receives a dictionary instead of an NGLdapEntry.
3166 It thus can now handle data from any source of LDIF data, not
3167 only coming from LDAP.
3169 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
3170 implementing most of what used to be the AgenorUserManager class.
3171 The difference is that users are cached in the forme of
3172 dictionaries and many sources are used. Also, it can be used to
3173 search LDAP contacts.
3175 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
3176 the concept of "ldap source", to be used by all the classes
3177 needing access to LDAP-provided information: addressbooks and the
3178 user manager. Most the method thereing are transcriptions of
3179 methods previously found in SOGoContactLDAPFolder. It also contain
3180 utility methods for user matching and authentification.
3182 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
3183 module, rendered useless by code refactoring.
3185 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
3186 with the freshly written "LDAPUserManager".
3188 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3190 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
3191 SOGOContactLDIFEntry.
3193 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
3194 module, obsoleted by code in SOGo/LDAPSource.[hm].
3196 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3198 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
3199 new method with an explicit name.
3201 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3203 * SoObjects/Appointments/SOGoCalendarComponent.m
3204 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
3205 replacing "isOrganizer:orOwner:" by taking only one instance of
3206 SOGoUser as parameter.
3207 ([SOGoCalendarComponent -participant:user]): new method replacing
3208 the previous "isParticipant" boolean method by returning the first
3209 participant matching the user passed as parameter. This method is
3210 used so that both the regular email address and the "system email
3211 address" of the user are matched against the participants emails.
3213 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3214 -getSystemEMailForUID:uid]): new method that returns the email
3215 formed with the user's uid and the default mail domain.
3217 * SoObjects/Appointments/SOGoCalendarComponent.m
3218 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
3219 was previously commented out.
3221 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
3222 forwared to [AgenorUserManager getSystemEmailForUID:].
3224 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3225 -toolbar]): method replacing the one with the same name in the
3226 task and appointment editor classes. This method makes also use of
3227 the new method "isOrganizerOrOwner:" and "participant:" in
3228 SOGoCalendarComponent.
3230 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3231 -toolbar]): removed method, replaced with a method with the same
3232 name in UIxComponentEditor.
3234 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
3235 method, replaced with a method with the same name in
3238 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3239 -primaryFetchProfile]): the values returned from the database are
3240 converted to a put dictionary first, since the dictionary returned
3241 is actually an immutable one, which can cause a crash afterwards.
3243 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3245 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
3246 and "SOGoRole_ObjectEditor".
3248 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
3249 -prepareRightsForm]): this method is no longer mandatory.
3251 * UI/Contacts/UIxContactsUserRightsEditor.m
3252 ([UIxContactsUserRightsEditor
3253 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
3254 module to handle acls related to the address books. Partial
3257 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3258 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
3261 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
3262 specified roles from cache.
3263 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
3264 put resulting roles in cache.
3266 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
3267 initWithName:inContainer:. Instead, directly initialize the ivars
3268 as it is supposed to be to avoid an infinite loop whenever one of
3269 those two methods are overriden.
3271 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
3274 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3275 -aclsForUser:uid]): override method so that SOGo won't crash when
3276 loading the contact card.
3278 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3280 * SoObjects/Appointments/SOGoAppointmentFolder.m
3281 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
3282 "freebusy" special user should only require opaque elements.
3284 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3286 * SoObjects/Appointments/SOGoAppointmentFolder.m
3287 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
3288 our double declaration where the resulting XML would be screwed.
3289 There is only one collection per namespace.
3291 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
3292 rfc822DateString]): new method that returns a string conform to
3293 rfc 822 and suitable for email headers.
3295 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
3296 "rfc822DateString" category method on the date we put in the
3299 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3301 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
3302 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
3303 which should never be overriden.
3304 ([UIxUserRightsEditor -appendRight:newRight])
3305 ([UIxUserRightsEditor -removeRight:right])
3306 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
3307 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
3308 methods that can be used by the subclasses.
3309 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
3310 mandatorily be overriden to prepare the elements of the subclassed
3312 ([UIxUserRightsEditor -updateRights]): new method that should
3313 mandatorily be overriden to update the user rights from the
3314 elements of the subclassed form.
3316 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
3317 check if the uid is already listed before adding it to our array.
3318 This is because the acl table can contain more than one record per
3319 user/object relationship.
3321 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3322 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
3323 "roles" parameter is now an NSArray instead of a string. Therefore
3324 we loop throughout the array to populate the table. All the
3325 relevant records are removed prior to the addition of the new
3328 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
3329 -aclsForUser:uid]): new override that returns nil until we add
3330 support for IMAP acls.
3332 * SoObjects/Mailer/SOGoMailAccounts.m
3333 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
3335 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3336 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
3338 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3339 -aclsForUser:uid]): override this method which will always return
3342 * SoObjects/SOGo/SOGoPermissions.[hm]: added
3343 [Public,Private,Confidential]
3344 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
3345 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
3346 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
3348 * SoObjects/Appointments/SOGoAppointmentFolder.m
3349 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
3350 that defines default roles for new elements in the acl.
3352 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
3353 module and subclass of UIxUserRightsEditor specific to the
3354 handling of user rights on calendar folders.
3356 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3358 * SoObjects/Appointments/SOGoAppointmentFolder.m
3359 ([SOGoAppointmentFolder -groupDavResourceType]): return both
3360 "vevent-collection" and "vtodo-collection".
3362 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
3363 that implements the detailed editor of user rights per-object.
3365 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3367 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3368 -rolesForObject:objectinContext:context]): no longer query objects
3369 for "roleForUser:". Instead, all objects should implement
3372 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
3373 new method to comply with the new acl "protocol" in SOGoObject.
3374 Uses SOGoFolder's new facilities for ACLS.
3375 ([SOGoContentObject -aclsForUser:uid]): idem.
3376 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
3377 ([SOGoContentObject -removeAclsForUsers:users]): idem.
3379 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3380 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
3381 based folders. This method is derived from the code that was in
3382 UIxAclFolder before its removal.
3383 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
3386 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
3388 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
3389 ([SOGoFolder -setRoleForUsers:uidsto:role])
3390 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
3392 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
3393 that requires overriding by subclasses.
3394 ([SOGoObject -aclsForUser:uid]): idem.
3395 ([SOGoObject -defaultAclRoles]): idem.
3396 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
3397 ([SOGoObject -removeAclsForUsers:users]): idem.
3399 * UI/Common/UIxObjectActions.m: new module implementing the web
3400 actions common to SOGoObject and all its subclasses.
3401 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
3402 user with the clientObject defaults user rights to the object's
3405 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
3406 to the point where it will only list the users (and their name)
3407 associated with an object acl.
3409 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
3410 methods have been moved into SOGoObject and SOGoFolder during a
3413 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3414 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
3415 method made useless by the programmatic handling of iCalendar
3417 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
3418 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
3419 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
3421 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
3422 drop on all folder nodes, not just on leaves.
3424 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3425 ([SOGoContactLDAPFolder
3426 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
3428 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3430 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
3431 debugging facilities when the SOGoDebugObjectAllocation user
3434 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3436 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
3437 method that SOGo will need with non-gnustep Foundation
3439 ([NSString -stringByAppendingPathComponent:component]): new method
3440 that SOGo will need when building with libFoundation. Method
3441 removed later since it is available from
3442 Foundation/NSPathUtilities.h.
3444 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
3447 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
3448 every subclass to access [WOApplication context] without having to
3449 invoke it more than once.
3451 * SoObjects/Appointments/SOGoCalendarComponent.m
3452 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
3453 moved method from SOGoTaskObject and SOGoAppointmentObject up to
3456 * UI/Scheduler/UIxCalSelectTab.m: removed module.
3458 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3460 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
3461 -vCard]): test the prefix of the card in a case-independent way.
3463 * OGoContentStore/OCSContactFieldExtractor.m
3464 ([OCSContactFieldExtractor
3465 -extractQuickFieldsFromContent:content]): we no longer accept
3466 records in a format other than versit vCard so we can get rid of a
3469 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3471 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3472 -selectorComponentClass]): restored method.
3474 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3476 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
3477 -shouldDisplayCurrentTask]): the current task is not displayed if
3478 it is NOT completed or if the "showCompletedTasks" flag is set.
3479 The logic was inverted in Lightning and is now in SOGo too.
3481 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3483 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
3484 want the "work" url instead of the "home".
3486 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3487 -_saveSnapshot]): save url values from snapshot.
3488 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
3490 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3491 -calendarList]): new method replacing "availableCalendars".
3493 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
3494 -calendarFolders]): we now take the list of subscribed calendar
3497 * SoObjects/Appointments/SOGoAppointmentFolder.m
3498 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
3499 method derived from and replacing [UIxCalView calendarFolders].
3501 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3503 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3504 -toManyRelationshipKeys]): don't put the predefined folders in the
3505 list if they are returned by the server.
3507 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
3508 longer store the "flattenedBlocks" in a dictionary since the
3509 object will be deleted anyway and we don't need to put the folders
3512 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3513 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
3514 attachment path into account when computing the part urls.
3516 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3518 * UI/Contacts/UIxContactsListViewContainer.m
3519 ([UIxContactsListViewContainer -additionalFolders]): take the list
3520 of subscribed folders from the new property list used for the user
3521 settings. The value of its key is SubscribedFolders for the
3522 dictionary entry named "Contacts".
3524 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3525 -canAccessContentAction]): new method to override the one from
3526 UIxFoldersActions by taking into account the fact that, this time,
3527 the clientObject is an ldap folder. Removed many method that used
3528 to be related to the handling of the user selector.
3530 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
3531 to make sure they can be removed.
3533 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
3534 populate the calendar entries based on the user settings plist.
3536 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3537 -selectForMailerAction]): restored method.
3539 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
3540 from a simplified version of the old UIxContactEditor (removed).
3542 * UI/Contacts/UIxContactsUserFolders.m: new template module for
3543 selecting users or user folders through an LDAP search of which
3544 the results are displayed as a tree.
3546 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
3547 method "onContactAdd" here since the Mailer is now the only module
3548 to use it when composing emails.
3550 * UI/WebServerResources/generic.js: added code for handling the
3551 new scheme used for describing SOGo folders, common code to handle
3552 folder addition or removal.
3554 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3555 -activateFolderAction]): new method that change the "active"
3556 settings in the folder-related fields in the user settings.
3557 ([UIxFolderActions -deactivateFolderAction]): see above.
3559 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3560 -checkRightsAction]): removed method.
3562 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3563 -updateAdditionalAddressBooksAction]): removed method.
3565 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3566 -updateCalendarsAction]): removed method.
3568 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3570 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3571 -checkRightsAction]): removed method.
3573 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3574 -canAccessContentAction]): new method designed to replace
3575 [UIxCalMainView checkRightsAction] in a more universal way.
3577 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3579 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3580 -roleOfUser:uidinContext:context]): take all the subkeys into
3581 account, not only the "personal" folder.
3583 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3584 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
3585 to the new components.
3587 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
3590 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3591 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
3592 field of the sogo_user_profile table, where the user-customizable
3593 changes will be saved.
3594 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
3595 similar to the one above, using the "settings" field where the
3596 automatic settings will be saved.
3598 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
3599 module to bind the userdefaults to a property list contained in a
3600 specified field of the sogo_user_profile table.
3601 ([AgenorUserDefaults
3602 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
3603 added a "fieldName" parameter.
3605 * UI/Common/UIxFolderActions.m: new module implementing web
3606 actions common to all GCS-based folders.
3608 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3610 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
3611 put a carriage return after the day name.
3613 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3614 -readFreeBusyAction]): restored method.
3616 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3618 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3619 -defaultAction]): remade module to redirect automatically to the
3622 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
3624 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3626 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3627 -deleteAction]): new web method to delete personal addressbook
3630 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3631 -delete]): override method to refuse the deletion of the folder if
3632 its nameInContainer is "personal".
3634 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
3635 that forwards the deletion request to the folder manager.
3637 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3639 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
3640 -zoomList]): new method that returns the list of available zoom factors.
3642 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3643 -changeStatusAction]): rewrote method.
3645 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3646 -_handleAttendeesEdition]): make sure "attendeesNames" has a
3647 length > 0 before computing the attendees. Otherwise there will be
3648 an invalid empty entry.
3649 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
3650 organizer when there are attendees and remove it when the
3651 attendees are removed.
3653 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3655 * UI/Scheduler/UIxAttendeesEditor.m): new component.
3657 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
3658 the task and appointment editors. Now a container component
3659 handling the common elements of tasks and events.
3661 * UI/Scheduler/UIxTaskEditor.m: same as below.
3663 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
3664 a subclass of UIxComponentEditor but a subcomponent of it.
3666 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
3667 toolbar can have the special value "none" to indicate there is
3668 none attached to the window.
3670 * SoObjects/Appointments/SOGoCalendarComponent.m
3671 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
3673 ([SOGoCalendarComponent -isParticipant:email]): new method.
3674 ([SOGoCalendarComponent -calendar:create]): takes one parameter
3675 "create" which is a boolean indicating whether we want to create
3676 the calendar if it does not exist.
3678 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3680 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
3681 of a table, the same way the dayly and weekly views have been for
3684 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
3686 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
3689 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
3690 property to point at the user folder
3692 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3694 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3695 -userInContext:]): returns "SOGoUser".
3697 * SoObjects/Appointments/SOGoCalendarComponent.m
3698 ([SOGoCalendarComponent -contentAsString]): overriden method that
3699 takes the privacy into account and discard the relevant fields if
3700 needed by generating a new content string and caching it.
3701 ([SOGoCalendarComponent
3702 -saveContentString:contentStringbaseVersion:baseVersion]): if the
3703 new method above has cached a content string, release it and set
3704 it to nil so that it will have to be regenerated in the case it is
3706 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
3707 discard the fields that have to be hidden when the card is
3710 * SoObjects/Appointments/SOGoAppointmentFolder.m
3711 ([SOGoAppointmentFolder
3712 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
3713 sure the cards are now handled as instances of
3714 SOGoCalendarComponent instead of SOGoContentObject so that their
3715 content string is taking the privacy classifiction into account.
3716 ([SOGoAppointmentFolder -_privacySqlString]): new method that
3717 generates a query to determine what information can be given and
3718 if the card itself has to be shown.
3720 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3721 -getICalPersonsFromValue:selectorValue]): removed useless
3722 "isAccessRestricted" method.
3724 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3725 -setStyle:_style]): test whether the values of orgmail and
3726 partmails are null before manipulating them, otherwise SOGo sends
3727 a "rangeOfString:" message to an NSNull, which makes it crashes.
3729 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3730 -extractQuickFieldsFromEvent:_event]): we now use the new
3731 "symbolicAccessClass" method from iCalEntity to determine the
3732 value of the "classifiction" field.
3733 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
3736 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3738 * SoObjects/Appointments/SOGoAppointmentFolder.m
3739 ([SOGoAppointmentFolder
3740 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
3741 see below, the query is adapted consequently.
3743 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3744 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
3745 renamed to "classification" and can any integer as value.
3746 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
3749 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3751 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3752 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
3753 don't prepend anything to the class and id named. Instead, we
3754 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
3757 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3759 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
3760 -rolesOfUser:logininContext:context]): if object does not exists
3761 (for example when it's being created), the current user has the
3762 same rights on it than he/she has on its parent container.
3764 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3765 -nameExistsInFolder:objectName]): methods that tests if a c_name
3766 corresponding to the name passed as parameter is present in the db
3769 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3771 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3772 -rolesForObject:objectinContext:context]): test for
3773 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
3775 * SoObjects/Appointments/SOGoCalendarComponent.m
3776 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
3777 returns the roles of the user on the container object if the event
3780 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3782 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
3783 alternativeViewer a multipart/related message is being handled.
3785 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
3788 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
3789 text/html component before text/plain.
3791 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3792 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
3793 fetching of HTML parts.
3795 * SoObjects/Appointments/SOGoCalendarComponent.m
3796 ([SOGoCalendarComponent -componentTag]): new template method that
3797 returns the vcalendar tag of the current object.
3798 ([SOGoCalendarComponent -component]): new method that returns the
3799 first object matching [self componentTag] within the current
3800 calendar object. This method replaces 'firstEventInCalendar:' as
3801 well as "firstTaskInCalendar:".
3802 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
3803 moved method from SOGoAppointmentObject.m.
3805 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3807 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
3808 module which shows each selected user's calendar in a different
3809 column instead of mixing their events together.
3811 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
3812 replaced use of [NSString stringByTrimmingWhiteSpaces] with
3813 [NSString stringByTrimmingSpaces].
3815 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
3816 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
3819 * UI/Scheduler/UIxCalDayOverview.m,
3820 UI/Scheduler/UIxCalDayChartview.m,
3821 UI/Scheduler/UIxCalDayListview.m,
3822 UI/Scheduler/UIxCalWeekOverview.m,
3823 UI/Scheduler/UIxCalWeekChartview.m,
3824 UI/Scheduler/UIxCalWeekListview.m,
3825 UI/Scheduler/UIxCalInlineMonthOverview.m,
3826 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
3828 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3830 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3831 -appendPersonalSourcesInContext:context]): release connectoin
3832 channel when everything is done.
3834 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3835 -newAbAction]): new action method to crate a new contact folder
3838 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
3839 that requests the folder manager to create a folder table with the
3840 specified type at the specified path. The type is taken from [self
3843 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3844 -folderType]): implemented.
3846 * SoObjects/Appointments/SOGoAppointmentFolder.m
3847 ([SOGoAppointmentFolder -folderType]): implemented.
3849 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3850 -appendPersonalSourcesInContext:context]): we now fetch all
3851 folders with type "Contact" that belong to the current user.
3852 ([SOGoContactFolders -newFolderWithName:name]): new method to
3853 create a new contact folder.
3855 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
3856 resulting url with [NSString+Utilities hostlessURL] instead of
3857 using NSURL. This is because the url in question sometimes has a
3858 hostname and sometimes not. "hostlessURL" ensure the hostname is
3860 ([UIxComponent -applicationPath]): same as above.
3862 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
3864 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
3865 folders before doing the one on messages.
3867 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3869 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
3870 makeObjectsPerform:withObject:withObject: for GNUstep
3873 * OGoContentStore/GNUmakefile, Protocols/common.make,
3874 SoObjects/common.make, UI/common.make: install in
3875 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
3877 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
3879 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
3882 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3884 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
3885 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
3888 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3889 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
3890 password would be accepted anyway as long as its length was > 0.
3891 This can be the case ONLY when LDAP is disabled otherwise we have
3892 a serious security issue...
3894 * SoObjects/Appointments/SOGoAppointmentObject.m
3895 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
3896 user is not an organizer nor a participant, he is declared as
3897 "Owner" if he owns the calendar the entry where the entry is
3898 contained. Other cases should not be possible.
3900 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3902 * UI/Contacts/UIxContactEditor.m: display and handle the new
3905 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3906 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
3909 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3910 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
3913 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3915 * SoObjects/Appointments/SOGoCalendarComponent.m
3916 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
3917 returns the value of ud "SOGoAppointmentSendEMailNotifications"
3919 ([SOGoCalendarComponent
3920 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
3922 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3924 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3925 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
3926 so that the mailbox cache is refreshed everytime the user presses
3927 on "get mail". I doubt a mailbox cache really is useful in general
3930 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3932 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3933 -userInContext:]): if the lookup is on "freebusy.ifb" and the
3934 username is "anonymous" the user is automatically set to
3937 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3939 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3940 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
3941 user with password "freebusy".
3943 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
3944 -contentAsString]): the default timerange is now 14 days before
3945 currentday and 1 month after.
3947 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3949 * SoObjects/Appointments/SOGoAppointmentFolder.m
3950 ([SOGoAppointmentFolder
3951 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
3952 escape the record string in a way suitable with XML encoding.
3954 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3956 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
3957 calendar view would not be updated properly.
3959 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3961 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3962 -newStartDate]): fix the handling of the component start date
3963 depending on the "hm" and the "day" parameters.
3965 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3966 -roleOfUser:uidinContext:context]): set role of current user to
3967 "Assistant" if the object that is accessed is "freebusy.ifb".
3969 * SoObjects/Appointments/SOGoAppointmentFolder.m
3970 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
3971 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
3972 ([SOGoAppointmentFolder
3973 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
3974 lookupCalendarFolderForUID: method, which doesn't do security
3977 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3979 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
3980 accessor that returns the comma-separated list of users with role
3982 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
3983 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
3984 "checkedUsers". Instead, each user is either classified in the
3985 list of assistants or the list of delegates.
3987 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3989 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
3990 -composeAction]): method imported from removed container modules.
3991 ([UIxMailMainFrame -mailFolderName]): method imported from removed
3994 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
3995 for wrapping UIxMailView with the "popupview" action.
3997 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
3998 since its the component that displays the same splash screen than
3999 the one in Thunderbird/Icedove.
4001 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
4002 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
4003 UI/MailerUI/UIxMailListViewContainer.[hm],
4004 UI/MailerUI/UIxMailViewContainer.[hm]: removed
4006 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4008 * UI/WebServerResources/HTMLElement.js: replaced the functional
4009 selectNode() and deselectNode() functions with select() and
4010 deselect() methods of HTMLElement.
4012 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
4013 events are initialized from here now instead of in the HTML code.
4015 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4016 -checkRightsAction]): new method similar to the one with the same
4017 name in UIxCalMainView.m.
4019 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
4020 code to handle the publishing of freebusy information.
4022 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4024 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4025 -checkRightsAction]): new action method that returns a
4026 comma-separated list of boolean values matching the right of the
4027 current user to "view" (as a permission) each foreign calendar
4028 stored in his preferences.
4030 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
4031 new method that sets a customOwner, which can be returned with
4032 ownerInContext it set.
4034 * SoObjects/Appointments/SOGoAppointmentFolder.m
4035 ([SOGoAppointmentFolder
4036 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
4038 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4040 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
4041 below, but for the Contacts and Calendar collections.
4043 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
4044 new acl facilities method from sope-gdl/GCSFolder.m.
4046 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
4047 -roleOfUser:uidinContext:context]): new method that returns
4048 SOGoRole_Assistant when the user is an assistant or a delegate on
4049 the "personal" ab object. This is so that setting roles on the
4050 SOGoContactFolders object is not required.
4052 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4054 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
4056 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
4057 to the handling of the user selection for the acls.
4059 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
4060 values from SoPermissions with ones specific to SOGo.
4062 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
4063 handles the storage for the acls.
4065 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
4066 class for SOGoAppointmentObject and SOGoTaskObject.
4068 * UI/Common/UIxAclEditor.[hm]: new component that provides a
4069 general editor for folder acls.
4071 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
4073 ([NSString -davMethodToObjC]): method that returns the method name
4074 for a DAV property implementation.
4076 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
4078 ([NSArray -stringsWithFormat:format]): new method that returns
4079 formatted occurences of the strings stored in the array.
4081 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
4082 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
4083 subclass module of SoWebDAVValue that supports collections of
4084 properties of the same type.
4086 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4088 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
4089 -lookupFolder:ofClassNamed:inContext:]): added the ability to
4090 configure the name of the SOGoDraftFolders with the ud var
4091 "SOGoDraftsFolderName".
4093 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4095 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
4096 -userTimeZone:username]): new method that returns the timezone for
4097 the specified user depending on his preferences and the server
4100 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
4101 -stringForData:partInfo:]): take the encoding into account and
4102 translate the text to "normal" before processing the charset data.
4104 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4106 * UI/WebServerResources/generic.js: the progress indicator is on
4107 when loading the page so we turn it off, and we turn it back on
4108 whenever we switch to another module...
4110 * UI/WebServerResources/SchedulerUI.js: make sure the day view
4111 synchronization mechanism works everywhere.
4113 * UI/WebServerResources/generic.js: the log window is not only
4114 visible when UIxDebugEnabled is set.
4116 * UI/WebServerResources/SchedulerUI.js: the month overview's day
4117 cells are now initialized with the DOM event interface methods
4118 instead of with html attributes.
4120 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
4121 headers (should be made configurable at some point)...
4123 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
4124 "not null" constraint on startdate, enddate, isopaque,
4125 participants and partmails.
4127 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4129 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
4130 -hoursToDisplay]): prevent a crash by retaining the
4131 "hoursToDisplay" array after it's created.
4132 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
4133 clickable hours DIV.
4135 * UI/WebServerResources/SchedulerUI.js: made the event
4136 participation status modification asynchronous, which also fixes a
4137 bug where the window would sometimes close before the accept or
4138 decline action was completed. Also, adapted the event handling
4139 related to the days or weeks view with the new DIV-based layout.
4141 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
4143 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
4144 DIV-based presentation of the days and weeks.
4146 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
4148 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
4149 might return an exception so we have to handle it if we don't
4152 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4154 * UI/WebServerResources/SchedulerUI.js: updated the list
4155 initialization code to use the new event management scheme, adding
4156 what was missing to be able to delete events and tasks again.
4158 * UI/WebServerResources/MailerUI.js: added code to activate the
4159 "Get mails" button. Fixed a bug which prevented messages to be
4162 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
4163 navigation and focus handling of INPUTs.
4165 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4167 * UI/WebServerResources/MailerUI.js: added code to handle the
4168 possible drag and drop events to manager in the mail module.
4169 Moving messages, opening parent folders, ...
4171 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
4172 the drag and drop manager as well as the interface to HTMLElement
4173 to trigger drag and drop events.
4175 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
4176 action to move the current message to the mailbox named after the
4177 value of parameter "tofolder".
4179 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
4180 -moveToFolderNamed:folderNameinContext:]): new method base on
4183 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4185 * UI/WebServerResources/generic.js: added and activated many
4186 "load" handlers to configure generic widgets used across the
4187 modules. More events are now handled in a DOM-fashion way instead
4188 of by setting the relative attributes in the templates.
4190 * UI/Templates/UIxSortableTableHeader.wox: all the events are
4191 declared from the javascript DOM onload handlers.
4193 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
4196 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
4197 declared from the javascript DOM onload handlers.
4199 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
4200 we want everything to be separated from each other, as much as
4203 * UI/WebServerResources/SOGoDragHandles.js: new module containing
4204 the "SOGoDragHandlesInterface", implementing methods that can be
4205 attributed to DIV so that they can be used as drag handles.
4207 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
4208 -asQPSubjectString]): initialize the tmp strings with '0' to make
4209 sure they don't contain garbage.
4211 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4213 * UI/WebServerResources/MailerUI.js: register the messageList
4214 table as a dragging source and the leaf of the navigation tree as
4215 dnd destinations to the DNDManager.
4217 * UI/WebServerResources/generic.js: initialize tabs from the
4218 "unload" event listener that is added programmatically instead of
4219 from the template... Also, added the new DNDManager object.
4221 * UI/WebServerResources/HTMLTableElement.js: added code to
4222 simulate XUL drag n drop events. This code will possibly be moved
4223 to HTMLElement.js instead later...
4225 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4226 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
4229 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4230 -_qualifierForFilter:filter]): only search records which starts
4231 with the specified pattern.
4233 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4235 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
4236 -asQPSubjectString]): new method that returns the special QP
4237 string with its qp declaration for email subjects.
4238 ([SOGoDraftObject -bodyPartForText])
4239 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
4240 double-encode data in UTF-8.
4242 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4243 -newStartDate]): new method to determine the start date depending
4244 on the URL parameters, the current day and the current time.
4245 ([UIxComponentEditor -toolbar]): new method to determine the
4246 filename of the toolbar that should be drawn depending on the
4247 ownership and the list of attendees of the task/event wrt to the
4250 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4251 -setDayStartHour:aStartHour]): adjust the minutes to the next
4252 quarter of hour, if not already set to a quarter.
4254 * UI/WebServerResources/UIxAppointmentEditor.js,
4255 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
4258 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4260 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4261 -loadValuesFromComponent:component]): handles access class
4262 (privacy) and status.
4264 * UI/Contacts/UIxContactsListViewContainer.m
4265 ([UIxContactsListViewContainer -additionalFolders]): return nil if
4266 [self additionalAddressBooks] returns an empty string.
4268 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4270 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
4271 rangesOf7Days]): enhanced and debugged algorithm to feed the array
4272 with slices where the first day is still in the requested month.
4274 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
4277 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
4278 of events in the day boxes of the calendar's monthly view.
4280 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
4281 -davContentType]): declare "text/calendar".
4283 * SoObjects/Appointments/SOGoAppointmentObject.m
4284 ([SOGoAppointmentObject -davContentType]): declare
4287 * SoObjects/Appointments/SOGoAppointmentFolder.m
4288 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
4289 HTTP methods are handled by SOPE and requires nil to be returned,
4290 this method now invokes the new
4291 "requestNamedIsHandledLater:inContext:" method to check that.
4292 ([SOGoAppointmentFolder
4293 -requestNamedIsHandledLater:nameinContext:context]): new methods
4294 that returns "YES" only for the "OPTIONS" http method (for now...).
4295 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
4296 overloaded method to append the "access-control" and
4297 "calendar-access" DAV abilities to the initial declaration.
4299 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
4300 imitate the look of Sunbird/Lightning's monthly view.
4302 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
4303 UIxCalMonthViewOld.[hm].
4305 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4307 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
4308 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
4310 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
4311 returns an image name based on the participation status of the
4314 * UI/WebServerResources/SchedulerUI.js: same strip down as for
4317 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
4318 ([UIxContactsListViewContainer -additionalFolders])
4319 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
4320 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
4321 methods to handle the external addressbooks a user has subscribed
4322 too, by retriving them from his preferences.
4324 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4325 -updateAdditionalAddressBooksAction]): new method that updates the
4326 user settings with the list of addressbook he has subscribed to.
4328 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
4329 module for the address book selector.
4331 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
4332 a toolbar with two buttons ("add" and "remove") to manage the
4333 additional addressbooks a user might subscribe to.
4335 * UI/WebServerResources/ContactsUI.js: added code to handle
4336 "external addressbooks" from the Javascript point-of-view, by
4337 extending existing methods and adding code for the "add ab" and
4338 "remove ab" buttons.
4340 * UI/WebServerResources/generic.js: moved extensions methods to
4341 DOM elements to separate files for better clarity.
4343 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
4344 new method that returns "pageContent" as class, but also "popup"
4345 for the DIV where the page content lies, so that we can manipulate
4346 the content of popup's with CSS identifiers.
4348 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4350 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4351 -displayStyle]): new method that returns a string containing the
4352 css style relative to the current appointment cell. This code is
4353 currently inactive but might be reused later.
4355 * UI/WebServerResources/SchedulerUI.js: added code to handle the
4356 display of the selected day (the day pointed by the mouse, or the
4357 current day when changing the view).
4359 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
4360 -dayCellClasses]): new method that returns a string containing the
4361 css classes applicable to the current cell, depending on the
4362 position of the day in the week, the day of today and the
4365 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
4366 -currentContactAptBorder]): new method that returns the
4367 appropriate border color for the specified user.
4369 * SoObjects/Appointments/SOGoAppointmentObject.m
4370 ([SOGoAppointmentObject
4371 -saveContentString:contentStringbaseVersion:baseVersion]):
4372 overloaded method that parse new events and detects if they have
4373 an organizer or not. If they are new and have no organizer set
4374 (Sunbird/Lightning...), the owner of the event is set as
4377 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
4378 category that provides facility methods and interfaces to the
4381 * SoObjects/Contacts/product.plist: give full access to ANY
4382 authenticated user, not just the owner (to every objects...).
4384 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4386 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
4387 every replica widgets are declared as such to their master
4388 counterpart. Take the days into account when displaying the time
4389 range taken by the appointment.
4391 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
4392 -getICalPersonsFromValue:selectorValue]): method taken from
4393 UIxFreeBusyUserSelector, that is shared both by
4394 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
4396 * SoObjects/Appointments/SOGoAppointmentFolder.m
4397 ([SOGoAppointmentFolder
4398 -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.
4400 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
4401 derived and taken as a subset of UIxFreeBusyUserSelector that
4402 implements the table part of the FreeBusy view. Most of the
4403 methods of UIxFreeBusyUserSelector relative to that table were
4404 moved into UIxFreeBusyUserSelectorTable, which can also be used as
4405 a standalone view for AJAX operations.
4407 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4409 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4410 -vCard]): change reverted.
4412 * UI/Contacts/UIxContactEditor.m: check whether the client contact
4413 folder has selector "globallyUniqueObjectId" before calling that
4416 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4417 -vCard]): the "setVClass" NGVCard method really is "setClass"
4420 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4421 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
4422 request the "streetAddress" instead of the "streetaddress".
4423 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
4424 mails that *contain*, and not just *start with* the search
4427 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4428 -vCard]): mark address returned from LDAP as the work address.
4430 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
4431 span covered with the anchor, not only the textual information
4434 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
4435 argument (event or task) to newEvent in the appointmentListMenu.
4436 Make the appointmentsListView display the appointmentsListMenu.
4438 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
4439 12 to 50 before displaying "...".
4440 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
4441 if its length > 0, whether location itself is nil or not...
4442 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
4443 of which the length > 0.
4445 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4447 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
4448 french and ISO dates.
4450 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
4451 from UIxContactSelector to handle contact lists (current and
4452 additional contacts).
4454 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4455 -_freeBusyAsText]): added handling of an "additional"-named query
4456 parameter that describe the number of additional days after
4457 enddate that should be returned.
4459 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4460 -_responseForResults:results]): give priority to results with
4461 "c_uid" fields. If none returned, use the first contact received.
4463 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4464 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
4465 2 and "CANCELLED" to 0.
4467 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4469 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
4470 of start and end dates to short string dates.
4472 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4473 -readFreeBusyAction]): new method that returns an array of numbers
4474 corresponding to the state in the freebusy of each "quarter of an
4475 hour" between the "sday" and "eday" date parameters passed in the
4476 url. This permits to handle the display of the freebusy with Ajax
4478 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
4479 since the free busy displays 2 days ahead.
4481 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4482 -contactSearchAction]): new action that returns the uid and the
4483 username + email of the user whose name contain the value of the
4484 "search" url parameter.
4486 * SoObjects/Appointments/SOGoAppointmentFolder.m
4487 ([SOGoAppointmentFolder
4488 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
4489 useful for the computing of the status of the freebusy.
4491 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
4492 -init]): new component that incarnates a user selector for events
4493 inspired by the new one found in Thunderbird Lightning.
4495 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4497 * UI/WebServerResources/generic.js: added code to enable or
4498 disable anchor visually (following our internal algorithm).
4500 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
4501 added new "url" ivar with its classic accessors.
4502 ([UIxComponentEditor -urlButtonClasses]): new method that returns
4503 the class strings for the url button on the appointment/task
4504 editor (depending on the validity of the url).
4506 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
4507 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
4508 the template to match the Lightning's new task/appointment editor.
4510 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
4512 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
4514 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4516 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4517 ([SOGoContactLDAPFolder
4518 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
4520 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
4521 iCalEntityObject instances instead of just iCalEvent's.
4523 * SoObjects/Appointments/SOGoAppointmentFolder.m
4524 ([SOGoAppointmentFolder
4525 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
4527 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
4528 bad way of handling ownership that way.
4530 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4531 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
4532 on "cn", just like Mozilla.
4534 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4536 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
4537 "to" should be retained, otherwise it will be autoreleased and a
4540 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4541 -writeAction]): updated method to fetch the card before initing
4544 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4545 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
4548 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
4549 -iCalStringTemplate]): start and due date are now optional.
4551 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4552 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
4553 appropriate accessors to be settable through the templates.
4555 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
4556 new "isDisabled" ivar with appropriate accessors to be
4557 settable through the templates.
4559 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4560 -availableCalendars]): new method that list the calendars to which
4561 the user has subscribed.
4562 ([UIxComponentEditor -componentOwner]): returns the owner of the
4565 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4566 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
4567 quickentries to null whenever each or all of them are null, by
4568 providing an impossible timestamp from with NSNotFound as value.
4570 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4572 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
4573 that handles the creation of new fields with the new APIs and the
4574 new node structure on the page.
4576 * UI/Scheduler/UIxAppointmentEditor.m,
4577 UI/Scheduler/UIxTaskEditor.m:
4578 refactored to user UIxComponentEditor as parent class.
4580 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
4581 containing the methods common to the UIxTaskEditor and the
4582 UIxAppointmentEditor.
4584 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4586 * SoObjects/Appointments/SOGoAppointmentFolder.m
4587 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
4588 the handling of time-ranges.
4590 * UI/WebServerResources/ContactsUI.js: specify a notification type as
4591 parameters when onConfirmContactSelection in invoked.
4593 * UI/WebServerResources/generic.js: specify a notification type as
4594 parameters when onContactRemove in invoked.
4596 * UI/WebServerResources/SchedulerUI.js: when the user deselects
4597 all calendars, select his entry.
4599 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4601 * UI/WebServerResources/SchedulerUI.js: edit and delete events
4602 with their owner-relative urls. Generate a correct entry in the
4603 css color table when a user is added to the calendars list. Put
4604 the same color next to the user id.
4606 * UI/WebServerResources/generic.js: implemented some new helper
4609 * SoObjects/Appointments/SOGoAppointmentFolder.m
4610 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
4611 entries if their owner is not the current user.
4613 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4614 -displayClasses]): return the correct class for the current event
4615 representation depending on its owner.
4617 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
4618 and associate a color for each user login depending on its
4619 position in the list.
4621 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
4622 -currentRowCSSClass]): return the correct class for the current
4623 row depending on the owner of the event.
4625 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4626 -setColors:colors]): new method to associate a color table with
4627 each user in the list.
4629 * SoObjects/Appointments/SOGoAppointmentFolder.m
4630 ([SOGoAppointmentFolder
4631 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
4633 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
4634 NSObject to associate an instance with a user.
4636 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4638 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
4641 * UI/WebServerResources/ContactsUI.js: added handling of
4642 notification of changes to contact selectors.
4644 * UI/WebServerResources/generic.js: added handling of notification
4645 of changes to contact selectors.
4647 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4648 -updateCalendarsAction]): proxy method to update the user
4649 preference table with the new selected calendar uids.
4651 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
4652 -calendarsContactsAction]): new method.
4654 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
4655 ([UIxContactSelector -setHasCheckBoxes:aBool])
4656 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
4657 permit the drawing of checkboxes instead of card icons.
4659 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
4660 wrap a selector the the "Calendars" tab.
4662 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
4663 new user calendar selector.
4665 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4667 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
4668 may cover hour 0 to hour 23.
4670 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4671 -iCalStringFromQueryParameter:format:]): dates explicitly set to
4674 * UI/WebServerResources/SchedulerUI.js: manage both lists of
4675 objects wrt to the toolbar actions.
4677 * UI/WebServerResources/generic.js: added code to the "String"
4678 class to decode number-encoded char entities.
4680 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4681 -batchDeleteAction]): new method to delete selected entries in the
4684 * SoObjects/Appointments/SOGoAppointmentFolder.m
4685 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
4686 that delete identified entries in batch.
4688 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4689 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
4691 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
4692 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4693 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
4694 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4696 return a UIxJSClose component if everything went fine.
4698 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
4701 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
4702 UIxAppointmentEditor.m.
4704 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
4705 a very light page with javascript code to close a window, by
4706 calling a method on the opener if specified. This component is
4707 designed to work as a response to form postings.
4709 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4711 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
4712 SOGoAppointmentObject adapted for the handling of tasks.
4714 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
4715 extracted from SOGoAppointmentObject.
4717 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4718 -saveUrl]): returns the url needed to POST the new form to.
4719 redirect the user to <aptid>/editAsAppointment instead of /edit,
4720 so that SOGoAppointmentFolder can return the correct object type.
4722 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
4723 -compareAptsAscending:_other]): accept empty start or end dates.
4725 * SoObjects/Appointments/SOGoAppointmentFolder.m
4726 ([SOGoAppointmentFolder
4727 -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.
4728 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
4729 components of type "vtodo" as well as "vevent".
4730 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
4731 url specified ends with AsTask or AsAppointment, returns the
4732 an object of the appropriate class, otherwise deduce it from its
4733 content if the HTTP method is "PUT", otherwise read its type from
4736 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4737 -extractQuickFieldsFromTodo:_task]): extract quick fields from
4740 * UI/Scheduler/UIxCalView.m ([UIxCalView
4741 -fetchCoreAppointmentsInfos]): replacement methods for
4742 fetchCoreInfos but by retrieving object with component "vevent".
4743 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
4746 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
4747 UIxCalAptListView adapted for the handling of tasks.
4749 * UI/Scheduler/UIxTaskProposal.[hm],
4750 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
4751 clones of the UIxAppointment* classes for the handling of tasks.
4753 * UI/WebServerResources/UIxTaskEditor.js: clone of
4754 UIxAppointmentEditor adapted for the handling of tasks.
4756 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
4757 Scroll the daily view to the appropriate hour when an appointment
4758 is selected in the appointments list.
4760 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4762 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4763 -setDayStartHour:aStartHour]): specifies the user timezone on the
4766 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
4769 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
4770 ([NSCalendarDate -driftedDate]): methods made useless by a better
4771 comprehension of the NSTimeZone API...
4773 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4775 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
4776 new methods from the NSCalendarDate methods.
4778 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
4779 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
4781 +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).
4782 ([NSCalendarDate -adjustedDate]): this method returns another
4783 instance set to the correct hour after the original date was set
4784 from a non-GMT timezone. This date can be used for storage.
4785 ([NSCalendarDate -driftedDate]): this method does exactly the
4786 opposite of -adjutedDate, that is, it enables the method
4787 hourOfDay, minuteOfHour etc... to return the values according to
4788 the original date's timezone. This date CANNOT be used for storage.
4790 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
4791 -shortDateString]): new method that will return a "short date
4792 string" (yyyymmdd) from a calendar date object.
4794 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4795 -_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.
4797 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
4798 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
4800 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4802 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
4803 view of the day at the height of hour 8:00.
4805 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
4806 ([UIxCalView -dayEndHour]): returns 24.
4808 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
4809 ([UIxContactFoldersView -newAction]): invoke
4810 _selectActionForApplication: on self with the proper attribute too.
4812 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
4813 we now use the action mechanism in UIxContactsListView to keep the
4814 same view for the contact selectors and the regular contact view.
4816 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
4817 UIxContactsListViewContainerBase.[hm]
4819 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
4821 * UI/WebServerResources/generic.js: generalized emailstring
4822 handling functions. Generalized address book access functions.
4824 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4825 -isPopup]): return YES if the "popup" query parameter is set.
4827 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4828 -defaultAction]): keep the url parameters when redirecting.
4829 ([UIxContactFoldersView -selectForSchedulerAction])
4830 ([UIxContactFoldersView -selectForMailerAction]): new action
4831 methods for the /scheduler-contacts and /mailer-contacts invocations.
4833 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
4834 newly available NSString+URL category.
4836 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
4837 -asURLParameters]): handle dictionary entries which could be
4838 instances of NSArray rather than NSString.
4840 * SoObjects/SOGo/NSString+URL.m ([NSString
4841 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
4842 ([NSString -urlWithoutParameters]): new method that returns the
4843 url without its parameters.
4845 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
4847 * SoObjects/SOGo/NSDictionary+URL.[hm],
4848 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
4850 * UI/WebServerResources/UIxMailEditor.js: add support for
4851 additions of different types (to, cc, bcc) of recipients from the
4854 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
4857 * UI/Contacts/UIxContactsMailerSelection.m,
4858 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
4859 UI/Contacts/UIxContactsSelectionView.m to provide a different set
4860 of widgets depending on the application invoking the contact list.
4862 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4864 * UI/WebServerResources/ContactsUI.js: hide the current contact
4865 whenever the user changes of contact folder.
4867 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
4868 now provided by the template when loading the page.
4870 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4871 -iCalPersonWithUid:uid]): new method taken from removed module
4874 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4876 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
4877 -categoriesAsString]): same as below.
4879 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
4880 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
4882 * SoObjects/Appointments/SOGoAppointmentObject.m
4883 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
4884 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
4887 * SoObjects/Appointments/SOGoAppointmentFolder.m
4888 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
4889 hackish test to detect whether the request concernes VEVENT's or
4890 anything else. Return events only in the former case.
4891 ([SOGoAppointmentFolder
4892 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
4893 c_name quickfield so that the calendar list can identify the
4894 appointments with their complete "filename".
4896 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
4897 groupsOfClass:fromSource: to parse the given vcalendar.
4899 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
4901 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
4903 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
4906 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
4908 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4910 * SoObjects/Appointments/SOGoAppointmentFolder.m
4911 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
4912 sensitive to the CalDAV method names.
4913 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
4914 "calendar-query" CalDAV method name.
4916 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
4917 code coming originally from MailerUI.js.
4919 * UI/WebServerResources/UIxContactEditor.js: imitate the
4920 Thunderbird address book by completing the display name with the
4921 content of the first and last name fields, until the display name
4922 is modified manually.
4924 * UI/WebServerResources/generic.js: added a "trim" method to the
4927 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4928 -displayName]): new method that returns the display name from "cn"
4929 or from the "displayName" key if found.
4931 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4932 -initSnapshot]): check if "[card n]" returns anything to avoid a
4935 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
4936 that returns an unparsed doctype definition for the pages.
4938 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4939 -vCard]): set the card's fn to attribute "displayName" if found
4942 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4944 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4945 -vCard]): handle the "streetAddress" and "l" fields.
4947 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
4948 header fields by converting the tables to DIVs and SPANs.
4950 * UI/WebServerResources/generic.css: attempted unification of font
4951 families and size across all the elements. changed the
4952 logConsole's "position" from "fixed" to "absolute" to avoid
4955 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4957 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
4958 empty the contact view when the current contact is being deleted.
4960 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
4961 parse the email field and provide the address full name if found
4962 as the "contactFN" parameter.
4964 * UI/WebServerResources/generic.js (openMailTo): do not give a
4965 name to the opened window so that serveral ones can be opened at
4968 * UI/MailPartViewers/UIxMailPartTextViewer.m
4969 ([UIxMailPartTextViewer -flatContentAsString]): override method by
4970 replacing carriage returns with "<br />" in the result string from
4971 super's implementation.
4973 * UI/Contacts/UIxContactView.m ([UIxContactView
4974 -_urlOfType:aType]): don't manage non-mailto urls through
4975 javascript, let the user decide what's best for him.
4977 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4978 -newAction]): transfer all the query parameters by using the
4979 "asURLParameters"'s result string from [self queryParameters].
4981 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4982 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
4983 query parameters and put their values (if any) into the snapshot.
4985 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
4986 carriage-returns to "<br />".
4987 ([UIxContactView -workCompany]): explicitly initialize company to
4988 nil if org is nil or empty.
4990 * UI/WebServerResources/UIxContactEditor.js: updated validation
4991 code after we added and renamed some fields.
4993 * UI/WebServerResources/ContactsUI.js: added code to cache contact
4994 cards and to handle card updates.
4996 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4998 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
4999 test the length of the returned string since they will never be
5002 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
5003 return self if the process went successful, returns an exception
5004 otherwise (and only otherwise...).
5006 * OGoContentStore/OCSContactFieldExtractor.m
5007 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
5008 adapted method to the new VCard api. Since the cards are stored in
5009 vcard format, we no longer deal with a dictionary but with a
5012 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5014 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
5015 return a string with a "mailto" url.
5016 ([UIxContactView -_urlOfType:aType]): generic method to return a
5017 url string with a html anchor pointing to it.
5019 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
5020 since subclass "UIxContactEditor" did nothing. Implemented code to
5021 display and modify the values parsed from the vcards, displayed in
5022 a way similar to the Thunderbird addressbook.
5024 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
5025 -save]): new dummy method.
5027 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
5028 -save]): made method void.
5030 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5032 * UI/Contacts/UIxContactView.m: added many wrapper methods to
5033 display blocks of data à la Thunderbird Addressbook. If data is
5034 available, those wrappers (around the NGVCard methods) will
5035 enclose the results in a proper HTML output with the correct label
5036 (if present), otherwise it will return an empty string.
5037 ([UIxContactView -vcardAction]): new action to return the contact
5038 as text/vcard (for exporting).
5040 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
5041 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
5043 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
5044 -vCard]): create a new NGVCard instance when no data is available
5046 ([SOGoContactGCSEntry -save]): save the vCard using the new
5047 "versitString" API method/message.
5049 * UI/Contacts/UIxContactView.h: separated interface from
5052 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
5053 views and display them beneath the list.
5055 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5057 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
5058 the timezone even when it's the server timezone.
5060 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5061 -privateContacts:inContext:]): no long configure the calendar
5062 object with the user's timezone since it's now accessible
5063 application-wide throught the SOGoObject methods.
5065 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
5066 method. Removed the "backendTimeZone" method.
5068 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
5069 instead of SoComponent.
5071 * SoObjects/Appointments/SOGoAppointmentObject.m:
5072 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
5073 [self serverTimeZone] instead of "EST" (which was removed).
5075 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
5076 "timeZone" ivar and its accessors.
5078 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
5079 centralized method returing the timezone configured in the
5080 userdefaults db or "Canada/Eastern" if missing.
5081 ([SOGoObject -userTimeZone]): new centralized method returing the
5082 timezone of the current user or the server timezone if missing
5083 from the user configuration table.
5085 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5087 * UI/WebServerResources/SchedulerUI.js: implemented caching of
5090 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
5091 return a path based on the object's context instead of the first
5092 level in SOGo's object hierarchy...
5094 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5096 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
5099 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
5100 timezone ([self viewTimeZone]) to the WEMonthOverview component to
5101 avoid a confusion with the days.
5103 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
5106 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
5107 imitate Sunbird's synchronization between the 3 visible views.
5109 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
5110 sure the numbers in dateString are formatted so as to take 4 chars
5111 for the year and 2 for the day and the month, otherwise
5112 NSCalendarDate will return a nil date.
5113 ([UIxComponent -applicationPath]): return a path based on the
5114 object's context instead of the second level in SOGo's object
5117 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5119 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
5120 user's timezone abbreviation to the date string passed as parameter to
5121 NSCalendarDate to generate an accurate date instance. Do the same
5122 when no date is specified and today is chosen.
5124 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
5125 form's time values to integers before comparing them.
5127 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
5128 ([UIxCalAptListView -currentEndTime]): initialize the resulting
5129 dates timezone with [self viewTimeZone].
5131 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
5132 "viewTimeZone" ivar destined to hold an instance of the user's
5134 ([UIxComponent -viewTimeZone]): take the timezone from the user's
5137 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5139 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
5140 rearranged the layout.
5142 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
5143 manage showing and hiding appointment details.
5145 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5146 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
5147 timezone by taking the current user's timezone setting.
5149 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
5151 * SoObjects/Appointments/SOGoAppointmentObject.m
5152 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
5153 set default timezone to EST, although this code should be
5154 rewritten to handle a system and a user default value.
5156 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
5157 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
5158 take the values from the hour and minute INPUTs when data is
5159 POSTed since we no longer use the UIxTimeSelector component.
5160 ([UIxTimeDateControl -selectableHours])
5161 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
5162 template SELECTs to display reasonable and acceptable values
5163 instead of all the possibilities.
5165 * UI/WebServerResources/generic.js: adapted code for the new
5166 implementation of the UIxContactSelector component (added a
5167 "remove" button, removed the previous INPUT and replaced them with
5168 links of class "button").
5170 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
5171 UIxTimeDateControl.m.
5173 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
5174 ([UIxCalDayTable -currentAppointmentHour]): new methods that
5175 returns correctly formatted values used as attributes for JS code.
5177 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
5178 -initialContactsAsString]): renamed implementation of
5179 initialParticipants.
5180 ([UIxContactSelector -currentContactId])
5181 ([UIxContactSelector -currentContactName]): new methods used when
5182 listing the initial contacts in the widget. Currently, both return
5183 the person's cn but the latter should ultimately return a user
5186 * UI/Contacts/UIxContactSelector.h: separated interface from
5187 UIxContactSelector.m.
5189 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
5190 all javascript code is now put in Scheduler.js/generic.js.
5192 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
5193 moved into NSCalendarDate+Scheduler instead.
5195 * SoObjects/Appointments/SOGoAppointmentFolder.m
5196 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
5197 configure the timezone from SOGoUserFolder when the instance is
5199 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
5200 the value of the new "timezone" ivar.
5202 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5204 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
5205 the date selector in the first page and the container of the
5206 future calendar selector in the second page.
5208 * UI/WebServerResources/generic.js: added code for handling tabbed
5211 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
5212 returns the bundle name associated to the current running product.
5214 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5216 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
5217 exception by invoking a timeout on the opener rather than invoking
5218 the list refresh method.
5220 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
5223 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
5224 ([UIxCalWeekView -prevWeekQueryParameters])
5225 ([UIxCalWeekView -nextWeekQueryParameters])
5226 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
5227 that return the dates relatively to the current day.
5228 ([UIxCalWeekView -lastWeekName])
5229 ([UIxCalWeekView -currentWeekName])
5230 ([UIxCalWeekView -nextWeekName])
5231 ([UIxCalWeekView -weekAfterNextWeekName])
5232 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
5233 methods that returns the label for the corresponding weeks.
5235 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
5236 used by UIxCalDayView and UIxCalWeekView to display the events
5237 occuring in one or more days.
5239 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5241 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
5242 entries in the new "monthMenu" and "yearMenu".
5244 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
5245 method to return the current day as a string formatted depending
5246 on the current locale.
5248 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
5249 ([UIxCalAptListView -endDate]): "today" is now the default filter
5250 for displayed events.
5251 ([UIxCalAptListView -currentSerialDay]): new method returning the
5252 date of the current enumerated appointment in serial form
5255 * UI/WebServerResources/SchedulerUI.js: added code to select the
5256 relevant day when an appointment is selected. Added code to popup
5257 a month and a year menu whenever the header entries are clicked in
5258 the calendar widget.
5260 * UI/WebServerResources/generic.js: made addClassName and
5261 removeClassName methods of HTMLElement.
5263 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5265 * UI/WebServerResources/MailerUI.js: fixed the contact creation
5266 from email addresses.
5268 * UI/WebServerResources/generic.js: centralized the search-related
5269 functions here since the same code was used across the 3
5272 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
5273 ([UIxCalAptListView -endDate]): return the required dates needed
5274 depending on the value given to the "filterpopup" url parameter.
5276 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
5277 code by invoking UIxComponent's labelForKey:.
5279 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
5280 [self pageResourceManager] instead of [self resourceManager].
5282 * UI/Contacts/UIxContactEditorBase.m: invokes
5283 globallyUniqueObjectId on the clientobject's class instead of the
5284 hardcoded "SOGoFolder".
5286 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
5287 -newAction]): redirect the "new" action to the personal (default)
5290 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
5291 +objectWithName:inContainer:]): new constructor.
5293 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
5294 -lookupContactWithId:recordId]): always create a contact object,
5295 even if it does not exist.
5297 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5299 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
5300 component that lays out the different components of SOGoCalendar.
5301 Only serves as an Objective-C counterpart to its xml template.
5303 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
5306 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
5307 display a widget to handle the information displayed in the
5308 appointments list. Not currently used, lacks implementation.
5310 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
5311 display a calendar as a dynamic widget from where one can select
5312 the current visible day.
5314 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
5315 extracted from UIxCalInlineMonthOverview.m.
5317 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
5318 calendarPageURL methods. The javascript code is handled by .js
5319 files as much as possible...
5321 * UI/WebServerResources/ContactsUI.js,
5322 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
5325 * UI/WebServerResources/SchedulerUI.js: implemented functions to
5326 handle the new widgets. XmlHTTPRequest code taken from
5329 * UI/WebServerResources/generic.js: put some functions related to
5330 element selections as methods to HTMLElement and HTMLTableElement.
5332 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
5333 display the list of appointments (embodies the code-size of
5334 UIxCalAptListView; answers to the "aptlist" method).
5336 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5338 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
5339 -correctURLAction]): new short action method replacing the method
5340 below by taking far less code.
5342 * SoObjects/Appointments/SOGoAppointmentFolder.m
5343 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
5344 with an action in the view-related code.
5346 * UI/Scheduler/UIxAppointmentEditor.m: invoke
5347 "stringByEscapingHTMLString" on the resulting value to avoid
5348 issues with accented characters.
5349 ([-jsCode]): removed method since the javascript code was merged
5350 into SchedulerUI.js.
5352 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5354 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
5355 new class method that returns an iCalPerson based on the UID given
5358 * UI/Contacts/UIxContactsListViewContainerBase.m:
5359 UIxContactsListViewContainer renamed to serve as a base class for
5360 the contact lists in both the contact editor and the contact
5363 * SoObjects/Contacts/SOGoContactLDAPFolder.m
5364 ([SOGoContactLDAPFolder
5365 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
5366 setUserIdentifier:setRootDN:]): an LDAP field specifying the
5367 loginname of the users can now be specified.
5369 * UI/WebServerResources/generic.js: added code to manage contact
5370 lists through the new implementation of the UIxContactSelector.
5372 * UI/Templates: put the templates related to SchedulerUI in its
5375 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
5376 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
5377 entry for "uid" with the field name representing the login name of
5378 the user in the corresponding LDAP branch.
5380 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5382 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
5383 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
5384 request is a PUT, always create an entry, even if we're not sure
5387 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5389 * UI/WebServerResources/ContactsUI.js: implemented live-search.
5391 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
5392 -appendSystemSourcesInContext:context]): populated method with
5393 code that creates entries mapped to instances SOGoContactFolder,
5394 based on the configuration found in the NSUserDefaults under the
5395 key "SOGoLDAPAddressBooks".
5396 ([SOGoContactFolders
5397 -lookupName:nameinContext:contextacquire:acquire]):
5398 "contactsources" do not exist anymore, SOGoContactFolder was split
5399 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
5400 and one protocol: SOGOContactFolder, instead.
5401 ([SOGoContactFolders -contactFolders]): new accessor used by the
5402 views of SOGoContactXXXFolder to list the possible sources.
5404 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
5405 defines the methods that UIxContactsView, ..Editor and so on...
5408 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
5409 defines the methods that UIxContactsListViewBase expects as well
5410 as the data fields returned in the contact lists.
5412 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
5413 returns entries an LDAP server. Conforms to the new
5414 SOGOContactFolder protocol.
5416 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
5417 returns a vCard based on contact entries from an LDAP server.
5418 Conforms to the new SOGOContactObject protocol.
5420 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
5421 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
5422 entry for the textual representation of the vCard.
5424 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
5427 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
5428 "SOGoContactObject".
5430 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
5431 method that generates a textual representation of the vcard.
5433 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
5435 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
5436 "SOGoContactFolder".
5438 * SoObjects/Contacts/SOGoContactSource.h,
5439 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
5442 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
5443 -singleAttributeWithName:key]): new method that returns the first
5444 object associated with an ldap key (where generally one value is
5447 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
5448 map the entry into an NSDictionary for processing by
5449 UIxContactsListViewBase.m with the least possible overhead.
5451 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
5454 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5456 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5457 -privateContacts:inContext:]): now returns an instance of
5460 * UI/Contacts/UIxContactsListViewContainer.m
5461 ([UIxContactsListViewContainer -contactFolderName]): new method to
5462 return the absolute path to the current contact folder, called
5463 from within the template.
5465 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
5466 JS code to initialize the 'currentContactFolder' generic var.
5468 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
5469 +contactFolderWithSource:inContainer:andName:]): new class
5470 method meant to return an instance connected to the specified
5471 source. Currently useless but won't be anymore in the next few
5474 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
5475 the "lookupFreeBusyObject" method since it does not exist.
5477 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
5478 as a "view" for the SOGoContactFolders object. Does nothing but
5479 redirect the browser to the URL of the personal address book of
5480 the user. It does not even have a template.
5482 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
5483 implementing the SOGoContactSource protocol. Does nothing
5484 currently but will be used to implement access to the personal
5485 address book of the user stored in the SOGo database.
5487 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
5488 protocol defining an API common to all possible types of contact
5491 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
5492 serving as the root of the contact folders available to the
5493 current user. Correctly lists the contact sources in webdav.
5495 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5497 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
5498 -composeAction]): new action method that permits external object
5499 to write a message from the default (primary) account.
5501 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5502 -initSnapshot]): new method with code taken from "defaultAction"
5503 but needed for others.
5504 ([UIxContactEditorBase -writeAction]): new action designed to
5505 compose the correct URL needed to obtain the MailerUI's email
5506 editor with the correct "mailto" parameter.
5508 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
5509 Common so that other modules can use it.
5511 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
5512 easier to manage both ajax and non-ajax requests.
5514 * UI/Contacts/UIxContactsFilterPanel.m: clone of
5515 UIxMailFilterPanel, but applicable to contact lists.
5517 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
5518 -vcardContentFromSOGoContactRecord]): use the new standard methods
5519 created for each type of entry. If a line is determined to not
5520 contain information, it will be skipped.
5522 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
5523 +initialize]): init defaultMailDomain with the user default
5524 "SOGoDefaultMailDomain".
5526 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5528 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5529 -saveAction]): reorganized methods to only have ONE return point.
5530 Invoke saveRecord: directly on the clientObject instead of
5531 saveContentString, which does the same thing anyway.
5533 * SoObjects/Contacts/NSDictionary+Contact.m
5534 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
5535 method to convert the dictionary returned with the user submission
5536 to a record in VCARD format to be stored in the database.
5538 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5540 * UI/WebServerResources/MailerUI.js: when opening the context menu
5541 of the message list, select the message below the mouse cursor and
5542 deselect the other selected messages temporarily. This mimics the
5543 behaviour of Thunderbird for that matter and was already
5544 implemented for the entries of the folder tree.
5546 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
5547 -iconForMenuItem]): new method that returns the fully qualified
5548 relative URL to the icon representing the mailbox, or the default
5549 mailbox icon if needed.
5551 * UI/SOGoUI/UIxComponent.m ([UIxComponent
5552 -urlForResourceFilename:filename]): automatically return an empty
5553 string whenever the filename passed as argument is nil.
5555 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
5556 "desc" parameter set to 1 so that they are sorted in descending
5557 order by default. Also, added "onHeaderClick()", triggered by
5558 clicking on the message list header elements.
5560 * UI/MailerUI/UIxMailSortableTableHeader.m
5561 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
5563 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5564 -isSortedDescending]): defaults to "YES" when the sort order is
5567 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5569 * UI/WebServerResources/MailerUI.js:
5570 - message cache: set the max num of cached messages to 20. Limit
5571 the cached message size to 30000 bytes.
5572 - ajax: when a message request is called while one is already
5573 being performed, the latter will be cancelled. Idem when
5574 retrieving the content of a mailbox.
5575 - folder tree: when a mailbox is selected because of the URL
5576 requested (initMailboxSelection), the dtree is expanded throughout
5577 the mailbox entry's parent hierarchy to ensure it is made visible
5578 when the page is being displayed. (new function: expandUpperTree).
5579 - mailbox loading: when loading a mailbox where a message was
5580 previously selected, we invoke its url with the "pageforuid"
5581 parameter correctly specified. During callback processing, we scan
5582 the table for the related row and reselect it.
5583 Also, the message area is set blank before loading any mailbox.
5585 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5586 -defaultAction]): if the "pageforuid" parameter is passed in the
5587 url, take its value and invoke [self firstMessageOfPageFor:]
5588 consequently to deduce the first message to display. Otherwise,
5589 set it to "idx", otherwise set it to 0.
5590 ([UIxMailListView -firstMessageOfPageFor:]): new method
5591 that determines the first message of the page where the message
5592 passed as parameter is contained.
5594 * UI/WebServerResources/UIxMailListView.js: removed this module,
5595 its code was put in MailerUI.js instead.
5597 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5599 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
5600 which returns the nodes for the parent specified in "parentMenu".
5601 Used to generate the javascript code for the folder dtree.
5603 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
5604 using that container-template are now using UIxMailMainFrame
5605 since UIxMailPanelFrame had no real interest. File removed.
5607 * UI/WebServerResources/dtree.{css,js}: new files to handle
5608 javascript-generated mailbox tree. Modified from original version
5609 by integrating the previous code with the one we are using for
5610 selections and mailbox handling. Minor visual enhancements too...
5612 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5614 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
5615 returned, put it in an NSArray before returning it (fixes
5618 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5620 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
5621 that returns a url string stripped from its "http://hostname"
5624 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
5626 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
5628 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5630 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
5631 -mailDateFormatter]): retrieve the timezone from the user settings
5632 and pass it to the returned dateFormatter. Also, the dateFormatter
5633 is kept in a static variable to avoid useless
5634 creations/destructions.
5636 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
5637 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
5639 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
5640 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
5641 s/Criteria/Text/ to handle the "criteria" form parameter.
5643 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5645 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
5646 to integrate better with the firefox look&feel. Added entries for
5647 the new "menu" DIV class (popup menus).
5649 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
5650 takes any chunk of text as param, detects the user email and the
5651 optional first and last names and return them in a well-formatted
5652 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
5653 namespace conflict. Added "onMenuClick(node, event, menuId)" to
5654 handle popup menus through "onclick" element attributes (node =
5655 this, event = event and menuId = name of the menu DIV id to
5658 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5659 -snapshot]): add an entry for "email" into the snapshot
5660 dictionary if a "contactEmail" URL parameter was detected and if
5661 the entry for "email" is empty.
5663 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
5664 button now invokes the newContact() js function in ContactsUI.js
5665 instead of opening "new" directly. newContact() pops up a window
5666 stripped from its navigation bar.
5668 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
5669 bundle (AddressBook).
5671 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
5672 "menu" and id "addressMenu" have the header email addresses
5673 display it with the new menu code in generic.js.
5675 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
5676 replaced the body tables with a div of class "pageContent"
5677 (standardization across the page templates).
5679 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
5680 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
5681 those are now inherited from UIxPageFrame.
5683 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
5685 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
5686 a "mailto" URL parameter is detected and the "to" array is empty,
5687 initialize "to" with the value of "mailto" before returning it.
5689 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
5690 -composeAction]): rewrote method in a cleaner way and with usage
5691 of the URL extensions to NSString and NSDictionary (see below).
5692 Also, if a "mailto" url parameter is detected, pass it to the
5695 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
5698 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
5699 returns a parameter string to add to a base URL.
5701 * UI/Common/NSString+URL.m ([NSString
5702 -composeURLWithAction:parameters:andHash:useHash]): new method to
5703 compose a complete URL from an object URL with parameters and an
5704 optional '#' character.
5706 * UI/Common/UIxPageFrame.h: separated interface from
5709 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
5711 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
5713 * UI/WebServerResources/generic.js: added code to manage
5714 selections within HTML containers.
5716 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
5717 added method to determine the possible URL for a product-specific
5718 javascript filename of the forme <productname>.js.
5719 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
5720 ([UIxPageFrame -isPopup]): new method to determine whether the
5721 application navigator bar should be displayed (main page) or not
5724 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
5725 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
5726 the user through LDAP.
5728 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5730 * The toolbar code from the MailerUI product was taken, renamed as
5731 "UIxToolBar" and put into UI/Common. Toolbar plists were created
5732 for the Contacts and Scheduler products and put in their respectir
5733 Toolbars/ subdirectories. Finally,
5734 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
5735 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
5736 and an invocation to the UIxToolbar component was put at the top
5737 of UI/Templaces/UIxPageFrame.wox.
5739 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
5740 within the templates whether a separator should be displayed.
5742 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
5743 that returns NO if the toolbar is empty.
5745 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5747 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
5749 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
5750 new toolbar objects.
5752 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
5754 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
5755 linkbanner as a DIV instead of a TABLE.
5757 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
5759 returns 'YES' to request the display of the navigation bar between
5762 2006-06-15 ludovic@inverse.ca
5764 * It's now possible to set the default
5765 domain using for email using the
5766 SOGoDefaultMailDomain preference key.
5768 2006-06-15 ludovic@inverse.ca
5770 * Initial import of SOGo from trunk.