1 2007-12-14 Ludovic Marcotte <ludovic@inverse.ca>
3 * SoObjects/Appointments/SOGoCalendarComponent.m
4 We set headers in lowercase so that they get properly
7 * SoObjects/Mailer/SOGoDraftObject.m
10 2007-12-13 Francis Lachapelle <flachapelle@inverse.ca>
12 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame -saveFoldersStateAction])
13 ([UIxMailMainFrame -getFoldersStateAction]): new methods to get
14 and set the folders state of the user's web view.
16 2007-12-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
18 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -crashAction]): new
19 action methods that generates a segmentation faults.
20 ([SOGoRootPage -exceptionAction]): new method that returns an
22 ([SOGoRootPage -raisedExceptionAction]): new method that raises an
23 exception without returning it.
25 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWithStatus:status])
26 ([UIxComponent -responseWithStatus:statusandString:contentString])
27 ([UIxComponent -responseWithStatus:statusandJSONRepresentation:contentObject])
28 ([UIxComponent -responseWith204]): new utility methods.
30 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
31 -responseWithStatus:statusandString:contentString])
33 -responseWithStatus:statusandJSONRepresentation:contentObject]):
36 * SoObjects/SOGo/NSScanner+BSJSONAdditions.m ([NSScanner
37 -scanJSONStringDelimiterString]): new category module taken from
40 * SoObjects/SOGo/NSDictionary+BSJSONAdditions.[hm]: new category
41 module taken from BSJSONAdditions 1.3.
42 http://blakeseely.com/downloads.html
44 2007-12-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
46 * SoObjects/SOGo/NSString+Utilities.m ([NSString
47 -stringByDetectingURLs]): we now go back until the real start of
50 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
51 -fetchAttachmentIds]): new method that wanders through the mail
52 structure to collect the attachment content ids and to associate
55 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
56 ([_UIxHTMLMailContentHandler
57 -startElement:_localNamenamespace:_nsrawName:_rawNameattributes:_attributes]):
58 the content-ids are now enclosed between "<>" before retrieval
59 from the attachment dictionary.
60 ([UIxMailPartHTMLViewer -cssContent])
61 ([UIxMailPartHTMLViewer -flatContentAsString]): the content-ids
62 are now fetch from the clientobject (an instance of
63 SOGoMailObject) with the new "fetchAttachmentIds" method.
65 2007-12-12 Francis Lachapelle <flachapelle@inverse.ca>
67 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
68 -eventsListAction]): added the state of the calendar's owner with
69 respect to the current event.
71 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
72 -_loadAttendees]): added the retrieval of attendees state on
75 2007-12-12 Ludovic Marcotte <ludovic@inverse.ca>
77 * UI/MailPartViewers/UIxMailRenderingContext.{h,m}
78 Removed template caching which added very little
79 and created re-entrant issues.
81 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
82 Added a hack (and stated so in the source file)
83 to avoid what seems to be a bug in libxml.
85 2007-12-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
87 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
89 ([SOGoContentObject -davLastModified])
90 ([SOGoContentObject -davContentLength]): implemented dav methods.
92 2007-12-10 Francis Lachapelle <flachapelle@inverse.ca>
94 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
95 -GETAction:]): when asAttachment is set to true, the header
96 "content-disposition" is set to "attachment" so browsers like IE
97 and Safari properly asks the user to save the file.
99 2007-12-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
101 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
102 ([UIxMailPartHTMLViewer -flatContentAsString]): when in
103 UIxMailPartAlternative, scan the filenames of potential cid at the
104 same level as our parent.
106 2007-12-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
108 * Main/SOGo.m ([SOGo -run]): the table creation script now have a
109 @{tableName} substitution variable to be substitued with the real
110 table name obtained from the configuration variables.
112 2007-12-07 Ludovic Marcotte <ludovic@inverse.ca>
114 * UI/MailPartViewers/UIxMailRenderingContext.m
115 We treat multipart/appledouble like multipart/mixed
116 for now. That allows the user to save both parts.
118 * Corrected typos in Localizable.string files.
120 2007-12-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
122 * UI/Common/UIxAclEditor.m ([-currentUserIsOwner]): replaced
123 method with -canModifyAcls that invokes the security manager
124 instead for the permission "SaveAcls" on the client object.
126 * SoObjects/Appointments/SOGoCalendarComponent.m
127 ([SOGoCalendarComponent -contentAsString]): securize the returned content.
128 ([SOGoCalendarComponent -aclsForUser:uid]): check whether the user
129 is an organizer or a participant as well.
131 * SoObjects/Appointments/SOGoAppointmentObject.m
132 ([SOGoAppointmentObject -changeParticipationStatus:_status]): the
133 user we should change the status of is not the active user but the
134 owner of the object. This is for delegation.
136 * SoObjects/Appointments/SOGoAppointmentFolder.m
137 ([SOGoAppointmentFolder -fetchContentObjectNames]): fetch the
138 elements through the fetchFields:from:to:title:component: method
139 method, so that the result is already filtered depending on the
142 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
143 -toolbar]): if the current user is a delegate, take the permission
144 "ModifyComponent" into account. Also, do not let him/her modify an
145 event for which he/she is the organizer.
147 * SoObjects/Contacts/SOGoContactLDAPFolder.m
148 ([SOGoContactLDAPFolder -davResourceType]): declared as a carddav
149 addressbook collection.
151 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
152 -davResourceType]): declared as a carddav addressbook collection.
154 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davLastModified]):
155 override SoObject's implementation. Otherwise a localized date is returned.
157 * UI/Common/UIxPageFrame.m ([UIxPageFrame -isCalendar])
158 ([UIxPageFrame -isContacts], [UIxPageFrame -isMail]): getters to
159 determine which module is the current one.
161 2007-12-06 Francis Lachapelle <flachapelle@inverse.ca>
163 * UI/Scheduler/NSArray+Scheduler.m ([NSArray -compareEventsTitleAscending:otherEvent])
164 ([NSArray -compareEventsLocationAscending:otherEvent])
165 ([NSArray -compareEventsEndDateAscending:otherEvent])
166 ([NSArray -reversedArray]): new methods that sort an array of
167 events depending of various parameters.
169 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
170 -eventsListAction]): added support for sorting events.
172 2007-12-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
174 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction])
175 ([UIxMailEditor -sendAction]): make sure that the attachments
176 having the same filename are correctly sequenced (ex: base.ext,
177 base-1.ext, base-2.ext).
179 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
180 -fetchBLOB]): added support for quoted-printable decoding. Also,
181 we return nil if the type is not supported.
183 2007-12-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
185 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -newAction]):
186 create task obejcts with the .ics extension.
188 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
189 -newAction]): create appointment objects with the .ics extension.
191 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -newAction]):
192 create objects with the .vcf extension.
194 * Main/NSException+Stacktrace.m: added missing symbols from
195 NSException.m and NSDebug.m (GNUstep).
197 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
198 -foldersSearchAction]): make use of the new search methods in
199 SOGoUserFolder (see below).
201 * UI/Contacts/UIxContactFoldersView.m ([-foldersSearchAction]):
202 moved method into ../MainUI/SOGoUserHomePage.m.
204 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
205 -foldersOfType:folderTypeforUID:uid]): only return folders owned
206 by the specified user.
208 2007-12-05 Francis Lachapelle <flachapelle@inverse.ca>
210 * SoObjects/Mailer/SOGoDraftObject.m: the condition for replyToAll
211 has to be done later to avoid duplicated to and cc addresses.
213 2007-12-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
215 * SoObjects/Appointments/SOGoAppointmentFolder.m
216 ([SOGoAppointmentFolder -davCalendarQuery:queryContext]): fixed a leak.
218 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder -davSubscribe:localContext])
219 ([SOGoGCSFolder -davUnsubscribe:localContext]): subscribe an
220 unsubscribe from DAV-based accesses. We could be compatible with
221 Microsoft's extensions but we have no need for a "subcription id",
222 so we implement our own.
224 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
225 -POSTAction:localContext]): new method to intercept DAV POSTs,
226 which we now use to implement certain custom commands such as
227 "subscribe" and "unsubscribe".
229 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
230 -davNamespaces]): declare the
231 "urn:inverse:params:xml:ns:inverse-dav" xml ns.
232 ([SOGoUserFolder -foldersOfType:folderTypeforUID:uid]): new method
233 designed to replace the UIxContactFoldersView.m mechanism for
234 displaying folders to subcribe to, as a common code base for both
235 Web and DAV-based subscriptions.
236 ([SOGoUserFolder -foldersOfType:typematchingUID:uid]): same as
238 ([SOGoUserFolder -davCollectionQuery:queryContext]): new method
239 that implement a custom DAV-based protocol query for querying
240 folder based on specified attributes.
242 2007-12-03 Ludovic Marcotte <ludovic@inverse.ca>
244 * Main/NSException+Stacktrace.{h,m} - new files
245 to handle automatic stack trace generation
246 upon an uncaught exception.
248 * Updated the templates and Localizable.string files
249 to fix typos and add new strings.
251 * SoObjects/Mailer/SOGoMailBodyPart.m
252 Fixed attachment retreival when the first character
255 * SoObjects/SOGo/SOGoGCSFolder.m
256 Fixed the sending of emails when folders are created/removed.
257 Notifications are sent if the defaults SOGoFoldersSendEMailNotifications
260 * UI/Common/UIxUserRightsEditor.m
261 * UI/Templates/SOGoACLEnglishModificationAdvisory.wox
262 * UI/Templates/SOGoACLFrenchModificationAdvisory.wox
263 * UI/Templates/SOGoACLGermanModificationAdvisory.wox
264 Added the capabilities to email notifications when ACLs have
265 changed on a DAV collection or an IMAP mailbox. Also added
266 new templates (3 .wox) to deal with this.
268 * UI/WebServerResources/ContactsUI.js
269 UI/WebServerResources/SchedulerUI.js
270 Added warnings on operations w/o selection.
272 2007-11-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
274 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
275 -appendSubscribedSources]): don't include sources for which we
276 don't have the SOGoPerm_AccessObject permission.
278 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
279 -rfc822DateString]): we want positive timezones to be specified
280 with a leading "+" too.
282 2007-11-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
284 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
285 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
286 return nil if the subscribed folder has no display name (meaning
287 it no longer exists).
289 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
290 -appendPersonalSources]): don't include sources which are no
293 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
294 -ocsPathOfContainer]): return the intended value, not that of
297 * SoObjects/Appointments/SOGoCalendarComponent.m
298 ([SOGoCalendarComponent -sendResponseToOrganizer]): send the
299 message only of sendEMailNotifications is set.
301 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -subscriptionRoles]):
302 new method that returns the roles that qualifies for adding the
303 special "authorized subscribed" sogo role.
305 2007-11-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
307 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
308 -aclsForUser:uid]): copy all the roles from the container. If the
309 object is new, make sure the roles contain "ObjectEditor" if and
310 only if "ObjectCreator" is present.
312 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
313 -aclsForUser:uid]): no longer take the "ObjectReader" role into
316 * UI/Common/UIxFolderActions.m ([UIxFolderActions
317 -canAccessContentAction]): always return HTTP status 204. We want
318 this because we are relying on the SOPE access control manager to
319 grant access to this method. This requires a fine-tuned access
320 control in SOGo itself...
322 * UI/Contacts/UIxContactsUserRightsEditor.m ([-userCanReadObjects])
323 ([-setUserCanReadObjects:userCanReadObjects]): removed methods.
325 * UI/MailerUI/UIxMailUserRightsEditor.m ([UIxMailUserRightsEditor
326 -updateRights]): no longer take the "ObjectReader" role into account.
327 ([-userCanReadMails], [-setUserCanReadMails:userCanReadMails]):
330 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
331 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): specify context
332 when looking up the Calendar folder.
334 2007-11-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
336 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): same as below.
338 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
339 -event]): create the event if it doesn't exist.
341 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -userHasCalendarAccess])
342 ([UIxPreferences -userHasMailAccess]): same as below, for
343 displaying preference tabs.
345 * UI/Common/UIxPageFrame.m ([UIxPageFrame
346 -userHasCalendarAccess]): new accessor for the link banner.
347 ([UIxPageFrame -userHasMailAccess]): same as above.
349 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
350 -toManyRelationshipKeys]): do not report the path to modules to
351 which the user has no access. No longer cache this information
352 statically, the array will be generated at each call.
353 ([SOGoUserFolder -lookupName:_keyinContext:_ctxacquire:_flag]):
354 ignore the path to modules to which the user has no access.
356 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -canAccessModule:module]):
357 new method that returns whether the user has access to the
360 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
361 -initFromUDSource:udSource]): take a new parameter named
362 'ModulesContraints' that defines a set of constraints for
363 accessing specified named modules. This is an optout, meaning the
364 modules will be present unless a constraint is specified.
366 * SoObjects/Appointments/SOGoAppointmentFolder.m
367 ([SOGoAppointmentFolder
368 -roleForComponentsWithAccessClass:accessClassforUser:uid]): cache
369 acl to reduce method calls.
370 ([SOGoAppointmentFolder
371 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
372 if the user is not the current user, we strip the useless info
375 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
376 -labelForKey:key]): new category method.
378 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
379 -event]): same as below.
381 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): request a
382 secured version of the component.
384 * UI/MailPartViewers/UIxMailPartViewer.m
385 ([-fallbackStringEncoding]): removed method.
386 ([UIxMailPartViewer -flatContentAsString]): we no longer use [self
387 fallbackStringEncoding]. Instead we directly specify
388 NSISOLatin1StringEncoding if UTF-8 has failed.
390 * UI/MailPartViewers/UIxMailPartICalViewer.m
391 ([-fallbackStringEncoding]): removed method.
393 2007-11-25 Ludovic Marcotte <ludovic@inverse.ca>
395 * SoObjects/Mailer/SOGoMailForward.m
396 Use [sourceMail decodedSubject] instead of [sourceMail subject]
397 Signature fix in -signature - see the comment
400 * SoObjects/Mailer/SOGoMailObject.m
401 Improved -stringFromData: to try UTF-8 then fallback to Latin1
403 * SoObjects/Mailer/SOGoMailReply.m
404 Modified -messageBody to strip the signature from the reply.
405 Also modified -signature to add "-- \n%@" instead of the
406 broken ""--\r\n%@" pattern.
408 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m
409 We now favor text/calendar parts over text/html and
410 text/plain parts when viewing a multipart/alternative mail.
411 This allows us to show the email invitations coming from
414 * UI/MailerUI/UIxMailAccountActions.m
415 Signature fix in -composeAction - see the comment
418 * UI/MailPartViewers/UIxMailPartViewer.m
419 Modified -flatContentAsString to use UTF-8 as the
420 default fallback encoding for 8-bit content.
422 * SoObjects/Mailer/SOGoDraftObject.m
423 Modified _fillInReplyAddresses:replyToAll:envelope:
424 so that if there's no recipient, we add at least
426 Fixed a mem leak in the same method.
428 2007-11-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
430 * UI/MailPartViewers/UIxMailRenderingContext.m
431 ([UIxMailRenderingContext -viewerForBodyInfo:_info]): same as below.
433 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
434 -plainTextContentFetchKeys]): same as below.
436 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
437 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): accept the
438 application/ics type from Google Calendar.
440 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
441 +distantFuture]): rewrote method to return an object that is
442 compatible with NSCalendarDate, unlike the implementation in
444 ([NSCalendarDate +distantPast]): same as above.
446 2007-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
448 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: fixed infinite loop
449 when charset is us-ascii, match it to ascii rather than none.
451 * SoObjects/Appointments/SOGoAppointmentFolder.m
452 ([SOGoAppointmentFolder
453 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
454 added search on the c_title column too.
456 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
457 -eventsListAction]): take the "search" url parameter into account.
458 ([UIxCalListingActions -eventsListAction]): fetch events matching
459 the title filter too.
461 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -connectAction]): the
462 user infos are now posted as "application/x-www-form-urlencoded".
463 So we have to have like a form has been posted.
465 2007-11-21 Francis Lachapelle <flachapelle@inverse.ca>
467 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
468 -calendarList]): also returns the calendar of the current
469 event. This is required so the proper calender is selected when
470 you view an event to which you don't have write access.
472 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
473 also returns true for super users.
475 2007-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
477 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
478 -lookupImap4BodyPartKey:inContext:]): return a correct body part
479 when "0" is requested, taking its mime-type into account.
481 * UI/MailPartViewers/UIxMailRenderingContext.m
482 ([UIxMailRenderingContext -flatContentForPartPath:_partPath]):
483 return content for part "0", which would be the message body.
485 2007-11-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
487 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
488 ([_UIxHTMLMailContentHandler
489 -setContentEncoding:newContentEncoding]): new method that
490 specifies an xml charset to return to the parser.
491 ([UIxMailPartHTMLViewer -flatContentAsString]): specifies the
492 charset to the content handler before parsing.
494 * SoObjects/Appointments/SOGoAppointmentObject.m: don't take an
495 empty c_name as a valid response when looking up an event. Create
496 one in that case instead.
498 2007-11-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
500 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -signature]):
501 returns the signature for the default identity of the default
503 ([UIxPreferences -setSignature:newSignature]): accessor that sets
504 the default signature.
506 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
507 -composeAction]): append the message signature to the new draft.
509 * SoObjects/Mailer/SOGoMailReply.m ([SOGoMailReply -signature]):
512 * SoObjects/Mailer/SOGoMailForward.m ([SOGoMailForward
513 -signature]): new method that takes the user's signature and put
514 it at the end of the message, if exists.
516 * UI/Common/UIxPageFrame.m ([UIxPageFrame -isSuperUser]): new
517 accessor that forwards the call to the active user.
519 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -signature]): returns the
520 user default signature.
521 ([SOGoUser -isSuperUser]): declares whether the user is listed
522 among the super users.
524 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
525 -setComponent:newComponent]): retain the component object.
526 ([UIxComponentEditor -organizerIdentity]): new accessor method to
527 handle list of possible organizers.
529 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
530 -event]): retain the returned event object.
532 * SoObjects/Appointments/SOGoAppointmentObject.m
533 ([SOGoAppointmentObject -saveComponent:newEvent]): reset the
534 organizer only if there are no attendees AND the owner of the
535 component is not the organizer him-/herself.
537 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
538 -toolbar]): rewrote in a way that ensures that each case is
541 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -isEqual:otherUser]): new
544 * UI/Scheduler/UIxTaskEditor.m ([-acceptAction])
545 ([-declineAction]): commented out unused methods.
547 * UI/MailPartViewers/UIxMailPartICalActions.m
548 ([UIxMailPartICalActions -deleteFromCalendarAction]): actually
549 delete the found object.
551 2007-11-18 Ludovic Marcotte <ludovic@inverse.ca>
553 * SoObjects/Mailer/SOGoMailBodyPart.m
554 SoObjects/Mailer/SOGoMailObject.m
555 UI/MailPartViewers/UIxMailPartViewer.m
556 Added support of messages containing non-textual
557 content and no parts.
559 * UI/MailerUI/UIxMailView.m
560 SoObjects/Mailer/SOGoMailObject.m
561 UI/Templates/MailerUI/UIxMailView.wox
562 Added support for the Reply-To header upon
565 2007-11-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
567 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]):
568 invoke saveComponent:.
570 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -hasOrganizer])
571 ([UIxComponentEditor -organizerName]): new template accessor
572 related to displaying the event's organizer.
573 ([-containsConflict:_component]): removed method.
574 ([UIxComponentEditor -takeValuesFromRequest:_rqinContext:_ctx]):
575 set RSVP to "TRUE" on each attendee.
577 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
578 -saveAction]): invoke saveComponent:.
580 * UI/MailPartViewers/UIxMailPartICalViewer.m
581 ([UIxMailPartICalViewer -isLoggedInUserTheOrganizer]): make use of
582 the -userIsOrganizer: category method.
583 ([-isLoggedInUserAnAttendee]): make use of -userIsParticipant:.
584 ([UIxMailPartICalViewer -hasSenderStatusChanged]): new template
585 accessor that determines whether the "Update" button should be
588 * UI/MailPartViewers/UIxMailPartICalActions.m
589 ([UIxMailPartICalActions -deleteFromCalendarAction]): implemented
591 ([UIxMailPartICalActions -updateUserStatusAction]): implemented
594 * UI/Common/UIxPageFrame.m ([UIxPageFrame
595 -setCssFiles:newCSSFiles]): new accessor that enables the
596 sub-templates to specify extra CSS files to load.
598 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
599 -homeFolderInContext:context]): cache the home folder of the user
600 object instead of the current user.
602 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
603 -deleteEntriesWithIds:ids]): invokes the "prepareDelete" optional
604 method if the child object implements it.
606 * SoObjects/SOGo/SOGoContentObject.m ([-setContentString:])
609 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
610 -setBaseDN:newBaseDNIDField:newIDFieldCNField:newCNFieldUIDField:newUIDFieldmailFields:newMailFieldsandBindFields:newBindFields]):
611 take a new "mailFields" parameter defining an array of fields
612 where to look at when searching the user's emails. It defaults to
613 the standard "mail" LDAP field.
615 * SoObjects/Appointments/SOGoAptMailICalReply.[hm]: new
616 SoComponent implementing a template for ITIP replies.
618 * SoObjects/Appointments/iCalPerson+SOGo.m ([iCalPerson
619 -mailAddress]): new method that returns a properly formatted email
620 address for the specified person entry.
621 ([iCalPerson -uid]): new method that tests whether the user is
622 known to the system and if so, returns its user id.
624 * SoObjects/Appointments/iCalPerson+SOGo.[hm]: new category module.
626 * SoObjects/Appointments/iCalEventChanges+SOGo.m
627 ([iCalEventChanges -sequenceShouldBeIncreased]): determine whether
628 the changes involved need a sequence inscrease, based on the
631 * SoObjects/Appointments/iCalEventChanges+SOGo.[hm]: new category
634 * SoObjects/Appointments/iCalEvent+SOGo.m ([iCalEvent
635 -isStillRelevant]): new overriden method determining the relevance
636 of the current event based on its end date.
638 * SoObjects/Appointments/iCalEvent+SOGo.[hm]: new category module.
640 * SoObjects/Appointments/iCalEntityObject+SOGo.m
641 ([iCalEntityObject -attendeeUIDs]): new category methods that
642 returns an array containing the uids of the system-know attendees.
643 ([iCalEntityObject -isStillRelevant]): new template method.
644 ([iCalEntityObject -itipEntryWithMethod:method]): clone the
645 current entry calendar with the specified ITIP method.
646 ([iCalEntityObject -attendeesWithoutUser:user]): returns an array
647 of attendees while making sure the specified user is not listed.
649 * SoObjects/Appointments/SOGoCalendarComponent.m
650 ([SOGoCalendarComponent -calendar:create:secure]): new name for
651 -calendar:. Added a "secure" parameter that specifies whether a
652 stripped calendar instance is needed or not. Also, we no longer
653 cache the content to simplify handling of new data.
654 ([SOGoCalendarComponent -component:create:secure]): same as above.
655 ([SOGoCalendarComponent
656 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
657 test whether the component is "still relevant" before sending an
659 ([SOGoCalendarComponent -sendResponseToOrganizer]): new method for
660 sending ITIP replies.
661 ([SOGoCalendarComponent -getUIDsForICalPerson:iCalPerson]):
662 removed method. Replaced with -[iCalPerson uid] category method.
664 * SoObjects/Appointments/SOGoAppointmentObject.[hm]: rewrote
665 class. No longer override saveContentString:,
666 saveContentString:baseSequence:, .... Implemented the
667 saveComponent: and the prepareDelete methods instead. Those
668 methods are called only from the web methods. This avoids the
669 risks related to email sending and changes propagation.
671 * UI/Common/UIxTabItem.m: removed useless class module.
673 * UI/Common/UIxTabView.[hm]: removed useless class module.
675 * UI/Common/UIxPrintPageFrame.m: removed useless class module.
677 * UI/Common/UIxAppNavView.m: removed useless class module.
679 2007-11-16 Ludovic Marcotte <ludovic@inverse.ca>
681 * SoObjects/Mailer/SOGoMailBaseObject.m
684 * SoObjects/Mailer/SOGoMailBodyPart.m
685 We also grok image/jpeg and return the SOGoMailBodyPart
686 for attachments fetching.
688 * SoObjects/Mailer/SOGoMailObject+Draft.m
689 Prevent a crash in case body decoding failed during
692 * SoObjects/Mailer/SOGoMailObject.m
693 Improved body decoding during a reply to also try
694 latin1 as an encoding.
696 * UI/MailPartViewers/UIxMailRenderingContext.m
697 Greatly improved the display mechanisms for emails.
698 Also properly consider the content disposition for
701 * UI/MailerUI/UIxMailToSelection.m
702 Removed worthless code.
704 * UI/WebServerResources/MailerUI.css
705 CSS fix for table views.
707 2007-11-15 Ludovic Marcotte <ludovic@inverse.ca>
709 * UI/WebServerResources/MailerUI.js
710 We now check for empty selection and warn the
711 user about it when deleting messages
713 * SoObjects/Mailer/SOGoDraftObject.m
714 Correctly check for the presence of a subject
715 before attempting to forward a message from
718 * SoObjects/Mailer/SOGoMailObject+Draft.m
719 We no longer use "[Fwd: ]" but simply "Fwd:"
720 when forwarding email messages.
722 * SoObjects/SOGo/SOGoUser.m
723 Modified the default forwarding format to be
724 inline instead of "attachment".
726 * SoObjects/Mailer/SOGoDraftObject.m
727 We now create and use a NGMimeContentDispositionHeaderField
728 in order to avoid encoding the whole Content-Disposition
729 header in case a non-ASCII char is present!
731 2007-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
733 * SoObjects/SOGo/iCalEntityObject+Utilities.m ([iCalEntityObject
734 -findParticipant:user]): new method based on the one removed from
735 SOGoCalendarComponent below.
737 * SoObjects/SOGo/iCalEntityObject+Utilities.[hm]: new category
738 module for iCalEntityObject.
740 * SoObjects/Appointments/SOGoCalendarComponent.m
741 ([-findParticipant:user]): removed method.
743 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
744 -setContentString:newContent]): new accessor method.
746 -saveContentString:newContentbaseVersion:newBaseVersion]): invoke
747 -[self setContentString:].
749 * UI/MailPartViewers/UIxMailPartICalViewer.m
750 ([UIxMailPartICalViewer -authorativeEvent]): returns the most
752 ([-isLoggedInUserTheOrganizer]): make use of -[SOGoUser
755 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
756 -stringByConvertingCRLNToHTML]): fixed crashes due to overflows in
757 temporary buffer we are handing.
759 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
760 -setComponent:newComponent]): check that newComponent is non-nil
761 before replacing the default values.
762 ([UIxComponentEditor -calendarList]): privacy is already an ivar.
763 We don't need to refetch it.
765 2007-11-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
767 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
768 -fetchMailForReplying:sourceMailtoAll:toAll]): remove the current
769 user from the list of recipients and make sure no other address is
772 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
773 -stringByConvertingCRLNToHTML]): build the returned NSString
774 without the ending \0.
776 2007-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
778 * UI/MailPartViewers/UIxMailPartICalViewer.m
779 ([UIxMailPartICalViewer -acceptLink])
780 ([UIxMailPartICalViewer -declineLink])
781 ([UIxMailPartICalViewer -tentativeLink]): removed useless methods.
783 * UI/MailPartViewers/UIxMailPartICalAction.m
784 ([UIxMailPartICalAction -addToCalendarAction])
785 ([UIxMailPartICalAction -deleteFromCalendarAction]): new stub
788 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
789 -lookupImap4BodyPartKey:]): make use of the new method below.
791 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
792 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): new method
793 that returns an appropriate Class depending on a given mime type.
795 * UI/SOGoUI/UIxComponent.m ([UIxComponent -canCreateOrModify]):
796 new boolean accessor that determines whether someone can create
797 (i.e. modify a new entry) or modify an existing entry.
799 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
800 -lookupName:lookupNameinContext:localContextacquire:acquire]):
801 overriden method to bind looked up keys to So methods but by
802 avoiding a call to toOneRelationshipKeys. This will be the top
803 method of the chain, meant to override SoObject's behaviour.
805 * SoObjects/Contacts/SOGoContactLDAPFolder.m
806 ([SOGoContactLDAPFolder
807 -lookupName:objectNameinContext:lookupContextacquire:acquire]):
808 removed hack to prevent [super lookupName...] to read the entire
809 LDAP directory when looking up a record.
811 2007-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
813 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
814 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
817 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
818 ([UIxMailPartHTMLViewer -_attachmentIds]): the reference was one
819 character too short, which cause the images not to be displayed
820 sometimes and crashes to happen whenever the references on a
821 message were wrong (due to bugs in SOPE).
823 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
824 -hasMessageAttachment]): consider an attachment any content that
825 has a non-nil disposition.
827 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
828 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
829 fixed method to make use of the parameters instead of the useless
830 remains that weren't even initialized.
832 * SoObjects/Appointments/SOGoAppointmentObject.m
833 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
834 don't propagate the event among the attendees if this is not an
836 ([SOGoAppointmentObject -deleteWithBaseSequence:]): same as above.
838 * Main/SOGo.m ([SOGo -authenticatorInContext:context]): make use
839 of the new category method below.
841 * SoObjects/SOGo/WORequest+SOGo.m ([WORequest
842 -handledByDefaultHandler]): new method that returns whether this
843 is an "so" or alike request.
845 * SoObjects/SOGo/WORequest+SOGo.[hm]: new category module.
847 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
848 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
849 write the new folder's name in the folder cache.
851 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
852 -calendars]): same as below.
854 * UI/Contacts/UIxContactsListViewContainer.m
855 ([UIxContactsListViewContainer -currentContactFolderName]):
856 translate the display name if its the default one.
858 * SoObjects/Appointments/SOGoAppointmentFolder.m
859 ([SOGoAppointmentFolder -create]): overriden method that invokes
860 its ancestor and then activate itself within the user settings.
862 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
863 -appendPersonalSources]): when the user is the owner of the
864 current folder, we create the "personal" folder if it doesn't
865 exist by invoking "create".
867 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
868 -primaryFetchProfile]): when no row is returned, we initialize
869 "values" to a new dictionary. This solves a bug where the defaults
870 would not be initialized properly.
872 2007-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
874 * SoObjects/SOGo/SOGoGCSFolder.m ([-compare:otherFolder]): method
875 moved into the SOGoFolder class.
877 * SoObjects/Appointments/SOGoAppointmentObject.m
878 ([SOGoAppointmentObject -saveContentString:_iCalinUIDs:_uids]):
879 simplified method by directly building a similar appointment
880 object with the current folder as container.
882 * SoObjects/Contacts/SOGoContactLDAPFolder.m
883 ([SOGoContactLDAPFolder
884 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
885 take the content of an object returned by
886 lookupName:inContext:acquire: instead of the dictionary passed as
887 parameter since it represents a flattened entry return by
888 lookupContactsWithFilter...
890 * SoObjects/Contacts/SOGoFolder+CardDAV.m: NSObject+CardDAV
891 category renamed to SOGoFolder+CardDAV.
893 * SoObjects/SOGo/SOGoParentFolder.m: no longer a subclass of
894 SOGoObject, but of SOGoFolder instead.
896 * SoObjects/SOGo/SOGoUserFolder.m: no longer a subclass of
897 SOGoGCSFolder, but of SOGoFolder instead.
899 * SoObjects/Appointments/SOGoAppointmentFolder.m
900 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): fixed
901 to take the new SOGoParentFolder class into account. Also, create
902 the personal folder if it doesn't exist.
904 * SoObjects/SOGo/SOGoFolder.[hm]: new class module implementing
905 the parent of all SOGo containers.
907 * SoObjects/SOGo/SOGoGCSFolder.[hm]: SOGoFolder class renamed to
910 2007-11-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
912 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection
913 -getAddressesFromFormValues:_dict]): take NSString and NSArray
914 values. Ignore addresses with a length of 0.
916 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -mailAccounts]): we now
917 fetch the accounts from the user defaults and create default
920 2007-11-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
922 * UI/MailPartViewers/UIxMailPartTextViewer.m
923 ([UIxMailPartTextViewer -flatContentAsString]): re-added
924 conversion of line-break to sequences of HTML "BR", with a fast
927 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
928 -flatContentAsString]): simplified method now that we know
929 -[NSString stringWithData:usingEncodingNamed:] has a more robust
932 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
933 -showToAddress]): the answer is cached.
935 * UI/Common/UIxObjectActions.m ([UIxObjectActions +initialize]):
936 read "SOGoACLsSendEMailNotifications" from the user defaults to
937 determiner whether to send an email when a user is added or
938 removed from an object's acl.
940 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
941 -contentForEditing]): make sure the htmlContent flag is set to NO
942 when we select the textual part. Also we select only the relevant
945 * UI/MailerUI/WOContext+UIxMailer.m ([-mailSubjectFormatter]):
948 * UI/MailerUI/UIxMailView.m ([UIxMailView -messageSubject]): new
949 method replacing -objectTitle, written like the ones below.
951 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
952 -messageSubject]): rewrote method to act the one below.
954 * UI/MailPartViewers/UIxMailPartMessageViewer.m
955 ([UIxMailPartMessageViewer -messageSubject]): new method that
956 returns the decoded mail subject or "Untitled" if the subject is
959 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
960 -decodedSubject]): new method that invoke -decodedSubject from the
961 NSString and NSData class, depending on the identity of the
962 subject obtained from the envelope.
964 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
965 -subjectForReply]): take the value of -[SOGoMail decodedSubject]
966 instead of the subject of the envelope.
967 ([SOGoMailObject -filenameForForward]): same as above.
968 ([SOGoMailObject -subjectForForward]): same as above.
970 * SoObjects/Mailer/NSString+Mail.m ([NSString -decodedSubject]):
971 same as below for NSString.
973 * SoObjects/Mailer/NSData+Mail.m ([NSData -decodedSubject]): new
974 method that decodes the subject of a mail taken as an NSData
975 instance. Handling the exceptions and the badly formatted headers.
977 * UI/MailerUI/UIxSubjectFormatter.[hm]: dropped class module.
979 2007-11-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
981 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
982 -deleteEntriesWithIds:ids]): make sure the objects returned by
983 lookupName:... are not instances of NSException.
985 2007-11-03 Ludovic Marcotte <ludovic@inverse.ca>
987 * UI/Scheduler/UIxAppointmentEditor.m
988 Fixed monthly recurrences support.
990 2007-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
992 * SoObjects/Appointments/SOGoAppointmentObject.m
993 ([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
994 sent when modifying an event, when the event was considered
995 relevant. The same thing is now implemented for event deletion.
997 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
998 -primaryFetchProfile]): make sure that the deserialized "values"
999 is an instance of NSMutableDictionary, otherwise we override it
1002 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1003 -contentForReply]): make use of the SOGoMailReply WO page.
1005 * SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
1006 from SOGoMailForward to handle mail replies instead. Only three
1007 methods remaining: date, from and messageBody. The latter is
1010 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1011 -fetchMailForForwarding:sourceMail]): fetch attachments for
1014 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1015 -hasMessageAttachment]): initialize hasAttachment with "NO" to
1016 avoid false positives.
1018 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
1019 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
1020 set title to an empty string where the event/task summary is null.
1022 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1023 -setHeaders:newHeaders]): make sure there is a message id in the
1024 headers dictionary, if not, generate one.
1025 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
1026 message id from the existing draft.
1027 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
1028 message id in the header map.
1030 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1031 -deleteFolderAction]): no longer prefix the target folder with
1034 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1035 -listMailboxesAction]): base the folder type on the folder
1038 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1039 -lookupName:_keyinContext:acquire:_acquire]): compare the full
1040 traversal to the potential looked up folder with the special
1041 folder names and return an object with the appropriate
1042 SOGoMailFolder subclass.
1044 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1045 -traversalFromMailAccount]): don't prepend the whole string with
1048 * SoObjects/Mailer/SOGoMailAccount.m
1049 ([-lookupSentFolder:_keyinContext:_ctx])
1050 ([-lookupDraftsFolder:_keyinContext:_ctx])
1051 ([-lookupTrashFolder:_keyinContext:_ctx])
1052 ([-lookupFiltersFolder:_key:_ctx]): removed methods.
1053 ([SOGoMailAccount -inboxFolderNameInContext:])
1054 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1055 ([SOGoMailAccount -sentFolderNameInContext:])
1056 ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
1057 the resulting name with "prefix" since we might return a nested
1059 ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
1060 names with "/". Sorts the resulting folder list with
1061 localizedCaseInsensitiveCompare: instead of
1062 caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
1063 that were removed, instead, we choose the appropriate class
1064 depending on the folder name. And since we are in SOGoMailAccount,
1065 we don't have to compute a traversal path to match the key with
1068 -folderWithTraversal:traversalandClassName:className]): new method
1069 that returns an instance of the specified SOGoMailFolder subclass,
1070 based on the traversal path passed as parameter.
1071 ([SOGoMailAccount -inboxFolderInContext:_ctx])
1072 ([SOGoMailAccount -draftsFolderInContext:_ctx])
1073 ([-sentFolderInContext:_ctx])
1074 ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
1075 -folderWithTraversal:andClassName: method described above.
1077 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1078 -primaryFetchProfile]): make use of -[NSPropertyListSerialization
1079 propertyListFromData:mutabilityOption:format:errorDescription:] to
1080 deserialize the plist. Removed variant for libFoundation since it
1081 should support the above.
1082 ([AgenorUserDefaults -generateSQLForInsert])
1083 ([AgenorUserDefaults -generateSQLForUpdate]): make use of
1084 -[NSPropertyListSerialization
1085 dataFromPropertyList:format:errorDescription:] to serialize the
1086 plist. Removed variant for libFoundation since it should support
1087 the above. Escape the backslashes from the resulting string.
1089 2007-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1091 * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
1092 SOGoMailFolder: SOGoMailSpecialFolder.
1094 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1095 -traversalFromMailAccount]): overridden method that returns the
1096 initialized mutable string.
1097 ([SOGoMailAccount -allFolderPaths]): take the special folder paths
1098 with -traversalFromMailAccount and reposition them at the
1099 beginning of the list. By creating the special folders during that
1100 request, we also make sure that the folder exists thanks to the
1101 new initialisation method of the new "SOGoSpecialMailFolder"
1103 ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
1105 ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
1107 ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
1108 longer use lookupImap4Folder.
1109 ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
1112 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1113 -traversalFromMailAccount]): new method that returns the full
1114 IMAP4 path to the object.
1116 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
1117 "superUsernames" after fetching it from the ud.
1119 2007-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1121 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1122 -eventsListAction]): substitude the start and end date with their
1123 UTC counterpart, taking into account the offset from UTC related
1124 to those dates instead of the current one. This renders
1125 -[UIxCalMainView -userUTCOffset] obsolete because the computings
1126 that occured in javascript are now done server-side.
1128 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
1129 removed obsolete method.
1131 * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
1132 method converting html content to plain text.
1134 * SoObjects/Mailer/NSString+Mail.[hm]: new category module
1135 enhancing NSString with utility methods pertaining to mail handling.
1137 * SoObjects/Mailer/SOGoMailObject.m
1138 ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
1140 -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
1141 modified method to be always recursive and to take an array of the
1142 accepted mime-types as parameter. The returned array now contains
1143 the mime-type as well as the part keys.
1145 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1146 -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
1147 ([SOGoMailObject -contentForEditing]): rewrote method to take into
1148 account the first text/plain part or the first text/html part
1149 converted to text/plain with our new -[NSString htmlToText]
1152 * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
1153 "replyToAll:" with YES as parameter instead of NO.
1155 2007-10-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1157 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1158 -davContentType]): ignore any possible parameter taken from the
1159 mime-info of the body part.
1161 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1162 -lastFirstMessageNumber]): new accessor that returns the first
1163 message number of the last series of messages.
1164 ([UIxMailListView -fetchKeys]): request the bodystructure for each
1166 ([UIxMailListView -hasMessageAttachment]): extract the attachment
1167 information from the message bodystructure.
1169 2007-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1171 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1172 -GETAction:]): use the "application/octet-stream" mime type for
1173 elements of type "application/x-xpinstall" to avoid confusing
1176 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
1177 ([UIxPreferences -itemMessageCheckText])
1178 ([UIxPreferences -userMessageCheck])
1179 ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
1180 methods for handling the retrieval of new messages automatically.
1182 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
1183 that returns the interval of time between automatic message
1186 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1187 -defaultAction]): now expunges the last folder marked for expunge.
1189 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1190 -trashInContext:_ctx]): now marks the container folder for
1193 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1194 -markForExpunge]): new method that marks the folder for the next
1195 automatic expunge operation in the user settings.
1196 ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
1197 takes the last folder marked for expunge, expunges it and removes
1198 it from the user settings, if it exists.
1200 2007-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1202 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1203 -messageSubjectCellStyleClass]): added support for replied,
1204 forwarded, forwarded and replied mails.
1206 * SoObjects/Mailer/NSData+Mail.m ([NSData
1207 -bodyDataFromEncoding:encoding]): new utility method that decodes
1208 the NSData instance properly depending on the encoding string
1209 passed as parameter.
1211 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1212 -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
1214 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1215 -stringForData:_datapartInfo:_info]): simplified by invoking
1216 -bodyDataFromEncoding: from our new NSData category methods.
1218 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1219 -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
1220 where only the body part of the first of the keys fetched was
1221 returned. Also decodes the body parts properly following their
1224 * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
1225 extends the NSData class with utility methods useful for handling
1228 2007-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1230 * SoObjects/SOGo/NSArray+Utilities.m
1231 ([NSArray -stringsWithFormat:format]): replace instances of NSNull
1234 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1235 -keysWithFormat:keyFormat]): replace instances of NSNull with
1238 * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
1239 empty, use "c_cn" instead.
1241 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1242 ([SOGoMailAccount -draftsFolderInContext:_ctx])
1243 ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
1244 of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
1245 no always be specified from the root instead of sometimes from the
1248 2007-10-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1250 * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
1251 ([UIxPageFrame -productLocalizableStrings]): invoke the new
1252 +[SOGoUser language] method if the user is nil.
1254 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
1255 that returns any generically-found language.
1256 ([SoUser -language]): modified to call the above.
1257 ([SOGoUser -language]): modified to call the above if the user
1258 language has a null length.
1260 * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
1261 -davEntityTag]): modified to return the "hash" of the vCard string.
1263 * UI/MailerUI/UIxMailActions.m ([UIxMailActions
1264 -removeAllLabelsAction]): new method that removes all label flags
1265 from the associated message.
1266 ([UIxMailActions -addLabel1Action]
1267 [UIxMailActions -addLabel2Action]
1268 [UIxMailActions -addLabel3Action
1269 [UIxMailActions -addLabel4Action]
1270 [UIxMailActions -addLabel5Action]): new methods that adds label
1271 flags to the associated message.
1272 ([UIxMailActions -removeLabel1Action]
1273 [UIxMailActions -removeLabel2Action]
1274 [UIxMailActions -removeLabel3Action
1275 [UIxMailActions -removeLabel4Action]
1276 [UIxMailActions -removeLabel5Action]): new methods that removes
1277 label flags from the associated message.
1279 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
1280 new accessor that returns the labels associated with the message.
1282 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1283 -allFolderPaths]): new method that returns all the paths of all
1284 the subfolders of the folder object.
1285 ([SOGoMailFolder -allFolderURLs]): new method replacing
1288 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1289 -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
1290 role from its parent folder.
1292 2007-10-19 Francis Lachapelle <flachapelle@inverse.ca>
1294 * SoObjects/SOGo/SOGoUser.m
1295 ([SOGoUser -rolesForObject:objectinContext:context]): allow
1296 multiple super usernames to be defined. The user default
1297 SOGoSuperUsername is renamed SOGoSuperUsernames and must be
1300 2007-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1302 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1303 -userInContext:]): override the super method by returning
1304 anonymous if the super returns nil.
1306 * UI/Common/UIxPageFrame.m ([UIxPageFrame
1307 -productLocalizableStrings]): new method that returns the
1308 product-specific translation dictionary as a JSON hash.
1309 ([UIxPageFrame -commonLocalizableStrings]): same as above but for
1310 the "Common" framework.
1311 ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
1312 the requestor components to require additional Javascript files.
1313 This is useful now that all the scripts are loaded at the end of
1315 ([UIxPageFrame -additionalJSFiles]): new getter related to the
1318 2007-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1320 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
1321 implemented new web method.
1323 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1324 -copyToFolderNamed:folderNameinContext:]): new method with the
1325 code cut/pasted from -moveToFolderNamed:inContext:.
1326 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
1327 modified to use the code from -copyToFolderNamed:inContext:, which
1328 is common between the two actions.
1330 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1331 ([SOGoMailAccount -sentFolderNameInContext:])
1332 ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
1333 the user settings into account.
1335 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
1336 ([UIxMailFolderActions -setAsSentFolderAction])
1337 ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
1338 that change the purpose of the active folder to "Sent", "Drafts"
1341 * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
1342 returns the subject as quoted-printable.
1344 * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
1345 SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
1346 the "aclMethod" method for the subsequent language-dependent
1349 * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
1350 returns the subject as quoted-printable.
1352 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1353 -dealloc]): release item, aptStartDate and aptEndDate.
1355 2007-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1357 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1358 -initWithName:newNameinContainer:newContainer]): the owner of a
1359 shared folder is set to "nobody" by default.
1361 * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
1362 that returns whether the object has an owner or not.
1364 2007-10-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1366 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1367 the folder even if the current user is not its owner.
1369 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
1371 * We now send advisory emails when folders
1372 are created / deleted.
1374 * Fixed the sending of advisory emails upon
1375 ACL changes on folders.
1377 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
1379 * UI/Scheduler/UIxComponentEditor.m
1380 Implemented event/task priority support.
1382 * SoObjects/Contacts/SOGoContactGCSFolder.m
1383 Added CardDAV support.
1385 * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
1386 Implemented From: based on LDAP results based on
1387 the MailFieldNames attribute (an array) specified
1388 in every LDAP-based authentication sources.
1390 * UI/MailPartViewers/UIxMailPartTextViewer.m and
1391 UI/WebServerResources/MailerUI.css
1392 We avoid replacing "\r\n" and "\n" with <br /> and
1393 rather use CSS capabilities for proper formatting.
1394 This is _WAY_ faster on very large mails.
1396 2007-10-10 Francis Lachapelle <flachapelle@inverse.ca>
1398 * UI/Scheduler/UIxComponentEditor.m
1399 ([UIxComponentEditor -componentCalendar]): returns the calendar
1400 object of the current event.
1402 2007-10-05 Ludovic Marcotte <ludovic@inverse.ca>
1404 * UI/WebServerResources/MailerUI.js
1405 We check if at least one message is selected
1406 before performing a Reply/Reply All/Forward
1408 * SoObjects/Appointments/SOGoAppointmentFolder.m
1409 and others - implemented support for recurring
1410 events (with some known limitations right now,
1411 all soon to be fixed).
1413 2007-10-04 Francis Lachapelle <flachapelle@inverse.ca>
1415 * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
1416 the constraint that a username can't start with a digit.
1418 2007-10-02 Francis Lachapelle <flachapelle@inverse.ca>
1420 * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
1421 repository to Inverse's branch.
1423 2007-09-28 Francis Lachapelle <flachapelle@inverse.ca>
1425 * SoObjects/Mailer/SOGoDraftObject.m
1426 ([SOGoDraftObject -isValidAttachmentName:_name]): removed
1427 constraint on space in file name.
1428 ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
1429 now removes from file name all characters preceding a backslash.
1430 This happens with IE7 because the complete attachment file path
1433 2007-09-25 Francis Lachapelle <flachapelle@inverse.ca>
1435 * SoObjects/Appointments/SOGoAptMailNotification.m
1436 ([SOGoAptMailNotification -appointmentURL]): set personal as the
1437 default calendar where to add the event.
1439 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1440 activate the SOGoUIxDefaultModule user defaults.
1442 2007-09-21 Francis Lachapelle <flachapelle@inverse.ca>
1444 * UI/SOGoUI/UIxComponent.m
1445 ([UIxComponent -shortUserNameForDisplay]): returns the string
1446 "wrongusernamepassword" when authentication failed.
1448 2007-09-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1450 * UI/MailPartViewers/UIxMailPartICalViewer.m
1451 ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
1452 entry of the Calendars parent folder.
1454 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1455 -messageSubject]): new accessor method to work-around a problem
1456 within SOPE where a subject could be returned as an NSData.
1458 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1459 -appendPersonalSources]): make sure the value of the "c_path4" of
1460 the returned rows are not NSNull, otherwise, discard them.
1462 2007-09-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1464 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1465 -compare:otherFolder]): new overriden method that compares two
1466 contact foldes based on their class and then transfer the control
1467 to the super method in SOGoFolder.
1469 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1470 ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
1471 compare two contact folders based on their class and then their
1474 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
1475 new method for sorting folders. The folders are compared based on
1476 their ownership, whether they are a main folder and finally
1477 depending on their display name.
1479 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1480 -pathArrayToSOGoObject]): do not reorder the paths if the third
1481 element is an instance of NSNull.
1483 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1484 -subFolders]): returns a sorted array using the "compare:"
1487 2007-09-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1489 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1490 -calendars]): also returns the owner of the listed folders.
1492 * SoObjects/Appointments/SOGoAppointmentFolder.m
1493 ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
1495 * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
1496 method into UIxFolderActions.
1498 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1499 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
1500 freebusy info from the "personal" calendar.
1502 * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
1503 -createFolderAction]): new standardized method for requesting
1504 folder creations among gcs-based modules.
1506 * UI/Common/UIxParentFolderActions.[hm]: new action class module.
1508 * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
1509 module, equivalent to the SOGoParentFolder's child
1510 SOGoContactFolders, but for calendars.
1512 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
1513 method that returns translated strings for controller bundles
1514 (same as what UIxComponent does for view bundles).
1515 ([SOGoObject -pathArrayToSOGoObject]): new method that returns
1516 the real path to a subscribed folder (if subscribed).
1517 ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
1518 ([SOGoObject -globallyUniqueObjectId]): new instance method
1519 calling its class equivalent.
1521 2007-09-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1523 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
1524 whether the user is logged in and if so, redirect to his/her
1526 ([SOGoRootPage -appendToResponse:inContext:]): removed useless
1529 2007-09-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1531 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1532 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1534 ([SOGoFolder -displayName]): new method.
1535 ([SOGoFolder -delete]): accept to proceed only if nameInContainer
1538 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1539 ([SOGoContactLDAPFolder
1540 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1541 renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
1543 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1544 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1545 removed method, reimplemented in SOGoFolder.
1546 ([SOGoContactGCSFolder -displayName]): removed method,
1547 reimplemented in SOGoFolder.
1548 ([-delete]): removed method, modified in SOGoFolder.
1550 * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
1551 a subclass of SOGoParentFolder.
1553 * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
1554 from SOGoContactFolders and modified to be more content-independent.
1556 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
1557 ([UIxMailActions -markMessageReadAction]): new methods moved from
1558 UIxMailListView and adapted to invoke the client object directly,
1559 since the previous versions had to to a lookup from the parent
1562 * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
1563 method into UIxMailActions.
1564 ([-markMessageReadAction]): same as above.
1565 ([-viewAction]): removed useless method.
1566 ([-javaScriptOK]): removed useless method.
1567 ([-isJavaScriptRequest]): removed useless method.
1568 ([-lookupActiveMessage]): removed useless method.
1570 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1571 -responseWithStatus:status]): new method that returns a WOResponse
1572 initialized with the specified status code.
1573 ([WODirectAction -responseWith204]): new method that invokes the
1574 above one with "204" as parameter.
1575 ([WODirectAction -redirectToLocation:newLocation]): rewrote method
1576 to make use of -responseWithStatus:.
1578 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
1579 method that returns a WOResponse initialized with the 204 status
1582 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
1583 always use a "not deleted" search qualifier along with the user
1584 qualifier (if present).
1586 2007-09-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1588 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1589 -contactSearchAction]): only return the records which have an
1592 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1593 -trashInContext:_ctx]): no longer expunge the mailbox after
1594 marking a message deleted.
1595 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
1598 * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
1599 ([-trashAction]): moved method into UIxMailActions.
1600 ([-moveAction]): moved method into UIxMailActions.
1602 2007-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1604 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1605 ([_UIxHTMLMailContentHandler
1606 -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
1607 comments from the CSS code, do not add the CSS code to the body
1608 content and remove references of body from the CSS declarations.
1609 ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
1610 ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
1611 common with cssContent in a different method and invoke it only
1614 * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
1615 instead of UIxPageFrame.
1617 2007-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1619 * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
1620 ([-appendToResponse:responseinContext:ctx]): commented out.
1621 ([SOGoRootPage -connectURL]): new accessor that returns the full
1622 url the the "connect" method.
1623 ([-connectAction]): rewrote method to return a properly formatted
1624 auth. cookie based on the username and password passed as
1627 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1628 set the value of the cookie to "discard" and set its expiration
1631 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1632 -preprocessCredentialsInContext:context]): consider the user
1633 anonymous if the cookie value is "discard".
1634 ([SOGoWebAuthenticator
1635 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1636 set the expiration date of the cookie to yesterday.
1638 * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
1639 returns the path to the application if the clientObject is not a
1642 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
1643 moved the requirement of authentication from the SOGo application
1646 * SoObjects/Appointments/SOGoAppointmentObject.m
1647 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
1648 check whether the new appointment object is still relevant before
1649 sending a notification.
1651 2007-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1653 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1654 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1655 render the login page through the SoDefaultRenderer.
1657 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
1658 -isPublicInContext:localContext]): new overriden method that
1661 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1662 -currentCalendarLogin]): replace css-unsafe characters with _.
1664 * UI/SOGoUI/UIxComponent.m ([UIxComponent
1665 -shortUserNameForDisplay]): simplified method.
1666 ([-user]): removed method since [context activeUser] is as useful.
1668 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1670 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1671 set the cookie path to "/".
1673 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
1674 authenticator based on the request handler key. "dav" returns the
1675 SOGoDAVAuthenticator, anything else returns the Web authenticator.
1677 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
1678 "SOGoAuthenticator".
1680 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
1681 implementing a subclass of SoCookieAuthenticator, designed for
1682 web-based cookie authentication of users.m
1684 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1685 new method that resets the authentification cookie.
1687 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1689 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
1690 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
1691 didBind to NO to make sure no false authentication is returned if
1692 the bind operation is not executed.
1694 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1696 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
1697 "In-Reply-To" header field when replying.
1699 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
1700 table field names that are queried.
1702 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1703 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
1704 add the "c_" prefix to the quick table field names that are
1707 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1709 * SoObjects/Appointments/SOGoAppointmentFolder.m
1710 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
1711 "personal" to the ocs path of the appointment folder.
1713 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1714 -flatContentAsString]): use latin1 when the encoding is not
1715 specified, and to reencode data chunk which were not correctly
1716 decoded with the original charset.
1718 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
1719 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
1720 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
1721 ([SOGoAppointmentFolder
1722 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
1723 override those methods to use the "personal" additional directory.
1725 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
1726 append "/personal" to the calendar path to simulate a single
1727 calendar in a choice of many.
1729 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1730 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
1731 methods back here. Moved the folder existence check here, and do
1732 it on self only when the lookup happens for a non-folder object.
1733 This permits to accept entries for folders with parents who
1736 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1738 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1739 -shouldTakeValuesFromRequest:requestinContext:context]): same as
1742 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1743 -shouldTakeValuesFromRequest:requestinContext:context]):
1744 redesigned method since any method called can be received from a
1745 POST or a GET. Instead we check the method call itself and we
1746 accept only if it has the "save" prefix.
1748 * SoObjects/Appointments/SOGoAptMailNotification.m
1749 ([SOGoAptMailNotification -getSubject]): returns the subject an a
1750 quoted-printable encoded string, if needed.
1752 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1753 -asQPSubjectString:encoding]): moved method into
1754 NSString+Utilities.m.
1756 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1758 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1759 -messageForwardingList])
1760 ([UIxPreferences -itemMessageForwardingText])D
1761 ([UIxPreferences -userMessageForwarding])
1762 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
1763 new template methods for manage the user preference regarding
1766 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
1767 algorithm to return, in order, the user's defined language or the
1768 first browser language or, finally, the default language.
1769 ([SOGoUser -messageForwarding]): new method that returns the user
1770 preference for message forwarding: "inline" or "attached",
1771 defaulting to "attached".
1773 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1774 -contentForInlineForward]): new method that returns the content of
1775 the message for inline forwarding based on the SOGoMailForward
1778 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1779 -fetchMailForForwarding:sourceMail]): check the user preference
1780 for message forwarding and compose inline forwarded messages if required.
1782 * SoObjects/Appointments/SOGoCalendarComponent.m
1783 ([SOGoCalendarComponent
1784 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1785 now use a template based on the language returned from the
1788 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
1789 a subclass of SOGoMailForward for English locale.
1791 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
1792 a subclass of SOGoMailForward for French locale.
1794 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
1795 helps build template for inline forwarded messages.
1797 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1799 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
1800 to handle "<var:if-ie>" template tags.
1802 * UI/SOGoElements: new extension bundle containing sogo-specific
1805 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1806 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
1807 selected in the dialog.
1808 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
1809 first category, if ever, of the calendar entity.
1811 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1812 -composeAction]): restored method since it is needed by the
1815 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1816 -composeAction]): the address fields should be arrays and not
1819 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
1820 that returns the build date of SOGo in the template.
1822 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1824 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1825 -_flattenedRecords:records]): when the c_cn field is empty,
1826 returns set a formatted string with the concatenation of
1827 c_givenname and c_sn as the displayName.
1829 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1830 -isValidMailAccountName:_key]): prevent unknown accounts from
1833 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1834 -pathToAttachmentObject]): we no longer need the filename
1835 extension for SoLookup...
1837 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1838 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
1839 filename to have an extension, and thus accept any filename.
1841 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1842 -currentCName]): new method that returns the c_name of the
1843 contact, correctly escaped to be passed by url afterwards.
1845 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1846 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
1847 instance of [self decodedFlatContent] instead of the buggy
1848 NSString from [super flatContentAsString] to the parser.
1850 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1852 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
1853 new category method to reponds to the "delete" web command on
1855 ([UIxMailActions -deleteAttachmentAction]): new category method to
1856 reponds to the "deleteAttachment" web command on drafts, taking
1857 the "filename" url parameter into account.
1859 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1860 -contentForEditing]): new method that retrieve the editable mail
1862 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
1863 returns the body keys for attached files (parts with a "filename"
1866 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1867 -asQPSubjectString:encoding]): do not change the string if the
1868 encoded string has the same length (which means it is already
1870 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
1871 that retrieve a draft along with its attachments for editing.
1872 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
1873 choke if the "to" header field is empty.
1874 ([SOGoDraftObject -delete]): new method to delete the draft folder
1875 whenever operations are done.
1877 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1879 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
1880 useless stub method, of which the intention was implemented in
1882 ([-lookupSentFolderUsingAccount]): removed obsolete method.
1883 ([-selectedMailIdentity]): removed obsolete method.
1884 ([-lookupSentFolderUsingFrom]): removed obsolete method.
1885 ([-storeMailInSentFolder:_path]): removed obsolete method, of
1886 which the mechanism has been put in -[SOGoDraftObject sendMail]
1888 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
1889 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
1890 adapted algorithms to the new SOGoDraftObject methods.
1891 ([-deleteAction]): removed method since local draft objects cannot
1892 be removed by the user.
1894 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1895 -expungeAction]): new method replacing the one previously found in
1897 ([UIxMailFolderActions -createFolderAction])
1898 ([UIxMailFolderActions -renameFolderAction])
1899 ([UIxMailFolderActions -deleteFolderAction])
1900 ([UIxMailFolderActions -emptyTrashAction])
1901 ([UIxMailFolderActions -subscribeAction])
1902 ([UIxMailFolderActions -unsubscribeAction]): error situations
1903 should have http return code 500 instead of 403.
1905 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1906 -composeAction]): new method replacing the one previously in
1909 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1910 -imap4URLString]): removed overriden method (see below).
1912 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
1913 cache the mailbox acl.
1914 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
1915 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
1917 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
1918 the new method of determining the users mail accounts.
1920 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
1921 longer adds a "/" at the end of the string (the default for
1922 folders), therefore this will be overriden in SOGoMailFolder
1923 rather than in SOGoMailObject.
1925 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
1926 method, moved into the new UIxMailActions module class.
1928 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
1929 -newDraft]): new method that returns a new SOGoDraftObject
1930 instance with a unique filename based on the current timestamp and
1931 the "newDraft" prefix.
1933 -lookupName:nameinContext:localContextacquire:acquire]): overriden
1934 method by detecting local drafts with their "newDraft" prefix.
1935 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
1937 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
1938 from scratch by making it a subclass of SOGoMailFolder.
1940 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
1943 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
1946 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
1949 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
1950 new method, initializing the new ivars: IMAP4ID, headers, text,
1951 sourceURL and sourceFlag.
1952 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
1953 ([-_ensureUserSpoolFolderPath])
1954 ([-saveMimeMessageToTemporaryFileWithHeaders:])
1955 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
1956 ([-deleteTemporaryMessageFile:], [-delete], [-content])
1957 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
1958 ([-uid], [-flags], [-size], [-envelope]): removed methods.
1959 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
1961 ([SOGoDraftObject -setSourceURL:newSourceURL])
1962 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
1963 methods to store the url of the original message between accesses
1964 so that, depending on the action taken (forward or reply), the
1965 correct flag can be given.
1966 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
1967 the imap4 id that is returned for the message whenever it is saved
1968 into the drafts folder.
1969 ([SOGoDraftObject -save]): new method that takes in charge the
1970 saving of the message in the IMAP drafts folder.
1971 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
1972 new method that fills the original data of the new message with
1973 the reply content of the original message.
1974 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
1975 above for message forwarding.
1976 ([-spoolFileManager]): removed useless method (only returned the
1977 default filemanager...)
1978 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
1979 the resulting message as an NSData chunk.
1981 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
1982 containing a rewrite of the mail action methods found in
1983 UI/Mailer/, that needed to be put in the SOGoMailObject class.
1984 ([SOGoMailObject -subjectForReply]): new method that returns a
1985 subject suitable for replies.
1986 ([SOGoMailObject -contentForReply]): new method that returns the
1987 textual content of an email, quoted for replying.
1988 ([SOGoMailObject -filenameForForward]): new method that returns
1989 the name of the filename that should contain the forwarded
1990 message, based on its subject.
1991 ([SOGoMailObject -subjectForForward]): explicit.
1993 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1995 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1996 -mailAccounts]): rewrote method to return the name of the mail
1997 accounts now available with the -[SOGoUser mailAccounts] method.
1998 ([UIxMailMainFrame -showLinkBanner]): removed method.
1999 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
2000 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
2001 ([UIxMailMainFrame -rootURL]): removed method.
2002 ([UIxMailMainFrame -userRootURL]): removed method.
2003 ([UIxMailMainFrame -calendarRootURL]): removed method.
2004 ([UIxMailMainFrame -contactsRootURL]): removed method.
2005 ([UIxMailMainFrame -hasErrorText])
2006 ([UIxMailMainFrame -errorText])
2007 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
2008 ([-composeAction]): removed method. Now provided by
2009 UIxMailAccountActions.
2010 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
2011 ([UIxMailMainFrame -hideFolderTree]): removed method.
2012 ([UIxMailMainFrame -treeRootClassName]): removed method.
2013 ([UIxMailMainFrame +initialize]): removed method.
2014 SOGoMailTreeRootClass userdefaults will no longer have any effect.
2016 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
2017 -redirectToLocation:newLocation]): new method that implements the
2018 same functionality as WOComponent.
2020 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
2022 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
2023 method that returns whether the current mail is store in the
2024 drafts folder hierarchy.
2026 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
2027 ([-primaryEmail]): removed method.
2028 ([SOGoUser -primaryIMAP4AccountString]): removed method.
2029 ([SOGoUser -mailAccounts]): new method that returns an array
2030 containing description dictionaries for all the user mail
2031 accounts. Each account also contain the user's identities for that
2033 ([SOGoUser -allIdentities]): new utility method that returns all
2034 the user identities on all accounts.
2035 ([SOGoUser -primaryIdentity]): new method return the first
2036 identity of the first account.
2038 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
2040 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2041 -isInDraftsFolder]): returns NO.
2042 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
2044 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
2046 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2047 -isInDraftsFolder]): new method that detects if self is contained
2048 by the drafts folder by calling itself on the container object.
2050 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
2052 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
2053 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
2054 return the name of the mail accounts now available with the
2055 -[SOGoUser mailAccounts] method.
2057 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
2060 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
2063 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
2064 -keysWithFormat:format]): method that forward the method of the
2065 same name to each member of the array, considering they all are
2066 instances of NSDictionary.
2067 ([NSArray -objectsForKey:key]): same principle as above.
2068 ([NSArray -flattenedArray]): new method that transforms an array
2069 of arrays into a single array containing all the elements of the
2072 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
2073 -keysWithFormat:keyFormat]): new method inspired by the python
2074 string formatting system and which replaces occurences of "%{key}"
2075 by the corresponding keys.
2077 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2079 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
2080 sql script before the generic one when initializing mandatory
2083 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2085 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2086 -pureEMailAddress]): new utility method inspired by the
2087 "_rawSender" private method in SOGoDraftObject, which it now
2090 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
2091 provides a common API for sending emails, no matter what the
2094 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2096 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2097 -quotasAction]): invoke "relativeImap4Name" instead of
2098 "nameInContainer" since the latter also returns the "folder"
2101 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2102 -listMailboxesAction]): declare the output as text/plain in UTF-8.
2104 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2105 -deleteFolderAction]): fixed the url of the destination folder.
2107 * Main/SOGo.m ([SOGo +initialize]): show the build date and
2108 hostname at startup.
2110 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2112 * SoObjects/Appointments/SOGoCalendarComponent.m
2113 ([SOGoCalendarComponent
2114 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
2115 set the mail date to the current date string returned by our
2116 rfc822DateString extension method.
2118 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2119 -_gcsFoldersFromFolder:): ignore the personal folders who are
2120 returned but don't really exist.
2122 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
2124 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
2125 has to return only one element.
2127 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2129 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
2130 -content]): new method returning the decoded content of the
2131 corresponding attachment as an NSData instance.
2132 ([UIxMailPartViewer -filename]): if the "filename" parameter of
2133 the metadata parameterList is empty, try to find out the filename
2134 from the "disposition" metadata returned with the BODYSTRUCTURE
2137 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
2138 -composeAction]): prefix the INBOX folder with "folder".
2140 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
2141 -relativeImap4Name]): return nameInContainer stripped from its
2142 first 6 characters since all folder names are prefixed with
2145 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2146 -imap4URLString]): invoke -relativeImap4Name instead of
2147 "nameInContainer" since the former will return the fixed IMAP4
2148 foldername and the latter the SoObject name.
2150 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2151 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
2153 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
2154 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
2155 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
2156 ([SOGoMailAccount -sentFolderNameInContext:])
2157 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
2158 names with "folder".
2159 ([SOGoMailAccount -inboxFolderInContext:_ctx])
2160 ([SOGoMailAccount -sentFolderInContext:_ctx])
2161 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
2162 the folder names with "folder" since they are prefixed earlier.
2164 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2166 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
2167 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
2168 all starts with "folder".
2170 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
2171 longer declare security info from here.
2173 * SoObjects/Mailer/SOGoMailFolder.m
2174 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
2175 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
2176 folder names now always start with "folder".
2178 * SoObjects/Mailer/SOGoMailAccount.m
2179 ([-lookupName:inContext:acquire:]): folder names now always start
2182 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2184 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
2185 -forwardAction]): adapted to the new saveAttachment:withMetadata:
2188 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
2189 code to save the attached filenames with the filename returned by
2190 the web server as well as their mime types.
2192 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
2193 ([UIxMailPartMessageViewer -toAddresses])
2194 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
2195 the corresponding fields separated with a ", " (if needed).
2197 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
2198 -saveAttachment:_attachwithMetadata:metadata]): new method
2199 replacing -saveAttachment:withName: and which takes a dictionary
2200 as parameter with the filename and the mime type of the
2202 The mimetype is then saved in a hidden text file.
2203 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
2204 take the mime type from the hidden text file related to the
2207 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
2208 ([SOGoContactGCSFolder
2209 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2210 return records if the db records are > 0 and not just > 1...
2212 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2214 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
2216 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
2218 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2219 ([SOGoContactLDAPFolder
2220 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2221 translate the returned records to a normalized form.
2223 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2224 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2225 translate the returned records to a normalized form.
2227 * UI/Scheduler/UIxCalListingActions.m,
2228 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
2229 SoObjects/SOGo/AgenorUserDefaults.m,
2230 SoObjects/Contacts/SOGoContactGCSFolder.m,
2231 SoObjects/Appointments/SOGoAppointmentFolder.m,
2232 OGoContentStore/OCSiCalFieldExtractor.m,
2233 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
2234 table fields with "c_".
2236 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2238 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
2239 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
2240 the application settings. If set, both limit will influence the
2241 maximum size of the resultsets and the time taken to solve them.
2242 ([LDAPSource -_initLDAPConnection]): initialize the limits.
2244 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2246 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
2247 method that declares the DAV namespace related to CardDAV.
2248 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
2249 method that declares the "access-control" and "addressbook-access"
2250 classes to the list.
2252 * SoObjects/Appointments/SOGoAppointmentFolder.m
2253 ([-lookupActionForCalDAVMethod:]): removed method.
2254 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
2255 method that declares the DAV namespace related to CalDAV.
2257 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
2258 optional method for subclasses which handle specific extensions to
2259 the DAV protocol: CardDAV or CalDAV.
2261 -lookupName:lookupNameinContext:localContextacquire:acquire]):
2262 new overriden method that handles dav invocations for extensions
2263 to DAV by returning an appropriate SoSelectorInvocation.
2265 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2266 -asDavInvocation]): new method returning a dictionary with a "ns"
2267 key representing the dav namespace and a "method" key representing
2268 the dav method name of the request.
2270 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
2271 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
2273 ([UIxPreferences -shouldDisplayPasswordChange]): new template
2274 method that returns the value of SOGoUIxUserCanChangePassword.
2276 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
2277 scan the value of SOGoUIxDefaultModule. If not set, the default
2278 module defaults to "Calendar".
2279 ([SOGoUserHomePage -defaultAction]): redirect the user to the
2280 value of "SOGoUIxDefaultModule".
2282 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2284 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2285 -contactInfos]): cache the results to avoid multiple invocations.
2287 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2288 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
2289 really should return something or if we fake to return nil...
2291 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2293 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
2294 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
2295 default is set to "bypass".
2297 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2298 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
2299 when authMethod is set to "bypass" from now on. This would avoid a
2300 security concern with a default installation of SOGo.
2301 AuthentificationMethod is now prefixed with "SOGo" for better
2304 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2306 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2307 -quotasAction]): new method that returns a json representation of
2310 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2312 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2313 -imap4URL]): rewrote method to support accented mailbox names.
2314 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
2315 SOGoAuthenticator's passwordInContext:.
2317 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2318 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
2319 start and due dates to nil if hasStartDate and hasDueDate are
2322 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2323 -passwordInContext:context]): made method public.
2325 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2326 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
2327 to false to avoid a null violation.
2329 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2331 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2332 -contentAsString]): returns the message encoded in ISO Latin 1
2335 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
2336 SOGoSuperUsername user defaults.
2337 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
2339 ([SOGoUser -rolesForObject:objectinContext:context]): if the
2340 current user is the superuser, grant him/her the "owner" role.
2342 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
2343 the folder only if the current user is the owner of the future
2346 * SoObjects/Appointments/SOGoCalendarComponent.m
2347 ([SOGoCalendarComponent -contentAsString]): we return the content
2348 based on the permissions returned by the security manager instead
2349 of by looking at the user roles.
2351 * SoObjects/Appointments/SOGoAppointmentFolder.m
2352 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
2353 folders of the user to whom this folder belongs instead of the
2354 active user. This way, a delegate user will be able to have the
2355 same view that the original user has if he connects from his user
2358 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
2359 user exists before creating the SOGoUserFolder instance. If not,
2362 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
2363 return the message source code in plain text.
2365 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2366 -contentAsString]): returns the message encoded in UTF8.
2368 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2370 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
2371 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
2372 leading tagname into account when serializing the element values.
2374 * Main/SOGoProductLoader.m: only load bundle directories ending
2375 with the "SOGo" extension.
2377 * Main/SOGo.m ([SOGo
2378 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
2379 result set if the query has caused no exception. Otherwise we get
2380 an "evaluation is in progress exception".
2382 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2384 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2385 -generateSQLForInsert]): initialize error to nil before the
2386 serialization. Otherwise the method can get confused if it ever is
2387 initialized to something else.
2389 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
2390 -folderIsMandatory]): returns NO unconditionnally.
2392 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2393 -appendPersonalSources]): add the "personal" folder to the list of
2394 user folders even if it doesn't exist, so that it is created when
2395 the user accesses it.
2397 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2398 -folderIsMandatory]): returns YES if nameInContainer is set to
2399 "personal", which is the default address book.
2401 * SoObjects/Appointments/SOGoAppointmentFolder.m
2402 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
2403 users must have one Calendar folder (one and only one).
2404 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
2405 escaping '\' so make the carriage return a real one. This way,
2406 PgSQL 8 won't complain about escaping the string.
2408 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
2409 method that create the folder if considered mandatory.
2410 ([SOGoFolder -folderIsMandatory]): new method that determines
2411 whether the folder should be created automatically or not. To be
2412 overriden by subclasses.
2414 * Main/SOGo.m ([SOGo -run]): override method and create the
2415 missing system tables if needed.
2417 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2419 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
2420 -mailDateFormatter]): returns the user's date formatter.
2422 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
2423 applies the user timezone to the date object before returning it.
2425 * UI/Common/UIxSortButton.m: removed useless class module.
2427 * UI/Common/UIxSortableTableHeader.m: removed useless class
2430 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2431 -contactInfos]): use the "asc" url parameter instead of "desc" to
2432 determine the ordering.
2433 ([-sortOrdering]): removed method.
2434 ([UIxContactsListView -init]): removed the "searchText" ivar.
2435 (general): the template no longer use the UIxSortableTableHeader
2438 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
2439 -defaultSortKey]): default sort following the messages arrival
2440 instead of their date.
2441 ([-isSortedDescending]): removed method.
2442 ([-imap4SortOrdering]): use the "asc" url parameter instead of
2443 "desc" to determine the ordering.
2444 (general): the template no longer use the UIxSortableTableHeader
2447 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2449 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
2451 ([-setQualifier:_msg], [-qualifier]): removed methods.
2452 ([UIxMailListView -defaultAction]): added code to handle the
2453 search criteria and value passed as url parameters. Also, we now
2454 handle the same search criterias as Thunderbird/Icedove.
2456 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2458 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
2459 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
2460 the string instead of the string itself.
2461 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
2463 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
2464 bool var "acceptAnyUser" that is set when the AuthenticationMethod
2465 user default is nil.
2466 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
2467 unconditionnally returns an instance whenever acceptAnyUser is set.
2469 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2471 * Main/sogod.m (main): prevent SOGo from running as root.
2473 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2475 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2476 -setCurrentPassword:newPassword]): new stub method.
2477 ([SOGoUser -dateFormatterInContext:context]): new method that
2478 returns an instance of SOGoDateFormatter configured based on the
2481 * UI/Common/UIxPageFrame.m ([UIxPageFrame
2482 -relativePreferencesPath]): new method.
2484 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
2485 removed useless method.
2487 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
2488 different configurable formats (long and short date + time).
2490 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
2492 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2493 -isInternetRequest]): removed method.
2495 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2496 -jsonRepresentation]): new method with an explicit name.
2498 * UI/PreferencesUI/product.plist: new bundle that provides a web
2499 ui for handling user defaults.
2501 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
2503 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
2505 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
2507 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2509 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
2511 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2513 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
2514 -compareEventsAscending:otherEvent]): no longer use compare: on
2515 the time objects since one of them could be an NSNull, which
2516 crashes when comparing with anything.
2518 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2519 -eventsListAction]): sort events from here.
2520 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
2522 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
2523 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
2525 * SoObjects/Appointments/SOGoAppointmentFolder.m
2526 ([SOGoAppointmentFolder
2527 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
2528 no longer sort elements from here.
2530 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2532 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2533 -aclsForUser:uid]): implemented method by forwarding the request
2534 to the container. This fixes a bug where users could no longer
2535 read emails from shared folders.
2537 * SoObjects/Appointments/SOGoCalendarComponent.m
2538 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
2539 here, but rather in its parent class.
2541 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
2542 -stringForSecondsSinceThe70s:seconds]): new utility method.
2544 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2545 -eventsListAction]): no longer reduce the end day of one day for
2546 all day events since everything has been fixed in
2547 OCSiCalFieldExtractor.
2549 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2550 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
2551 the end date of all day events of 1 so that they stay on their
2554 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2556 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
2558 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
2560 ([-fetchCoreTasksInfos]): removed method.
2562 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2563 -init]): initialize an instance of SOGoDateFormatter.
2564 ([UIxCalListingActions -eventsListAction]): the display start and
2565 end dates are added to the listing for each event.
2567 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
2569 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2570 -isAllDay]): returns YES if the "hm" url parameter is set to
2572 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
2573 is displayed one day earlier.
2575 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2577 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2578 -_setupContext]): take the range of dates specified by the popup
2581 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
2582 WODirectAction that returns WOResponse objects with the events or
2583 todos satisfying the parameters passed in the url.
2585 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2586 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
2587 "isAllDay" into account and compute the amount of days to pass to
2590 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
2592 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
2593 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
2594 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
2595 new method that returns a json-formatted array of the visible tasks
2596 for the current user.
2598 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2600 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
2601 object must be present in the list of UIDs we delete the object
2602 from. Otherwise Calendar objects having no organizer and no
2603 attendees will remain in their owner's Calendar.
2605 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2606 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
2607 first 3 elements of the path array if the url returned by
2608 baseURLInContext: returns a hostname.
2610 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2611 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
2612 nil, in which case a crash happens when calling hasPrefix:.
2613 ([SOGoMailFolder -_sharesACLs]): same as above.
2614 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
2615 otherUsersFolderName is nil, we return nil.
2616 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
2617 nil from [self otherUsersPathToFolder], we return nil too.
2619 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2621 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2622 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
2623 the result of [self baseURLInContext:] to avoid a double escaping
2624 in the resulting string.
2626 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
2627 the user has the "ObjectReader" role on the parent container, then
2628 he is granted the "ObjectViewer" role on this object. Same for
2629 "ObjectEraser", although this might change later.
2631 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2632 -toolbar]): determine the toolbar filename based on the
2633 permissions declared by the securitymanager. The role mechanism
2634 has been adjusted on a lowerlevel so we can simplify the code.
2636 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2637 -initWithName:newNameinContainer:newContainer]): read the content
2638 directly from here. That way we can determine whether the object
2640 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
2641 the ObjectCreator role is enabled, we also grant the ObjectEditor
2642 role to the current user.
2644 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
2645 changed the method paradigm to only return HTTP code 204. Not test
2646 is done whatsoever since the security manager does it for us.
2648 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
2649 removed method because the same exists in UIxFolderActions.m
2651 * UI/Contacts/UIxContactsUserRightsEditor.m
2652 ([UIxContactsUserRightsEditor
2653 -setUserCanReadObjects:userCanReadObjects]): new method.
2655 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
2656 "FolderEraser" and special permission "Access Object". Removed
2657 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
2658 can be used instead. Removed "FolderReader" since it is useless.
2660 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2661 -vCard]): directly use the "content" ivar since it is initialized
2662 during object creation.
2664 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2665 ([SOGoContactLDAPFolder -init]): no longer handle the
2666 nameInContainer no the container ivars. They were removed because
2667 this class is a descendant of SOGoObject which already has them.
2668 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
2669 returning "displayName".
2670 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
2673 * SoObjects/Appointments/SOGoCalendarComponent.m
2674 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
2675 ([SOGoCalendarComponent -findParticipant:user]): new name for
2676 method "participant:".
2677 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
2678 findparticipant but taking a uid string as parameter.
2679 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
2680 iCalendar automatically. Instead, this is done only when the user
2681 is a "date and time viewer".
2682 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
2683 (modifier and responder) into account by compiling them with the
2686 * SoObjects/Contacts/SOGoContactFolder.h: removed
2687 "nameInContainer" from the list of required methods.
2689 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
2690 -davContentType]): returns "text/calendar".
2692 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2693 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
2694 groupdav resource-type.
2696 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2697 -davContentType]): same as below.
2699 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2700 -initWithName:newNameinContainer:newContainer]): new overriden
2701 method setting the custom owner directly.
2703 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2704 -davContentType]): same as below.
2706 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2707 -davContentType]): same as below.
2709 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
2710 declare "httpd/unix-directory".
2712 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
2713 "UTC" as fallback timezone instead of "Canada/Eastern".
2714 ([-hasEmail:email]): make use of the new NSArray's
2715 containsCaseInsensitiveString: method.
2717 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2718 -davContentType]): declare "message/rfc822" as content type.
2720 * SoObjects/Appointments/SOGoAppointmentFolder.m
2721 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
2723 ([SOGoAppointmentFolder
2724 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
2725 ([-fetchContentObjectNames]): commented out method since it was
2726 usefull only for testing Funambol.
2728 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
2729 -containsCaseInsensitiveString:match]): an enhanced version of
2732 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
2734 ([-showMarkDeletedButton]): removed useless method.
2735 ([-showTrashButton]): removed useless method.
2737 * SoObjects/Appointments/iCalEntityObject+SOGo.m
2738 ([iCalEntityObject -userIsParticipant:user]): new proxy method
2739 that invoked isParticipant on self for each possible email
2740 addresses of the user passed as parameter.
2741 ([iCalEntityObject -userIsOrganizer:user]): same as above.
2743 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
2746 * SoObjects/Appointments/SOGoAppointmentObject.m
2747 ([SOGoAppointmentObject
2748 -saveContentString:contentStringbaseVersion:baseVersion]): remove
2749 method since an event may not have an organizer.
2751 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2752 -GETAction:localContext]): clarified method. Added support for
2753 content-type (thanks to Helge Hess).
2754 ([SOGoObject -initWithName:_nameinContainer:_container]):
2755 initialize and retain the owner.
2756 ([SOGoObject -davContentType]): returns "text/plain".
2758 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2760 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2761 -addUserInAclsAction]): send an acl addition mail.
2762 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
2765 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2766 -_realActionWithFolderName:folderDict]): handle the possible
2767 presence of the "mail-invitation" url parameter. If present, the
2768 user will be redirected to the relevant folder.
2770 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
2771 ([SOGoUser -language]): new method that returns the user's
2772 preferred language, or the system's if none has been set yet.
2774 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
2775 that returns the full dav url to self.
2776 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
2777 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
2778 returns the full so url to the base of the SOGo module to which
2779 self belongs, and for the specified user.
2780 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
2781 but for the current user.
2782 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
2783 required by the acl advisory templates and which returns a link
2784 the target user can click to activate its new subscription.
2785 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
2786 but for inclusion of the application/x-sogo-notification part,
2787 which will be handled by the Lightning enhancer plugin.
2789 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
2790 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
2791 do nothing yet since imap folder subscription is not handled yet.
2793 * SoObjects/SOGo/SOGoContentObject.m
2794 ([-hasSupportForDefaultRoles]): removed method.
2796 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2797 -getFullEmailForUID:uid]): new method that returns the username +
2800 * SoObjects/Appointments/SOGoCalendarComponent.m
2801 ([SOGoCalendarComponent +initialize]): the default language for
2802 mail templates is now set to English.
2804 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
2805 SOGoACLAdvisory implementing the french template for user removal
2808 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
2809 SOGoACLAdvisory implementing the french template for user
2812 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
2813 SOGoACLAdvisory implementing the english template for user removal
2816 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
2817 SOGoACLAdvisory implementing the english template for user
2820 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
2821 supercall of all the acl advistory templates. The model is based
2822 on SOGoAptMailNotification except that the template encapsulates
2823 the message to be sent. Later, we might create a superclass common
2824 to all template-based emails.
2826 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2827 -addRange:newRange]): new method that store a string
2828 representation of the NSRange passed as parameter.
2829 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
2830 any range contained in self intersect with the one passed as parameter.
2832 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
2833 store ranges in an array to prevent them from intersecting with
2834 each other during the passes.
2836 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2838 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2839 -primaryFetchMailboxInfo]): useless method. Removed.
2841 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2843 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2844 -toManyRelationshipKeys]): invoke [self subfolders].
2845 ([SOGoMailFolder -subfolders]): new method containing what used to
2846 be in toManyRelationshipKeys.
2847 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
2850 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2851 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
2852 named and at the beginning of which we put the predefined folders.
2854 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2855 -emptyTrashAction]): new method inspired by a similar one from
2856 UIxMailListView, to which we added the ability to remove
2859 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
2860 method. Replaced with a similar one in UIxMailFolderActions.
2862 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2863 -renameFolderAction]): implemented method.
2864 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
2865 specified folder. Instead, we put it in the trash folder.
2867 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
2868 method, replaced with a similar method in the new
2869 UIxMailFolderAction class module.
2870 ([-deleteFolderAction]): idem.
2872 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2873 -createFolderAction]): new method implementing subfolder creation.
2874 ([UIxMailFolderActions -renameFolderAction]): new method
2875 implementing subfolder renaming (basic implementation to be
2877 ([UIxMailFolderActions -deleteFolderAction]): new method
2878 implementing folder deletion.
2880 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
2881 web actions related to the handling of imap folder.
2883 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2885 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2886 -ownerInContext:localContext]): overriden method because we are an
2887 IMAP4 client and we need a bit more intelligence to deduce the
2888 owner of the current folder.
2889 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
2890 return an NSException so we need to be careful here to avoid a
2892 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
2893 NSException so we need to be careful here to avoid a crash.
2895 * SoObjects/Mailer/SOGoMailAccounts.m
2896 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
2897 there is no longer any concept of Intranet or Internet connection
2900 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2901 -sharedFolderName]): new method.
2902 ([SOGoMailAccount -otherUsersFolderName]): new method.
2904 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
2905 new javascript code and the new UIxMailAccountActions class.
2907 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
2908 javascript code and the new UIxMailAccountActions class.
2910 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
2911 new javascript code and the new UIxMailAccountActions class.
2913 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2914 -listMailboxesAction]): new method that returns a json-formatted
2915 tree of all the mailboxes available to the current user.
2917 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
2918 web actions related to the handling of mail accounts.
2920 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
2923 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
2924 -jsonRepresentation]): new interface method meant to be overriden
2925 by the primitive classes.
2927 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2929 * UI/MailerUI/UIxMailSplashView.m: removed.
2931 * SoObjects/Appointments/SOGoCalendarComponent.m
2932 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
2933 the uid to the list only when the user email is recognized by the
2936 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2938 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2939 -isDeletionAllowed]): completed method with the new imap acl api.
2941 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
2944 * SoObjects/SOGo/SOGoPermissions.m: added the new role
2945 "SOGoMailRole_MessageEraser".
2947 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
2948 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
2949 "defaultUserID" method into account.
2951 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
2952 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
2953 "defaultUserID" method into account.
2955 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
2956 methods to support the IMAP acls mentionned in the RFC 4314,
2957 removed the ones specific to Cyrus.
2959 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
2960 mandatory method for subclasses. Removed the SOGoDefaultUserID
2963 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
2964 overriden method to return @"<default>".
2966 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2967 -defaultUserID]): overriden method to return @"<default>".
2969 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2970 -aclsForUser:uid]): overriden method.
2971 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
2972 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
2973 ([SOGoMailFolder -defaultUserID]): overriden method.
2974 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
2976 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2978 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2979 -aclUsersForObjectAtPath:objectPathArray]): new method that being
2980 forwarded the calles to aclUsers for the GCS-based subclasses of
2983 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
2984 methods that would have been used to support IMAP acls. Replaced
2985 them with the new protocol for them that has been implemented in
2986 SOGo during the last few weeks.
2988 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2989 -hasSupportForDefaultRoles]): override method by returning "YES".
2991 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2992 -addObjectUniquely:object]): new method with an explicit name.
2994 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
2995 "acl" to "aclUsers". Now designed to return only the uid of the
2996 users involved in an ACL.
2997 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
2998 "NO" by default. To indicate to the acl editor that we don't want
2999 to handle a default user.
3001 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
3002 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
3005 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
3006 provides a view to the IMAP acls.
3008 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
3010 * UI/WebServerResources/MailerUI.js: replaced all invocations of
3011 addEventListener to the use of prototype's Event object. Also,
3012 configured all menus programmatically following descriptions lists
3013 containing their callbacks, or nulls, submenus id or separators.
3015 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3017 * UI/Common/UIxObjectActions.m ([UIxObjectActions
3018 -addUserInAclsAction]): save the previous roles of the user
3019 (unlikely) or the default roles, or None instead of saving the
3020 roles that should appear the first time in the role editor when no
3021 default has been set...
3023 * SoObjects/SOGo/SOGoObject.m: defined a new constant
3024 "SOGoDefaultUserID".
3026 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3027 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
3028 ignore the "AuthorizedSubscriber" role and add the "None" role
3029 when no other role is found.
3031 * UI/Common/UIxAclEditor.m: added a button for the new default
3034 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
3035 -_initRights]): don't take the "None" role into account when
3036 initializing the list of current roles.
3038 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
3041 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3043 * SoObjects/SOGo/NSString+Utilities.m ([NSString
3044 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
3045 There is no need to subscract the start from the length if a space
3046 is not found since the range has not changed either. Finally, the
3047 first character before the url might also be a tab or a cr, so we
3048 match it against the "urlAfterEndingChars" custom NSCharacterSet.
3049 ([NSString -stringByDetectingURLs]): modified to handle email
3050 addresses and add a correct "mailto:" link.
3052 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3054 * SoObjects/Appointments/SOGoAppointmentFolder.m
3055 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
3056 method to return the events in the range of 2 weeks ago up to 4
3059 * UI/MailPartViewers/UIxMailPartTextViewer.m
3060 ([UIxMailPartTextViewer -flatContentAsString]): use the new
3061 "stringByDetectingURLs" method to offer clickable urls.
3063 * SoObjects/SOGo/NSString+Utilities.m ([NSString
3064 -stringByDetectingURLs]): this new method replaces passive URLS
3065 with active ones for HTML resolution of the text.
3067 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3069 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3070 -asQPSubjectString:encoding]): simplified method.
3071 The headers indicates "utf-8" again thank to our fix in
3074 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
3077 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3079 * UI/Common/UIxObjectActions.m ([UIxObjectActions
3080 -removeUserFromAclsAction]): implemented this method which was
3081 missing and is required to remove users from ACLs.
3083 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3084 -subscribeAction]): folderDict was not autoreleased, resulting in
3087 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3088 -primaryFetchProfile]): when building with libFoundation, don't
3089 use the "propertyList" method from NSString. Rather, we convert
3090 the string to an NSData instance and passit as parameter to
3091 NSDeserializer. This way, we obtain a mutable dictionary rather
3092 than an immutable one.
3094 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
3095 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
3096 constant string "contentTypeValue".
3097 contentTypeValue is now set back to iso-8859-1 since NGMime
3098 converts extracts the data in that encoding.
3100 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3102 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
3103 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
3104 "bindFields" value is present in the user defaults, use the
3105 specified fields to find the dn of the user to bind.
3106 ([LDAPSource -allEntryIDs])
3107 ([LDAPSource -fetchContactsMatching:match])
3108 ([LDAPSource -lookupContactEntry:entryID])
3109 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
3110 bind and unbind the connection on each request.
3112 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
3114 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3115 -contactSearchAction]): simplified method to use the facilities
3116 provided by the LDAPUserManager. No longer takes care of the
3117 "ldap-only" url parameter since all requests are handled by the
3120 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3121 -primaryFetchProfile]): check that the value returned is not null
3122 before interpreting it.
3124 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
3125 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
3126 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
3127 system email is already present, remove it before adding it.
3129 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
3130 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
3131 loginToCheck is not empty.
3132 ([LDAPSource -fetchContactsMatching:match]): check that match is
3134 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
3136 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
3139 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3141 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
3143 ([SOGoUser -systemEmail]): returns the email formed from the
3144 username and the default mail domain.
3145 ([SOGoUser -hasEmail:email]): test whether the user has the
3146 specified email, in a case-insensitive way.
3148 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3149 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
3150 check login information.
3152 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3153 ([SOGoContactLDAPFolder
3154 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
3155 no longer manage LDAP connections. The requests are forwarded to
3156 the relevant LDAPSource instead.
3158 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3159 -appendSystemSources]): pass LDAPSource objects to
3160 SOGoContactLDAPFolder instances.
3162 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
3163 address of the "from" field before sending the message. Otherwise,
3164 sending the mail won't work.
3166 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
3167 rewrote this method to request all the available email identities
3168 for the current user. Also, the from field also contains the full
3169 name of the user, not just his/her email address.
3171 * SoObjects/Appointments/SOGoCalendarComponent.m
3172 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
3173 from the previous module iCalEntityObject+Agenor.
3174 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
3175 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
3178 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
3179 replacing the SOGoContactLDAPEntry module. It was renamed as such
3180 because it now receives a dictionary instead of an NGLdapEntry.
3181 It thus can now handle data from any source of LDIF data, not
3182 only coming from LDAP.
3184 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
3185 implementing most of what used to be the AgenorUserManager class.
3186 The difference is that users are cached in the forme of
3187 dictionaries and many sources are used. Also, it can be used to
3188 search LDAP contacts.
3190 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
3191 the concept of "ldap source", to be used by all the classes
3192 needing access to LDAP-provided information: addressbooks and the
3193 user manager. Most the method thereing are transcriptions of
3194 methods previously found in SOGoContactLDAPFolder. It also contain
3195 utility methods for user matching and authentification.
3197 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
3198 module, rendered useless by code refactoring.
3200 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
3201 with the freshly written "LDAPUserManager".
3203 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3205 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
3206 SOGOContactLDIFEntry.
3208 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
3209 module, obsoleted by code in SOGo/LDAPSource.[hm].
3211 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3213 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
3214 new method with an explicit name.
3216 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3218 * SoObjects/Appointments/SOGoCalendarComponent.m
3219 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
3220 replacing "isOrganizer:orOwner:" by taking only one instance of
3221 SOGoUser as parameter.
3222 ([SOGoCalendarComponent -participant:user]): new method replacing
3223 the previous "isParticipant" boolean method by returning the first
3224 participant matching the user passed as parameter. This method is
3225 used so that both the regular email address and the "system email
3226 address" of the user are matched against the participants emails.
3228 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3229 -getSystemEMailForUID:uid]): new method that returns the email
3230 formed with the user's uid and the default mail domain.
3232 * SoObjects/Appointments/SOGoCalendarComponent.m
3233 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
3234 was previously commented out.
3236 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
3237 forwared to [AgenorUserManager getSystemEmailForUID:].
3239 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3240 -toolbar]): method replacing the one with the same name in the
3241 task and appointment editor classes. This method makes also use of
3242 the new method "isOrganizerOrOwner:" and "participant:" in
3243 SOGoCalendarComponent.
3245 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3246 -toolbar]): removed method, replaced with a method with the same
3247 name in UIxComponentEditor.
3249 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
3250 method, replaced with a method with the same name in
3253 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3254 -primaryFetchProfile]): the values returned from the database are
3255 converted to a put dictionary first, since the dictionary returned
3256 is actually an immutable one, which can cause a crash afterwards.
3258 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3260 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
3261 and "SOGoRole_ObjectEditor".
3263 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
3264 -prepareRightsForm]): this method is no longer mandatory.
3266 * UI/Contacts/UIxContactsUserRightsEditor.m
3267 ([UIxContactsUserRightsEditor
3268 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
3269 module to handle acls related to the address books. Partial
3272 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3273 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
3276 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
3277 specified roles from cache.
3278 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
3279 put resulting roles in cache.
3281 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
3282 initWithName:inContainer:. Instead, directly initialize the ivars
3283 as it is supposed to be to avoid an infinite loop whenever one of
3284 those two methods are overriden.
3286 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
3289 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3290 -aclsForUser:uid]): override method so that SOGo won't crash when
3291 loading the contact card.
3293 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3295 * SoObjects/Appointments/SOGoAppointmentFolder.m
3296 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
3297 "freebusy" special user should only require opaque elements.
3299 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3301 * SoObjects/Appointments/SOGoAppointmentFolder.m
3302 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
3303 our double declaration where the resulting XML would be screwed.
3304 There is only one collection per namespace.
3306 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
3307 rfc822DateString]): new method that returns a string conform to
3308 rfc 822 and suitable for email headers.
3310 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
3311 "rfc822DateString" category method on the date we put in the
3314 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3316 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
3317 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
3318 which should never be overriden.
3319 ([UIxUserRightsEditor -appendRight:newRight])
3320 ([UIxUserRightsEditor -removeRight:right])
3321 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
3322 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
3323 methods that can be used by the subclasses.
3324 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
3325 mandatorily be overriden to prepare the elements of the subclassed
3327 ([UIxUserRightsEditor -updateRights]): new method that should
3328 mandatorily be overriden to update the user rights from the
3329 elements of the subclassed form.
3331 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
3332 check if the uid is already listed before adding it to our array.
3333 This is because the acl table can contain more than one record per
3334 user/object relationship.
3336 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3337 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
3338 "roles" parameter is now an NSArray instead of a string. Therefore
3339 we loop throughout the array to populate the table. All the
3340 relevant records are removed prior to the addition of the new
3343 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
3344 -aclsForUser:uid]): new override that returns nil until we add
3345 support for IMAP acls.
3347 * SoObjects/Mailer/SOGoMailAccounts.m
3348 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
3350 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3351 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
3353 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3354 -aclsForUser:uid]): override this method which will always return
3357 * SoObjects/SOGo/SOGoPermissions.[hm]: added
3358 [Public,Private,Confidential]
3359 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
3360 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
3361 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
3363 * SoObjects/Appointments/SOGoAppointmentFolder.m
3364 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
3365 that defines default roles for new elements in the acl.
3367 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
3368 module and subclass of UIxUserRightsEditor specific to the
3369 handling of user rights on calendar folders.
3371 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3373 * SoObjects/Appointments/SOGoAppointmentFolder.m
3374 ([SOGoAppointmentFolder -groupDavResourceType]): return both
3375 "vevent-collection" and "vtodo-collection".
3377 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
3378 that implements the detailed editor of user rights per-object.
3380 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3382 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3383 -rolesForObject:objectinContext:context]): no longer query objects
3384 for "roleForUser:". Instead, all objects should implement
3387 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
3388 new method to comply with the new acl "protocol" in SOGoObject.
3389 Uses SOGoFolder's new facilities for ACLS.
3390 ([SOGoContentObject -aclsForUser:uid]): idem.
3391 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
3392 ([SOGoContentObject -removeAclsForUsers:users]): idem.
3394 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3395 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
3396 based folders. This method is derived from the code that was in
3397 UIxAclFolder before its removal.
3398 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
3401 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
3403 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
3404 ([SOGoFolder -setRoleForUsers:uidsto:role])
3405 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
3407 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
3408 that requires overriding by subclasses.
3409 ([SOGoObject -aclsForUser:uid]): idem.
3410 ([SOGoObject -defaultAclRoles]): idem.
3411 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
3412 ([SOGoObject -removeAclsForUsers:users]): idem.
3414 * UI/Common/UIxObjectActions.m: new module implementing the web
3415 actions common to SOGoObject and all its subclasses.
3416 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
3417 user with the clientObject defaults user rights to the object's
3420 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
3421 to the point where it will only list the users (and their name)
3422 associated with an object acl.
3424 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
3425 methods have been moved into SOGoObject and SOGoFolder during a
3428 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3429 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
3430 method made useless by the programmatic handling of iCalendar
3432 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
3433 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
3434 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
3436 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
3437 drop on all folder nodes, not just on leaves.
3439 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3440 ([SOGoContactLDAPFolder
3441 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
3443 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3445 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
3446 debugging facilities when the SOGoDebugObjectAllocation user
3449 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3451 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
3452 method that SOGo will need with non-gnustep Foundation
3454 ([NSString -stringByAppendingPathComponent:component]): new method
3455 that SOGo will need when building with libFoundation. Method
3456 removed later since it is available from
3457 Foundation/NSPathUtilities.h.
3459 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
3462 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
3463 every subclass to access [WOApplication context] without having to
3464 invoke it more than once.
3466 * SoObjects/Appointments/SOGoCalendarComponent.m
3467 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
3468 moved method from SOGoTaskObject and SOGoAppointmentObject up to
3471 * UI/Scheduler/UIxCalSelectTab.m: removed module.
3473 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3475 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
3476 -vCard]): test the prefix of the card in a case-independent way.
3478 * OGoContentStore/OCSContactFieldExtractor.m
3479 ([OCSContactFieldExtractor
3480 -extractQuickFieldsFromContent:content]): we no longer accept
3481 records in a format other than versit vCard so we can get rid of a
3484 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3486 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3487 -selectorComponentClass]): restored method.
3489 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3491 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
3492 -shouldDisplayCurrentTask]): the current task is not displayed if
3493 it is NOT completed or if the "showCompletedTasks" flag is set.
3494 The logic was inverted in Lightning and is now in SOGo too.
3496 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3498 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
3499 want the "work" url instead of the "home".
3501 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3502 -_saveSnapshot]): save url values from snapshot.
3503 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
3505 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3506 -calendarList]): new method replacing "availableCalendars".
3508 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
3509 -calendarFolders]): we now take the list of subscribed calendar
3512 * SoObjects/Appointments/SOGoAppointmentFolder.m
3513 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
3514 method derived from and replacing [UIxCalView calendarFolders].
3516 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3518 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3519 -toManyRelationshipKeys]): don't put the predefined folders in the
3520 list if they are returned by the server.
3522 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
3523 longer store the "flattenedBlocks" in a dictionary since the
3524 object will be deleted anyway and we don't need to put the folders
3527 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3528 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
3529 attachment path into account when computing the part urls.
3531 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3533 * UI/Contacts/UIxContactsListViewContainer.m
3534 ([UIxContactsListViewContainer -additionalFolders]): take the list
3535 of subscribed folders from the new property list used for the user
3536 settings. The value of its key is SubscribedFolders for the
3537 dictionary entry named "Contacts".
3539 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3540 -canAccessContentAction]): new method to override the one from
3541 UIxFoldersActions by taking into account the fact that, this time,
3542 the clientObject is an ldap folder. Removed many method that used
3543 to be related to the handling of the user selector.
3545 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
3546 to make sure they can be removed.
3548 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
3549 populate the calendar entries based on the user settings plist.
3551 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3552 -selectForMailerAction]): restored method.
3554 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
3555 from a simplified version of the old UIxContactEditor (removed).
3557 * UI/Contacts/UIxContactsUserFolders.m: new template module for
3558 selecting users or user folders through an LDAP search of which
3559 the results are displayed as a tree.
3561 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
3562 method "onContactAdd" here since the Mailer is now the only module
3563 to use it when composing emails.
3565 * UI/WebServerResources/generic.js: added code for handling the
3566 new scheme used for describing SOGo folders, common code to handle
3567 folder addition or removal.
3569 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3570 -activateFolderAction]): new method that change the "active"
3571 settings in the folder-related fields in the user settings.
3572 ([UIxFolderActions -deactivateFolderAction]): see above.
3574 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3575 -checkRightsAction]): removed method.
3577 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3578 -updateAdditionalAddressBooksAction]): removed method.
3580 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3581 -updateCalendarsAction]): removed method.
3583 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3585 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3586 -checkRightsAction]): removed method.
3588 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3589 -canAccessContentAction]): new method designed to replace
3590 [UIxCalMainView checkRightsAction] in a more universal way.
3592 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3594 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3595 -roleOfUser:uidinContext:context]): take all the subkeys into
3596 account, not only the "personal" folder.
3598 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3599 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
3600 to the new components.
3602 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
3605 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3606 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
3607 field of the sogo_user_profile table, where the user-customizable
3608 changes will be saved.
3609 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
3610 similar to the one above, using the "settings" field where the
3611 automatic settings will be saved.
3613 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
3614 module to bind the userdefaults to a property list contained in a
3615 specified field of the sogo_user_profile table.
3616 ([AgenorUserDefaults
3617 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
3618 added a "fieldName" parameter.
3620 * UI/Common/UIxFolderActions.m: new module implementing web
3621 actions common to all GCS-based folders.
3623 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3625 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
3626 put a carriage return after the day name.
3628 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3629 -readFreeBusyAction]): restored method.
3631 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3633 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3634 -defaultAction]): remade module to redirect automatically to the
3637 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
3639 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3641 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3642 -deleteAction]): new web method to delete personal addressbook
3645 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3646 -delete]): override method to refuse the deletion of the folder if
3647 its nameInContainer is "personal".
3649 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
3650 that forwards the deletion request to the folder manager.
3652 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3654 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
3655 -zoomList]): new method that returns the list of available zoom factors.
3657 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3658 -changeStatusAction]): rewrote method.
3660 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3661 -_handleAttendeesEdition]): make sure "attendeesNames" has a
3662 length > 0 before computing the attendees. Otherwise there will be
3663 an invalid empty entry.
3664 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
3665 organizer when there are attendees and remove it when the
3666 attendees are removed.
3668 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3670 * UI/Scheduler/UIxAttendeesEditor.m): new component.
3672 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
3673 the task and appointment editors. Now a container component
3674 handling the common elements of tasks and events.
3676 * UI/Scheduler/UIxTaskEditor.m: same as below.
3678 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
3679 a subclass of UIxComponentEditor but a subcomponent of it.
3681 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
3682 toolbar can have the special value "none" to indicate there is
3683 none attached to the window.
3685 * SoObjects/Appointments/SOGoCalendarComponent.m
3686 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
3688 ([SOGoCalendarComponent -isParticipant:email]): new method.
3689 ([SOGoCalendarComponent -calendar:create]): takes one parameter
3690 "create" which is a boolean indicating whether we want to create
3691 the calendar if it does not exist.
3693 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3695 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
3696 of a table, the same way the dayly and weekly views have been for
3699 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
3701 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
3704 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
3705 property to point at the user folder
3707 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3709 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3710 -userInContext:]): returns "SOGoUser".
3712 * SoObjects/Appointments/SOGoCalendarComponent.m
3713 ([SOGoCalendarComponent -contentAsString]): overriden method that
3714 takes the privacy into account and discard the relevant fields if
3715 needed by generating a new content string and caching it.
3716 ([SOGoCalendarComponent
3717 -saveContentString:contentStringbaseVersion:baseVersion]): if the
3718 new method above has cached a content string, release it and set
3719 it to nil so that it will have to be regenerated in the case it is
3721 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
3722 discard the fields that have to be hidden when the card is
3725 * SoObjects/Appointments/SOGoAppointmentFolder.m
3726 ([SOGoAppointmentFolder
3727 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
3728 sure the cards are now handled as instances of
3729 SOGoCalendarComponent instead of SOGoContentObject so that their
3730 content string is taking the privacy classifiction into account.
3731 ([SOGoAppointmentFolder -_privacySqlString]): new method that
3732 generates a query to determine what information can be given and
3733 if the card itself has to be shown.
3735 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3736 -getICalPersonsFromValue:selectorValue]): removed useless
3737 "isAccessRestricted" method.
3739 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3740 -setStyle:_style]): test whether the values of orgmail and
3741 partmails are null before manipulating them, otherwise SOGo sends
3742 a "rangeOfString:" message to an NSNull, which makes it crashes.
3744 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3745 -extractQuickFieldsFromEvent:_event]): we now use the new
3746 "symbolicAccessClass" method from iCalEntity to determine the
3747 value of the "classifiction" field.
3748 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
3751 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3753 * SoObjects/Appointments/SOGoAppointmentFolder.m
3754 ([SOGoAppointmentFolder
3755 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
3756 see below, the query is adapted consequently.
3758 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3759 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
3760 renamed to "classification" and can any integer as value.
3761 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
3764 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3766 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3767 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
3768 don't prepend anything to the class and id named. Instead, we
3769 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
3772 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3774 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
3775 -rolesOfUser:logininContext:context]): if object does not exists
3776 (for example when it's being created), the current user has the
3777 same rights on it than he/she has on its parent container.
3779 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3780 -nameExistsInFolder:objectName]): methods that tests if a c_name
3781 corresponding to the name passed as parameter is present in the db
3784 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3786 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3787 -rolesForObject:objectinContext:context]): test for
3788 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
3790 * SoObjects/Appointments/SOGoCalendarComponent.m
3791 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
3792 returns the roles of the user on the container object if the event
3795 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3797 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
3798 alternativeViewer a multipart/related message is being handled.
3800 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
3803 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
3804 text/html component before text/plain.
3806 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3807 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
3808 fetching of HTML parts.
3810 * SoObjects/Appointments/SOGoCalendarComponent.m
3811 ([SOGoCalendarComponent -componentTag]): new template method that
3812 returns the vcalendar tag of the current object.
3813 ([SOGoCalendarComponent -component]): new method that returns the
3814 first object matching [self componentTag] within the current
3815 calendar object. This method replaces 'firstEventInCalendar:' as
3816 well as "firstTaskInCalendar:".
3817 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
3818 moved method from SOGoAppointmentObject.m.
3820 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3822 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
3823 module which shows each selected user's calendar in a different
3824 column instead of mixing their events together.
3826 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
3827 replaced use of [NSString stringByTrimmingWhiteSpaces] with
3828 [NSString stringByTrimmingSpaces].
3830 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
3831 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
3834 * UI/Scheduler/UIxCalDayOverview.m,
3835 UI/Scheduler/UIxCalDayChartview.m,
3836 UI/Scheduler/UIxCalDayListview.m,
3837 UI/Scheduler/UIxCalWeekOverview.m,
3838 UI/Scheduler/UIxCalWeekChartview.m,
3839 UI/Scheduler/UIxCalWeekListview.m,
3840 UI/Scheduler/UIxCalInlineMonthOverview.m,
3841 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
3843 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3845 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3846 -appendPersonalSourcesInContext:context]): release connectoin
3847 channel when everything is done.
3849 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3850 -newAbAction]): new action method to crate a new contact folder
3853 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
3854 that requests the folder manager to create a folder table with the
3855 specified type at the specified path. The type is taken from [self
3858 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3859 -folderType]): implemented.
3861 * SoObjects/Appointments/SOGoAppointmentFolder.m
3862 ([SOGoAppointmentFolder -folderType]): implemented.
3864 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3865 -appendPersonalSourcesInContext:context]): we now fetch all
3866 folders with type "Contact" that belong to the current user.
3867 ([SOGoContactFolders -newFolderWithName:name]): new method to
3868 create a new contact folder.
3870 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
3871 resulting url with [NSString+Utilities hostlessURL] instead of
3872 using NSURL. This is because the url in question sometimes has a
3873 hostname and sometimes not. "hostlessURL" ensure the hostname is
3875 ([UIxComponent -applicationPath]): same as above.
3877 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
3879 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
3880 folders before doing the one on messages.
3882 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3884 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
3885 makeObjectsPerform:withObject:withObject: for GNUstep
3888 * OGoContentStore/GNUmakefile, Protocols/common.make,
3889 SoObjects/common.make, UI/common.make: install in
3890 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
3892 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
3894 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
3897 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3899 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
3900 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
3903 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3904 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
3905 password would be accepted anyway as long as its length was > 0.
3906 This can be the case ONLY when LDAP is disabled otherwise we have
3907 a serious security issue...
3909 * SoObjects/Appointments/SOGoAppointmentObject.m
3910 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
3911 user is not an organizer nor a participant, he is declared as
3912 "Owner" if he owns the calendar the entry where the entry is
3913 contained. Other cases should not be possible.
3915 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3917 * UI/Contacts/UIxContactEditor.m: display and handle the new
3920 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3921 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
3924 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3925 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
3928 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3930 * SoObjects/Appointments/SOGoCalendarComponent.m
3931 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
3932 returns the value of ud "SOGoAppointmentSendEMailNotifications"
3934 ([SOGoCalendarComponent
3935 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
3937 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3939 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3940 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
3941 so that the mailbox cache is refreshed everytime the user presses
3942 on "get mail". I doubt a mailbox cache really is useful in general
3945 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3947 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3948 -userInContext:]): if the lookup is on "freebusy.ifb" and the
3949 username is "anonymous" the user is automatically set to
3952 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3954 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3955 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
3956 user with password "freebusy".
3958 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
3959 -contentAsString]): the default timerange is now 14 days before
3960 currentday and 1 month after.
3962 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3964 * SoObjects/Appointments/SOGoAppointmentFolder.m
3965 ([SOGoAppointmentFolder
3966 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
3967 escape the record string in a way suitable with XML encoding.
3969 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3971 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
3972 calendar view would not be updated properly.
3974 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3976 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3977 -newStartDate]): fix the handling of the component start date
3978 depending on the "hm" and the "day" parameters.
3980 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3981 -roleOfUser:uidinContext:context]): set role of current user to
3982 "Assistant" if the object that is accessed is "freebusy.ifb".
3984 * SoObjects/Appointments/SOGoAppointmentFolder.m
3985 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
3986 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
3987 ([SOGoAppointmentFolder
3988 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
3989 lookupCalendarFolderForUID: method, which doesn't do security
3992 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3994 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
3995 accessor that returns the comma-separated list of users with role
3997 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
3998 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
3999 "checkedUsers". Instead, each user is either classified in the
4000 list of assistants or the list of delegates.
4002 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4004 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
4005 -composeAction]): method imported from removed container modules.
4006 ([UIxMailMainFrame -mailFolderName]): method imported from removed
4009 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
4010 for wrapping UIxMailView with the "popupview" action.
4012 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
4013 since its the component that displays the same splash screen than
4014 the one in Thunderbird/Icedove.
4016 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
4017 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
4018 UI/MailerUI/UIxMailListViewContainer.[hm],
4019 UI/MailerUI/UIxMailViewContainer.[hm]: removed
4021 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4023 * UI/WebServerResources/HTMLElement.js: replaced the functional
4024 selectNode() and deselectNode() functions with select() and
4025 deselect() methods of HTMLElement.
4027 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
4028 events are initialized from here now instead of in the HTML code.
4030 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4031 -checkRightsAction]): new method similar to the one with the same
4032 name in UIxCalMainView.m.
4034 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
4035 code to handle the publishing of freebusy information.
4037 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4039 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4040 -checkRightsAction]): new action method that returns a
4041 comma-separated list of boolean values matching the right of the
4042 current user to "view" (as a permission) each foreign calendar
4043 stored in his preferences.
4045 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
4046 new method that sets a customOwner, which can be returned with
4047 ownerInContext it set.
4049 * SoObjects/Appointments/SOGoAppointmentFolder.m
4050 ([SOGoAppointmentFolder
4051 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
4053 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4055 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
4056 below, but for the Contacts and Calendar collections.
4058 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
4059 new acl facilities method from sope-gdl/GCSFolder.m.
4061 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
4062 -roleOfUser:uidinContext:context]): new method that returns
4063 SOGoRole_Assistant when the user is an assistant or a delegate on
4064 the "personal" ab object. This is so that setting roles on the
4065 SOGoContactFolders object is not required.
4067 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4069 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
4071 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
4072 to the handling of the user selection for the acls.
4074 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
4075 values from SoPermissions with ones specific to SOGo.
4077 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
4078 handles the storage for the acls.
4080 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
4081 class for SOGoAppointmentObject and SOGoTaskObject.
4083 * UI/Common/UIxAclEditor.[hm]: new component that provides a
4084 general editor for folder acls.
4086 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
4088 ([NSString -davMethodToObjC]): method that returns the method name
4089 for a DAV property implementation.
4091 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
4093 ([NSArray -stringsWithFormat:format]): new method that returns
4094 formatted occurences of the strings stored in the array.
4096 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
4097 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
4098 subclass module of SoWebDAVValue that supports collections of
4099 properties of the same type.
4101 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4103 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
4104 -lookupFolder:ofClassNamed:inContext:]): added the ability to
4105 configure the name of the SOGoDraftFolders with the ud var
4106 "SOGoDraftsFolderName".
4108 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4110 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
4111 -userTimeZone:username]): new method that returns the timezone for
4112 the specified user depending on his preferences and the server
4115 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
4116 -stringForData:partInfo:]): take the encoding into account and
4117 translate the text to "normal" before processing the charset data.
4119 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4121 * UI/WebServerResources/generic.js: the progress indicator is on
4122 when loading the page so we turn it off, and we turn it back on
4123 whenever we switch to another module...
4125 * UI/WebServerResources/SchedulerUI.js: make sure the day view
4126 synchronization mechanism works everywhere.
4128 * UI/WebServerResources/generic.js: the log window is not only
4129 visible when UIxDebugEnabled is set.
4131 * UI/WebServerResources/SchedulerUI.js: the month overview's day
4132 cells are now initialized with the DOM event interface methods
4133 instead of with html attributes.
4135 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
4136 headers (should be made configurable at some point)...
4138 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
4139 "not null" constraint on startdate, enddate, isopaque,
4140 participants and partmails.
4142 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4144 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
4145 -hoursToDisplay]): prevent a crash by retaining the
4146 "hoursToDisplay" array after it's created.
4147 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
4148 clickable hours DIV.
4150 * UI/WebServerResources/SchedulerUI.js: made the event
4151 participation status modification asynchronous, which also fixes a
4152 bug where the window would sometimes close before the accept or
4153 decline action was completed. Also, adapted the event handling
4154 related to the days or weeks view with the new DIV-based layout.
4156 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
4158 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
4159 DIV-based presentation of the days and weeks.
4161 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
4163 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
4164 might return an exception so we have to handle it if we don't
4167 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4169 * UI/WebServerResources/SchedulerUI.js: updated the list
4170 initialization code to use the new event management scheme, adding
4171 what was missing to be able to delete events and tasks again.
4173 * UI/WebServerResources/MailerUI.js: added code to activate the
4174 "Get mails" button. Fixed a bug which prevented messages to be
4177 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
4178 navigation and focus handling of INPUTs.
4180 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4182 * UI/WebServerResources/MailerUI.js: added code to handle the
4183 possible drag and drop events to manager in the mail module.
4184 Moving messages, opening parent folders, ...
4186 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
4187 the drag and drop manager as well as the interface to HTMLElement
4188 to trigger drag and drop events.
4190 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
4191 action to move the current message to the mailbox named after the
4192 value of parameter "tofolder".
4194 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
4195 -moveToFolderNamed:folderNameinContext:]): new method base on
4198 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4200 * UI/WebServerResources/generic.js: added and activated many
4201 "load" handlers to configure generic widgets used across the
4202 modules. More events are now handled in a DOM-fashion way instead
4203 of by setting the relative attributes in the templates.
4205 * UI/Templates/UIxSortableTableHeader.wox: all the events are
4206 declared from the javascript DOM onload handlers.
4208 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
4211 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
4212 declared from the javascript DOM onload handlers.
4214 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
4215 we want everything to be separated from each other, as much as
4218 * UI/WebServerResources/SOGoDragHandles.js: new module containing
4219 the "SOGoDragHandlesInterface", implementing methods that can be
4220 attributed to DIV so that they can be used as drag handles.
4222 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
4223 -asQPSubjectString]): initialize the tmp strings with '0' to make
4224 sure they don't contain garbage.
4226 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4228 * UI/WebServerResources/MailerUI.js: register the messageList
4229 table as a dragging source and the leaf of the navigation tree as
4230 dnd destinations to the DNDManager.
4232 * UI/WebServerResources/generic.js: initialize tabs from the
4233 "unload" event listener that is added programmatically instead of
4234 from the template... Also, added the new DNDManager object.
4236 * UI/WebServerResources/HTMLTableElement.js: added code to
4237 simulate XUL drag n drop events. This code will possibly be moved
4238 to HTMLElement.js instead later...
4240 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4241 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
4244 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4245 -_qualifierForFilter:filter]): only search records which starts
4246 with the specified pattern.
4248 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4250 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
4251 -asQPSubjectString]): new method that returns the special QP
4252 string with its qp declaration for email subjects.
4253 ([SOGoDraftObject -bodyPartForText])
4254 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
4255 double-encode data in UTF-8.
4257 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4258 -newStartDate]): new method to determine the start date depending
4259 on the URL parameters, the current day and the current time.
4260 ([UIxComponentEditor -toolbar]): new method to determine the
4261 filename of the toolbar that should be drawn depending on the
4262 ownership and the list of attendees of the task/event wrt to the
4265 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4266 -setDayStartHour:aStartHour]): adjust the minutes to the next
4267 quarter of hour, if not already set to a quarter.
4269 * UI/WebServerResources/UIxAppointmentEditor.js,
4270 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
4273 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4275 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4276 -loadValuesFromComponent:component]): handles access class
4277 (privacy) and status.
4279 * UI/Contacts/UIxContactsListViewContainer.m
4280 ([UIxContactsListViewContainer -additionalFolders]): return nil if
4281 [self additionalAddressBooks] returns an empty string.
4283 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4285 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
4286 rangesOf7Days]): enhanced and debugged algorithm to feed the array
4287 with slices where the first day is still in the requested month.
4289 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
4292 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
4293 of events in the day boxes of the calendar's monthly view.
4295 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
4296 -davContentType]): declare "text/calendar".
4298 * SoObjects/Appointments/SOGoAppointmentObject.m
4299 ([SOGoAppointmentObject -davContentType]): declare
4302 * SoObjects/Appointments/SOGoAppointmentFolder.m
4303 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
4304 HTTP methods are handled by SOPE and requires nil to be returned,
4305 this method now invokes the new
4306 "requestNamedIsHandledLater:inContext:" method to check that.
4307 ([SOGoAppointmentFolder
4308 -requestNamedIsHandledLater:nameinContext:context]): new methods
4309 that returns "YES" only for the "OPTIONS" http method (for now...).
4310 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
4311 overloaded method to append the "access-control" and
4312 "calendar-access" DAV abilities to the initial declaration.
4314 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
4315 imitate the look of Sunbird/Lightning's monthly view.
4317 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
4318 UIxCalMonthViewOld.[hm].
4320 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4322 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
4323 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
4325 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
4326 returns an image name based on the participation status of the
4329 * UI/WebServerResources/SchedulerUI.js: same strip down as for
4332 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
4333 ([UIxContactsListViewContainer -additionalFolders])
4334 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
4335 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
4336 methods to handle the external addressbooks a user has subscribed
4337 too, by retriving them from his preferences.
4339 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4340 -updateAdditionalAddressBooksAction]): new method that updates the
4341 user settings with the list of addressbook he has subscribed to.
4343 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
4344 module for the address book selector.
4346 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
4347 a toolbar with two buttons ("add" and "remove") to manage the
4348 additional addressbooks a user might subscribe to.
4350 * UI/WebServerResources/ContactsUI.js: added code to handle
4351 "external addressbooks" from the Javascript point-of-view, by
4352 extending existing methods and adding code for the "add ab" and
4353 "remove ab" buttons.
4355 * UI/WebServerResources/generic.js: moved extensions methods to
4356 DOM elements to separate files for better clarity.
4358 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
4359 new method that returns "pageContent" as class, but also "popup"
4360 for the DIV where the page content lies, so that we can manipulate
4361 the content of popup's with CSS identifiers.
4363 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4365 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4366 -displayStyle]): new method that returns a string containing the
4367 css style relative to the current appointment cell. This code is
4368 currently inactive but might be reused later.
4370 * UI/WebServerResources/SchedulerUI.js: added code to handle the
4371 display of the selected day (the day pointed by the mouse, or the
4372 current day when changing the view).
4374 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
4375 -dayCellClasses]): new method that returns a string containing the
4376 css classes applicable to the current cell, depending on the
4377 position of the day in the week, the day of today and the
4380 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
4381 -currentContactAptBorder]): new method that returns the
4382 appropriate border color for the specified user.
4384 * SoObjects/Appointments/SOGoAppointmentObject.m
4385 ([SOGoAppointmentObject
4386 -saveContentString:contentStringbaseVersion:baseVersion]):
4387 overloaded method that parse new events and detects if they have
4388 an organizer or not. If they are new and have no organizer set
4389 (Sunbird/Lightning...), the owner of the event is set as
4392 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
4393 category that provides facility methods and interfaces to the
4396 * SoObjects/Contacts/product.plist: give full access to ANY
4397 authenticated user, not just the owner (to every objects...).
4399 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4401 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
4402 every replica widgets are declared as such to their master
4403 counterpart. Take the days into account when displaying the time
4404 range taken by the appointment.
4406 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
4407 -getICalPersonsFromValue:selectorValue]): method taken from
4408 UIxFreeBusyUserSelector, that is shared both by
4409 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
4411 * SoObjects/Appointments/SOGoAppointmentFolder.m
4412 ([SOGoAppointmentFolder
4413 -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.
4415 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
4416 derived and taken as a subset of UIxFreeBusyUserSelector that
4417 implements the table part of the FreeBusy view. Most of the
4418 methods of UIxFreeBusyUserSelector relative to that table were
4419 moved into UIxFreeBusyUserSelectorTable, which can also be used as
4420 a standalone view for AJAX operations.
4422 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4424 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4425 -vCard]): change reverted.
4427 * UI/Contacts/UIxContactEditor.m: check whether the client contact
4428 folder has selector "globallyUniqueObjectId" before calling that
4431 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4432 -vCard]): the "setVClass" NGVCard method really is "setClass"
4435 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4436 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
4437 request the "streetAddress" instead of the "streetaddress".
4438 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
4439 mails that *contain*, and not just *start with* the search
4442 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4443 -vCard]): mark address returned from LDAP as the work address.
4445 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
4446 span covered with the anchor, not only the textual information
4449 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
4450 argument (event or task) to newEvent in the appointmentListMenu.
4451 Make the appointmentsListView display the appointmentsListMenu.
4453 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
4454 12 to 50 before displaying "...".
4455 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
4456 if its length > 0, whether location itself is nil or not...
4457 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
4458 of which the length > 0.
4460 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4462 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
4463 french and ISO dates.
4465 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
4466 from UIxContactSelector to handle contact lists (current and
4467 additional contacts).
4469 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4470 -_freeBusyAsText]): added handling of an "additional"-named query
4471 parameter that describe the number of additional days after
4472 enddate that should be returned.
4474 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4475 -_responseForResults:results]): give priority to results with
4476 "c_uid" fields. If none returned, use the first contact received.
4478 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4479 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
4480 2 and "CANCELLED" to 0.
4482 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4484 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
4485 of start and end dates to short string dates.
4487 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4488 -readFreeBusyAction]): new method that returns an array of numbers
4489 corresponding to the state in the freebusy of each "quarter of an
4490 hour" between the "sday" and "eday" date parameters passed in the
4491 url. This permits to handle the display of the freebusy with Ajax
4493 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
4494 since the free busy displays 2 days ahead.
4496 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4497 -contactSearchAction]): new action that returns the uid and the
4498 username + email of the user whose name contain the value of the
4499 "search" url parameter.
4501 * SoObjects/Appointments/SOGoAppointmentFolder.m
4502 ([SOGoAppointmentFolder
4503 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
4504 useful for the computing of the status of the freebusy.
4506 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
4507 -init]): new component that incarnates a user selector for events
4508 inspired by the new one found in Thunderbird Lightning.
4510 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4512 * UI/WebServerResources/generic.js: added code to enable or
4513 disable anchor visually (following our internal algorithm).
4515 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
4516 added new "url" ivar with its classic accessors.
4517 ([UIxComponentEditor -urlButtonClasses]): new method that returns
4518 the class strings for the url button on the appointment/task
4519 editor (depending on the validity of the url).
4521 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
4522 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
4523 the template to match the Lightning's new task/appointment editor.
4525 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
4527 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
4529 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4531 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4532 ([SOGoContactLDAPFolder
4533 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
4535 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
4536 iCalEntityObject instances instead of just iCalEvent's.
4538 * SoObjects/Appointments/SOGoAppointmentFolder.m
4539 ([SOGoAppointmentFolder
4540 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
4542 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
4543 bad way of handling ownership that way.
4545 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4546 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
4547 on "cn", just like Mozilla.
4549 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4551 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
4552 "to" should be retained, otherwise it will be autoreleased and a
4555 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4556 -writeAction]): updated method to fetch the card before initing
4559 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4560 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
4563 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
4564 -iCalStringTemplate]): start and due date are now optional.
4566 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4567 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
4568 appropriate accessors to be settable through the templates.
4570 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
4571 new "isDisabled" ivar with appropriate accessors to be
4572 settable through the templates.
4574 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4575 -availableCalendars]): new method that list the calendars to which
4576 the user has subscribed.
4577 ([UIxComponentEditor -componentOwner]): returns the owner of the
4580 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4581 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
4582 quickentries to null whenever each or all of them are null, by
4583 providing an impossible timestamp from with NSNotFound as value.
4585 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4587 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
4588 that handles the creation of new fields with the new APIs and the
4589 new node structure on the page.
4591 * UI/Scheduler/UIxAppointmentEditor.m,
4592 UI/Scheduler/UIxTaskEditor.m:
4593 refactored to user UIxComponentEditor as parent class.
4595 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
4596 containing the methods common to the UIxTaskEditor and the
4597 UIxAppointmentEditor.
4599 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4601 * SoObjects/Appointments/SOGoAppointmentFolder.m
4602 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
4603 the handling of time-ranges.
4605 * UI/WebServerResources/ContactsUI.js: specify a notification type as
4606 parameters when onConfirmContactSelection in invoked.
4608 * UI/WebServerResources/generic.js: specify a notification type as
4609 parameters when onContactRemove in invoked.
4611 * UI/WebServerResources/SchedulerUI.js: when the user deselects
4612 all calendars, select his entry.
4614 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4616 * UI/WebServerResources/SchedulerUI.js: edit and delete events
4617 with their owner-relative urls. Generate a correct entry in the
4618 css color table when a user is added to the calendars list. Put
4619 the same color next to the user id.
4621 * UI/WebServerResources/generic.js: implemented some new helper
4624 * SoObjects/Appointments/SOGoAppointmentFolder.m
4625 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
4626 entries if their owner is not the current user.
4628 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4629 -displayClasses]): return the correct class for the current event
4630 representation depending on its owner.
4632 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
4633 and associate a color for each user login depending on its
4634 position in the list.
4636 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
4637 -currentRowCSSClass]): return the correct class for the current
4638 row depending on the owner of the event.
4640 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4641 -setColors:colors]): new method to associate a color table with
4642 each user in the list.
4644 * SoObjects/Appointments/SOGoAppointmentFolder.m
4645 ([SOGoAppointmentFolder
4646 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
4648 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
4649 NSObject to associate an instance with a user.
4651 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4653 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
4656 * UI/WebServerResources/ContactsUI.js: added handling of
4657 notification of changes to contact selectors.
4659 * UI/WebServerResources/generic.js: added handling of notification
4660 of changes to contact selectors.
4662 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4663 -updateCalendarsAction]): proxy method to update the user
4664 preference table with the new selected calendar uids.
4666 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
4667 -calendarsContactsAction]): new method.
4669 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
4670 ([UIxContactSelector -setHasCheckBoxes:aBool])
4671 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
4672 permit the drawing of checkboxes instead of card icons.
4674 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
4675 wrap a selector the the "Calendars" tab.
4677 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
4678 new user calendar selector.
4680 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4682 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
4683 may cover hour 0 to hour 23.
4685 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4686 -iCalStringFromQueryParameter:format:]): dates explicitly set to
4689 * UI/WebServerResources/SchedulerUI.js: manage both lists of
4690 objects wrt to the toolbar actions.
4692 * UI/WebServerResources/generic.js: added code to the "String"
4693 class to decode number-encoded char entities.
4695 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4696 -batchDeleteAction]): new method to delete selected entries in the
4699 * SoObjects/Appointments/SOGoAppointmentFolder.m
4700 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
4701 that delete identified entries in batch.
4703 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4704 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
4706 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
4707 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4708 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
4709 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4711 return a UIxJSClose component if everything went fine.
4713 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
4716 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
4717 UIxAppointmentEditor.m.
4719 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
4720 a very light page with javascript code to close a window, by
4721 calling a method on the opener if specified. This component is
4722 designed to work as a response to form postings.
4724 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4726 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
4727 SOGoAppointmentObject adapted for the handling of tasks.
4729 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
4730 extracted from SOGoAppointmentObject.
4732 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4733 -saveUrl]): returns the url needed to POST the new form to.
4734 redirect the user to <aptid>/editAsAppointment instead of /edit,
4735 so that SOGoAppointmentFolder can return the correct object type.
4737 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
4738 -compareAptsAscending:_other]): accept empty start or end dates.
4740 * SoObjects/Appointments/SOGoAppointmentFolder.m
4741 ([SOGoAppointmentFolder
4742 -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.
4743 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
4744 components of type "vtodo" as well as "vevent".
4745 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
4746 url specified ends with AsTask or AsAppointment, returns the
4747 an object of the appropriate class, otherwise deduce it from its
4748 content if the HTTP method is "PUT", otherwise read its type from
4751 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4752 -extractQuickFieldsFromTodo:_task]): extract quick fields from
4755 * UI/Scheduler/UIxCalView.m ([UIxCalView
4756 -fetchCoreAppointmentsInfos]): replacement methods for
4757 fetchCoreInfos but by retrieving object with component "vevent".
4758 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
4761 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
4762 UIxCalAptListView adapted for the handling of tasks.
4764 * UI/Scheduler/UIxTaskProposal.[hm],
4765 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
4766 clones of the UIxAppointment* classes for the handling of tasks.
4768 * UI/WebServerResources/UIxTaskEditor.js: clone of
4769 UIxAppointmentEditor adapted for the handling of tasks.
4771 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
4772 Scroll the daily view to the appropriate hour when an appointment
4773 is selected in the appointments list.
4775 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4777 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4778 -setDayStartHour:aStartHour]): specifies the user timezone on the
4781 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
4784 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
4785 ([NSCalendarDate -driftedDate]): methods made useless by a better
4786 comprehension of the NSTimeZone API...
4788 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4790 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
4791 new methods from the NSCalendarDate methods.
4793 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
4794 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
4796 +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).
4797 ([NSCalendarDate -adjustedDate]): this method returns another
4798 instance set to the correct hour after the original date was set
4799 from a non-GMT timezone. This date can be used for storage.
4800 ([NSCalendarDate -driftedDate]): this method does exactly the
4801 opposite of -adjutedDate, that is, it enables the method
4802 hourOfDay, minuteOfHour etc... to return the values according to
4803 the original date's timezone. This date CANNOT be used for storage.
4805 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
4806 -shortDateString]): new method that will return a "short date
4807 string" (yyyymmdd) from a calendar date object.
4809 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4810 -_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.
4812 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
4813 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
4815 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4817 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
4818 view of the day at the height of hour 8:00.
4820 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
4821 ([UIxCalView -dayEndHour]): returns 24.
4823 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
4824 ([UIxContactFoldersView -newAction]): invoke
4825 _selectActionForApplication: on self with the proper attribute too.
4827 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
4828 we now use the action mechanism in UIxContactsListView to keep the
4829 same view for the contact selectors and the regular contact view.
4831 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
4832 UIxContactsListViewContainerBase.[hm]
4834 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
4836 * UI/WebServerResources/generic.js: generalized emailstring
4837 handling functions. Generalized address book access functions.
4839 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4840 -isPopup]): return YES if the "popup" query parameter is set.
4842 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4843 -defaultAction]): keep the url parameters when redirecting.
4844 ([UIxContactFoldersView -selectForSchedulerAction])
4845 ([UIxContactFoldersView -selectForMailerAction]): new action
4846 methods for the /scheduler-contacts and /mailer-contacts invocations.
4848 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
4849 newly available NSString+URL category.
4851 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
4852 -asURLParameters]): handle dictionary entries which could be
4853 instances of NSArray rather than NSString.
4855 * SoObjects/SOGo/NSString+URL.m ([NSString
4856 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
4857 ([NSString -urlWithoutParameters]): new method that returns the
4858 url without its parameters.
4860 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
4862 * SoObjects/SOGo/NSDictionary+URL.[hm],
4863 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
4865 * UI/WebServerResources/UIxMailEditor.js: add support for
4866 additions of different types (to, cc, bcc) of recipients from the
4869 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
4872 * UI/Contacts/UIxContactsMailerSelection.m,
4873 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
4874 UI/Contacts/UIxContactsSelectionView.m to provide a different set
4875 of widgets depending on the application invoking the contact list.
4877 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4879 * UI/WebServerResources/ContactsUI.js: hide the current contact
4880 whenever the user changes of contact folder.
4882 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
4883 now provided by the template when loading the page.
4885 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4886 -iCalPersonWithUid:uid]): new method taken from removed module
4889 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4891 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
4892 -categoriesAsString]): same as below.
4894 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
4895 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
4897 * SoObjects/Appointments/SOGoAppointmentObject.m
4898 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
4899 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
4902 * SoObjects/Appointments/SOGoAppointmentFolder.m
4903 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
4904 hackish test to detect whether the request concernes VEVENT's or
4905 anything else. Return events only in the former case.
4906 ([SOGoAppointmentFolder
4907 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
4908 c_name quickfield so that the calendar list can identify the
4909 appointments with their complete "filename".
4911 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
4912 groupsOfClass:fromSource: to parse the given vcalendar.
4914 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
4916 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
4918 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
4921 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
4923 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4925 * SoObjects/Appointments/SOGoAppointmentFolder.m
4926 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
4927 sensitive to the CalDAV method names.
4928 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
4929 "calendar-query" CalDAV method name.
4931 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
4932 code coming originally from MailerUI.js.
4934 * UI/WebServerResources/UIxContactEditor.js: imitate the
4935 Thunderbird address book by completing the display name with the
4936 content of the first and last name fields, until the display name
4937 is modified manually.
4939 * UI/WebServerResources/generic.js: added a "trim" method to the
4942 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4943 -displayName]): new method that returns the display name from "cn"
4944 or from the "displayName" key if found.
4946 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4947 -initSnapshot]): check if "[card n]" returns anything to avoid a
4950 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
4951 that returns an unparsed doctype definition for the pages.
4953 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4954 -vCard]): set the card's fn to attribute "displayName" if found
4957 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4959 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4960 -vCard]): handle the "streetAddress" and "l" fields.
4962 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
4963 header fields by converting the tables to DIVs and SPANs.
4965 * UI/WebServerResources/generic.css: attempted unification of font
4966 families and size across all the elements. changed the
4967 logConsole's "position" from "fixed" to "absolute" to avoid
4970 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4972 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
4973 empty the contact view when the current contact is being deleted.
4975 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
4976 parse the email field and provide the address full name if found
4977 as the "contactFN" parameter.
4979 * UI/WebServerResources/generic.js (openMailTo): do not give a
4980 name to the opened window so that serveral ones can be opened at
4983 * UI/MailPartViewers/UIxMailPartTextViewer.m
4984 ([UIxMailPartTextViewer -flatContentAsString]): override method by
4985 replacing carriage returns with "<br />" in the result string from
4986 super's implementation.
4988 * UI/Contacts/UIxContactView.m ([UIxContactView
4989 -_urlOfType:aType]): don't manage non-mailto urls through
4990 javascript, let the user decide what's best for him.
4992 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4993 -newAction]): transfer all the query parameters by using the
4994 "asURLParameters"'s result string from [self queryParameters].
4996 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4997 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
4998 query parameters and put their values (if any) into the snapshot.
5000 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
5001 carriage-returns to "<br />".
5002 ([UIxContactView -workCompany]): explicitly initialize company to
5003 nil if org is nil or empty.
5005 * UI/WebServerResources/UIxContactEditor.js: updated validation
5006 code after we added and renamed some fields.
5008 * UI/WebServerResources/ContactsUI.js: added code to cache contact
5009 cards and to handle card updates.
5011 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5013 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
5014 test the length of the returned string since they will never be
5017 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
5018 return self if the process went successful, returns an exception
5019 otherwise (and only otherwise...).
5021 * OGoContentStore/OCSContactFieldExtractor.m
5022 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
5023 adapted method to the new VCard api. Since the cards are stored in
5024 vcard format, we no longer deal with a dictionary but with a
5027 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5029 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
5030 return a string with a "mailto" url.
5031 ([UIxContactView -_urlOfType:aType]): generic method to return a
5032 url string with a html anchor pointing to it.
5034 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
5035 since subclass "UIxContactEditor" did nothing. Implemented code to
5036 display and modify the values parsed from the vcards, displayed in
5037 a way similar to the Thunderbird addressbook.
5039 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
5040 -save]): new dummy method.
5042 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
5043 -save]): made method void.
5045 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5047 * UI/Contacts/UIxContactView.m: added many wrapper methods to
5048 display blocks of data à la Thunderbird Addressbook. If data is
5049 available, those wrappers (around the NGVCard methods) will
5050 enclose the results in a proper HTML output with the correct label
5051 (if present), otherwise it will return an empty string.
5052 ([UIxContactView -vcardAction]): new action to return the contact
5053 as text/vcard (for exporting).
5055 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
5056 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
5058 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
5059 -vCard]): create a new NGVCard instance when no data is available
5061 ([SOGoContactGCSEntry -save]): save the vCard using the new
5062 "versitString" API method/message.
5064 * UI/Contacts/UIxContactView.h: separated interface from
5067 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
5068 views and display them beneath the list.
5070 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5072 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
5073 the timezone even when it's the server timezone.
5075 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5076 -privateContacts:inContext:]): no long configure the calendar
5077 object with the user's timezone since it's now accessible
5078 application-wide throught the SOGoObject methods.
5080 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
5081 method. Removed the "backendTimeZone" method.
5083 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
5084 instead of SoComponent.
5086 * SoObjects/Appointments/SOGoAppointmentObject.m:
5087 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
5088 [self serverTimeZone] instead of "EST" (which was removed).
5090 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
5091 "timeZone" ivar and its accessors.
5093 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
5094 centralized method returing the timezone configured in the
5095 userdefaults db or "Canada/Eastern" if missing.
5096 ([SOGoObject -userTimeZone]): new centralized method returing the
5097 timezone of the current user or the server timezone if missing
5098 from the user configuration table.
5100 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5102 * UI/WebServerResources/SchedulerUI.js: implemented caching of
5105 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
5106 return a path based on the object's context instead of the first
5107 level in SOGo's object hierarchy...
5109 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5111 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
5114 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
5115 timezone ([self viewTimeZone]) to the WEMonthOverview component to
5116 avoid a confusion with the days.
5118 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
5121 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
5122 imitate Sunbird's synchronization between the 3 visible views.
5124 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
5125 sure the numbers in dateString are formatted so as to take 4 chars
5126 for the year and 2 for the day and the month, otherwise
5127 NSCalendarDate will return a nil date.
5128 ([UIxComponent -applicationPath]): return a path based on the
5129 object's context instead of the second level in SOGo's object
5132 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5134 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
5135 user's timezone abbreviation to the date string passed as parameter to
5136 NSCalendarDate to generate an accurate date instance. Do the same
5137 when no date is specified and today is chosen.
5139 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
5140 form's time values to integers before comparing them.
5142 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
5143 ([UIxCalAptListView -currentEndTime]): initialize the resulting
5144 dates timezone with [self viewTimeZone].
5146 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
5147 "viewTimeZone" ivar destined to hold an instance of the user's
5149 ([UIxComponent -viewTimeZone]): take the timezone from the user's
5152 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5154 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
5155 rearranged the layout.
5157 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
5158 manage showing and hiding appointment details.
5160 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5161 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
5162 timezone by taking the current user's timezone setting.
5164 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
5166 * SoObjects/Appointments/SOGoAppointmentObject.m
5167 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
5168 set default timezone to EST, although this code should be
5169 rewritten to handle a system and a user default value.
5171 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
5172 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
5173 take the values from the hour and minute INPUTs when data is
5174 POSTed since we no longer use the UIxTimeSelector component.
5175 ([UIxTimeDateControl -selectableHours])
5176 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
5177 template SELECTs to display reasonable and acceptable values
5178 instead of all the possibilities.
5180 * UI/WebServerResources/generic.js: adapted code for the new
5181 implementation of the UIxContactSelector component (added a
5182 "remove" button, removed the previous INPUT and replaced them with
5183 links of class "button").
5185 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
5186 UIxTimeDateControl.m.
5188 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
5189 ([UIxCalDayTable -currentAppointmentHour]): new methods that
5190 returns correctly formatted values used as attributes for JS code.
5192 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
5193 -initialContactsAsString]): renamed implementation of
5194 initialParticipants.
5195 ([UIxContactSelector -currentContactId])
5196 ([UIxContactSelector -currentContactName]): new methods used when
5197 listing the initial contacts in the widget. Currently, both return
5198 the person's cn but the latter should ultimately return a user
5201 * UI/Contacts/UIxContactSelector.h: separated interface from
5202 UIxContactSelector.m.
5204 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
5205 all javascript code is now put in Scheduler.js/generic.js.
5207 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
5208 moved into NSCalendarDate+Scheduler instead.
5210 * SoObjects/Appointments/SOGoAppointmentFolder.m
5211 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
5212 configure the timezone from SOGoUserFolder when the instance is
5214 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
5215 the value of the new "timezone" ivar.
5217 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5219 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
5220 the date selector in the first page and the container of the
5221 future calendar selector in the second page.
5223 * UI/WebServerResources/generic.js: added code for handling tabbed
5226 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
5227 returns the bundle name associated to the current running product.
5229 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5231 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
5232 exception by invoking a timeout on the opener rather than invoking
5233 the list refresh method.
5235 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
5238 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
5239 ([UIxCalWeekView -prevWeekQueryParameters])
5240 ([UIxCalWeekView -nextWeekQueryParameters])
5241 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
5242 that return the dates relatively to the current day.
5243 ([UIxCalWeekView -lastWeekName])
5244 ([UIxCalWeekView -currentWeekName])
5245 ([UIxCalWeekView -nextWeekName])
5246 ([UIxCalWeekView -weekAfterNextWeekName])
5247 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
5248 methods that returns the label for the corresponding weeks.
5250 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
5251 used by UIxCalDayView and UIxCalWeekView to display the events
5252 occuring in one or more days.
5254 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5256 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
5257 entries in the new "monthMenu" and "yearMenu".
5259 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
5260 method to return the current day as a string formatted depending
5261 on the current locale.
5263 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
5264 ([UIxCalAptListView -endDate]): "today" is now the default filter
5265 for displayed events.
5266 ([UIxCalAptListView -currentSerialDay]): new method returning the
5267 date of the current enumerated appointment in serial form
5270 * UI/WebServerResources/SchedulerUI.js: added code to select the
5271 relevant day when an appointment is selected. Added code to popup
5272 a month and a year menu whenever the header entries are clicked in
5273 the calendar widget.
5275 * UI/WebServerResources/generic.js: made addClassName and
5276 removeClassName methods of HTMLElement.
5278 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5280 * UI/WebServerResources/MailerUI.js: fixed the contact creation
5281 from email addresses.
5283 * UI/WebServerResources/generic.js: centralized the search-related
5284 functions here since the same code was used across the 3
5287 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
5288 ([UIxCalAptListView -endDate]): return the required dates needed
5289 depending on the value given to the "filterpopup" url parameter.
5291 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
5292 code by invoking UIxComponent's labelForKey:.
5294 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
5295 [self pageResourceManager] instead of [self resourceManager].
5297 * UI/Contacts/UIxContactEditorBase.m: invokes
5298 globallyUniqueObjectId on the clientobject's class instead of the
5299 hardcoded "SOGoFolder".
5301 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
5302 -newAction]): redirect the "new" action to the personal (default)
5305 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
5306 +objectWithName:inContainer:]): new constructor.
5308 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
5309 -lookupContactWithId:recordId]): always create a contact object,
5310 even if it does not exist.
5312 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5314 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
5315 component that lays out the different components of SOGoCalendar.
5316 Only serves as an Objective-C counterpart to its xml template.
5318 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
5321 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
5322 display a widget to handle the information displayed in the
5323 appointments list. Not currently used, lacks implementation.
5325 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
5326 display a calendar as a dynamic widget from where one can select
5327 the current visible day.
5329 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
5330 extracted from UIxCalInlineMonthOverview.m.
5332 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
5333 calendarPageURL methods. The javascript code is handled by .js
5334 files as much as possible...
5336 * UI/WebServerResources/ContactsUI.js,
5337 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
5340 * UI/WebServerResources/SchedulerUI.js: implemented functions to
5341 handle the new widgets. XmlHTTPRequest code taken from
5344 * UI/WebServerResources/generic.js: put some functions related to
5345 element selections as methods to HTMLElement and HTMLTableElement.
5347 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
5348 display the list of appointments (embodies the code-size of
5349 UIxCalAptListView; answers to the "aptlist" method).
5351 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5353 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
5354 -correctURLAction]): new short action method replacing the method
5355 below by taking far less code.
5357 * SoObjects/Appointments/SOGoAppointmentFolder.m
5358 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
5359 with an action in the view-related code.
5361 * UI/Scheduler/UIxAppointmentEditor.m: invoke
5362 "stringByEscapingHTMLString" on the resulting value to avoid
5363 issues with accented characters.
5364 ([-jsCode]): removed method since the javascript code was merged
5365 into SchedulerUI.js.
5367 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5369 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
5370 new class method that returns an iCalPerson based on the UID given
5373 * UI/Contacts/UIxContactsListViewContainerBase.m:
5374 UIxContactsListViewContainer renamed to serve as a base class for
5375 the contact lists in both the contact editor and the contact
5378 * SoObjects/Contacts/SOGoContactLDAPFolder.m
5379 ([SOGoContactLDAPFolder
5380 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
5381 setUserIdentifier:setRootDN:]): an LDAP field specifying the
5382 loginname of the users can now be specified.
5384 * UI/WebServerResources/generic.js: added code to manage contact
5385 lists through the new implementation of the UIxContactSelector.
5387 * UI/Templates: put the templates related to SchedulerUI in its
5390 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
5391 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
5392 entry for "uid" with the field name representing the login name of
5393 the user in the corresponding LDAP branch.
5395 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5397 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
5398 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
5399 request is a PUT, always create an entry, even if we're not sure
5402 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5404 * UI/WebServerResources/ContactsUI.js: implemented live-search.
5406 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
5407 -appendSystemSourcesInContext:context]): populated method with
5408 code that creates entries mapped to instances SOGoContactFolder,
5409 based on the configuration found in the NSUserDefaults under the
5410 key "SOGoLDAPAddressBooks".
5411 ([SOGoContactFolders
5412 -lookupName:nameinContext:contextacquire:acquire]):
5413 "contactsources" do not exist anymore, SOGoContactFolder was split
5414 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
5415 and one protocol: SOGOContactFolder, instead.
5416 ([SOGoContactFolders -contactFolders]): new accessor used by the
5417 views of SOGoContactXXXFolder to list the possible sources.
5419 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
5420 defines the methods that UIxContactsView, ..Editor and so on...
5423 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
5424 defines the methods that UIxContactsListViewBase expects as well
5425 as the data fields returned in the contact lists.
5427 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
5428 returns entries an LDAP server. Conforms to the new
5429 SOGOContactFolder protocol.
5431 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
5432 returns a vCard based on contact entries from an LDAP server.
5433 Conforms to the new SOGOContactObject protocol.
5435 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
5436 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
5437 entry for the textual representation of the vCard.
5439 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
5442 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
5443 "SOGoContactObject".
5445 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
5446 method that generates a textual representation of the vcard.
5448 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
5450 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
5451 "SOGoContactFolder".
5453 * SoObjects/Contacts/SOGoContactSource.h,
5454 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
5457 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
5458 -singleAttributeWithName:key]): new method that returns the first
5459 object associated with an ldap key (where generally one value is
5462 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
5463 map the entry into an NSDictionary for processing by
5464 UIxContactsListViewBase.m with the least possible overhead.
5466 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
5469 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5471 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5472 -privateContacts:inContext:]): now returns an instance of
5475 * UI/Contacts/UIxContactsListViewContainer.m
5476 ([UIxContactsListViewContainer -contactFolderName]): new method to
5477 return the absolute path to the current contact folder, called
5478 from within the template.
5480 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
5481 JS code to initialize the 'currentContactFolder' generic var.
5483 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
5484 +contactFolderWithSource:inContainer:andName:]): new class
5485 method meant to return an instance connected to the specified
5486 source. Currently useless but won't be anymore in the next few
5489 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
5490 the "lookupFreeBusyObject" method since it does not exist.
5492 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
5493 as a "view" for the SOGoContactFolders object. Does nothing but
5494 redirect the browser to the URL of the personal address book of
5495 the user. It does not even have a template.
5497 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
5498 implementing the SOGoContactSource protocol. Does nothing
5499 currently but will be used to implement access to the personal
5500 address book of the user stored in the SOGo database.
5502 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
5503 protocol defining an API common to all possible types of contact
5506 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
5507 serving as the root of the contact folders available to the
5508 current user. Correctly lists the contact sources in webdav.
5510 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5512 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
5513 -composeAction]): new action method that permits external object
5514 to write a message from the default (primary) account.
5516 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5517 -initSnapshot]): new method with code taken from "defaultAction"
5518 but needed for others.
5519 ([UIxContactEditorBase -writeAction]): new action designed to
5520 compose the correct URL needed to obtain the MailerUI's email
5521 editor with the correct "mailto" parameter.
5523 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
5524 Common so that other modules can use it.
5526 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
5527 easier to manage both ajax and non-ajax requests.
5529 * UI/Contacts/UIxContactsFilterPanel.m: clone of
5530 UIxMailFilterPanel, but applicable to contact lists.
5532 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
5533 -vcardContentFromSOGoContactRecord]): use the new standard methods
5534 created for each type of entry. If a line is determined to not
5535 contain information, it will be skipped.
5537 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
5538 +initialize]): init defaultMailDomain with the user default
5539 "SOGoDefaultMailDomain".
5541 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5543 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5544 -saveAction]): reorganized methods to only have ONE return point.
5545 Invoke saveRecord: directly on the clientObject instead of
5546 saveContentString, which does the same thing anyway.
5548 * SoObjects/Contacts/NSDictionary+Contact.m
5549 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
5550 method to convert the dictionary returned with the user submission
5551 to a record in VCARD format to be stored in the database.
5553 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5555 * UI/WebServerResources/MailerUI.js: when opening the context menu
5556 of the message list, select the message below the mouse cursor and
5557 deselect the other selected messages temporarily. This mimics the
5558 behaviour of Thunderbird for that matter and was already
5559 implemented for the entries of the folder tree.
5561 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
5562 -iconForMenuItem]): new method that returns the fully qualified
5563 relative URL to the icon representing the mailbox, or the default
5564 mailbox icon if needed.
5566 * UI/SOGoUI/UIxComponent.m ([UIxComponent
5567 -urlForResourceFilename:filename]): automatically return an empty
5568 string whenever the filename passed as argument is nil.
5570 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
5571 "desc" parameter set to 1 so that they are sorted in descending
5572 order by default. Also, added "onHeaderClick()", triggered by
5573 clicking on the message list header elements.
5575 * UI/MailerUI/UIxMailSortableTableHeader.m
5576 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
5578 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5579 -isSortedDescending]): defaults to "YES" when the sort order is
5582 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5584 * UI/WebServerResources/MailerUI.js:
5585 - message cache: set the max num of cached messages to 20. Limit
5586 the cached message size to 30000 bytes.
5587 - ajax: when a message request is called while one is already
5588 being performed, the latter will be cancelled. Idem when
5589 retrieving the content of a mailbox.
5590 - folder tree: when a mailbox is selected because of the URL
5591 requested (initMailboxSelection), the dtree is expanded throughout
5592 the mailbox entry's parent hierarchy to ensure it is made visible
5593 when the page is being displayed. (new function: expandUpperTree).
5594 - mailbox loading: when loading a mailbox where a message was
5595 previously selected, we invoke its url with the "pageforuid"
5596 parameter correctly specified. During callback processing, we scan
5597 the table for the related row and reselect it.
5598 Also, the message area is set blank before loading any mailbox.
5600 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5601 -defaultAction]): if the "pageforuid" parameter is passed in the
5602 url, take its value and invoke [self firstMessageOfPageFor:]
5603 consequently to deduce the first message to display. Otherwise,
5604 set it to "idx", otherwise set it to 0.
5605 ([UIxMailListView -firstMessageOfPageFor:]): new method
5606 that determines the first message of the page where the message
5607 passed as parameter is contained.
5609 * UI/WebServerResources/UIxMailListView.js: removed this module,
5610 its code was put in MailerUI.js instead.
5612 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5614 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
5615 which returns the nodes for the parent specified in "parentMenu".
5616 Used to generate the javascript code for the folder dtree.
5618 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
5619 using that container-template are now using UIxMailMainFrame
5620 since UIxMailPanelFrame had no real interest. File removed.
5622 * UI/WebServerResources/dtree.{css,js}: new files to handle
5623 javascript-generated mailbox tree. Modified from original version
5624 by integrating the previous code with the one we are using for
5625 selections and mailbox handling. Minor visual enhancements too...
5627 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5629 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
5630 returned, put it in an NSArray before returning it (fixes
5633 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5635 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
5636 that returns a url string stripped from its "http://hostname"
5639 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
5641 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
5643 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5645 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
5646 -mailDateFormatter]): retrieve the timezone from the user settings
5647 and pass it to the returned dateFormatter. Also, the dateFormatter
5648 is kept in a static variable to avoid useless
5649 creations/destructions.
5651 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
5652 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
5654 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
5655 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
5656 s/Criteria/Text/ to handle the "criteria" form parameter.
5658 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5660 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
5661 to integrate better with the firefox look&feel. Added entries for
5662 the new "menu" DIV class (popup menus).
5664 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
5665 takes any chunk of text as param, detects the user email and the
5666 optional first and last names and return them in a well-formatted
5667 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
5668 namespace conflict. Added "onMenuClick(node, event, menuId)" to
5669 handle popup menus through "onclick" element attributes (node =
5670 this, event = event and menuId = name of the menu DIV id to
5673 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5674 -snapshot]): add an entry for "email" into the snapshot
5675 dictionary if a "contactEmail" URL parameter was detected and if
5676 the entry for "email" is empty.
5678 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
5679 button now invokes the newContact() js function in ContactsUI.js
5680 instead of opening "new" directly. newContact() pops up a window
5681 stripped from its navigation bar.
5683 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
5684 bundle (AddressBook).
5686 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
5687 "menu" and id "addressMenu" have the header email addresses
5688 display it with the new menu code in generic.js.
5690 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
5691 replaced the body tables with a div of class "pageContent"
5692 (standardization across the page templates).
5694 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
5695 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
5696 those are now inherited from UIxPageFrame.
5698 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
5700 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
5701 a "mailto" URL parameter is detected and the "to" array is empty,
5702 initialize "to" with the value of "mailto" before returning it.
5704 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
5705 -composeAction]): rewrote method in a cleaner way and with usage
5706 of the URL extensions to NSString and NSDictionary (see below).
5707 Also, if a "mailto" url parameter is detected, pass it to the
5710 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
5713 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
5714 returns a parameter string to add to a base URL.
5716 * UI/Common/NSString+URL.m ([NSString
5717 -composeURLWithAction:parameters:andHash:useHash]): new method to
5718 compose a complete URL from an object URL with parameters and an
5719 optional '#' character.
5721 * UI/Common/UIxPageFrame.h: separated interface from
5724 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
5726 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
5728 * UI/WebServerResources/generic.js: added code to manage
5729 selections within HTML containers.
5731 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
5732 added method to determine the possible URL for a product-specific
5733 javascript filename of the forme <productname>.js.
5734 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
5735 ([UIxPageFrame -isPopup]): new method to determine whether the
5736 application navigator bar should be displayed (main page) or not
5739 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
5740 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
5741 the user through LDAP.
5743 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5745 * The toolbar code from the MailerUI product was taken, renamed as
5746 "UIxToolBar" and put into UI/Common. Toolbar plists were created
5747 for the Contacts and Scheduler products and put in their respectir
5748 Toolbars/ subdirectories. Finally,
5749 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
5750 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
5751 and an invocation to the UIxToolbar component was put at the top
5752 of UI/Templaces/UIxPageFrame.wox.
5754 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
5755 within the templates whether a separator should be displayed.
5757 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
5758 that returns NO if the toolbar is empty.
5760 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5762 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
5764 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
5765 new toolbar objects.
5767 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
5769 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
5770 linkbanner as a DIV instead of a TABLE.
5772 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
5774 returns 'YES' to request the display of the navigation bar between
5777 2006-06-15 ludovic@inverse.ca
5779 * It's now possible to set the default
5780 domain using for email using the
5781 SOGoDefaultMailDomain preference key.
5783 2006-06-15 ludovic@inverse.ca
5785 * Initial import of SOGo from trunk.