1 2007-12-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3 * UI/Scheduler/NSArray+Scheduler.m ([NSMutableArray
4 -reverseArray]): new category method.
6 2007-12-14 Ludovic Marcotte <ludovic@inverse.ca>
8 * SoObjects/Appointments/SOGoCalendarComponent.m
9 We set headers in lowercase so that they get properly
12 * SoObjects/Mailer/SOGoDraftObject.m
15 2007-12-13 Francis Lachapelle <flachapelle@inverse.ca>
17 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame -saveFoldersStateAction])
18 ([UIxMailMainFrame -getFoldersStateAction]): new methods to get
19 and set the folders state of the user's web view.
21 2007-12-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
23 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -crashAction]): new
24 action methods that generates a segmentation faults.
25 ([SOGoRootPage -exceptionAction]): new method that returns an
27 ([SOGoRootPage -raisedExceptionAction]): new method that raises an
28 exception without returning it.
30 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWithStatus:status])
31 ([UIxComponent -responseWithStatus:statusandString:contentString])
32 ([UIxComponent -responseWithStatus:statusandJSONRepresentation:contentObject])
33 ([UIxComponent -responseWith204]): new utility methods.
35 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
36 -responseWithStatus:statusandString:contentString])
38 -responseWithStatus:statusandJSONRepresentation:contentObject]):
41 * SoObjects/SOGo/NSScanner+BSJSONAdditions.m ([NSScanner
42 -scanJSONStringDelimiterString]): new category module taken from
45 * SoObjects/SOGo/NSDictionary+BSJSONAdditions.[hm]: new category
46 module taken from BSJSONAdditions 1.3.
47 http://blakeseely.com/downloads.html
49 2007-12-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
51 * SoObjects/SOGo/NSString+Utilities.m ([NSString
52 -stringByDetectingURLs]): we now go back until the real start of
55 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
56 -fetchAttachmentIds]): new method that wanders through the mail
57 structure to collect the attachment content ids and to associate
60 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
61 ([_UIxHTMLMailContentHandler
62 -startElement:_localNamenamespace:_nsrawName:_rawNameattributes:_attributes]):
63 the content-ids are now enclosed between "<>" before retrieval
64 from the attachment dictionary.
65 ([UIxMailPartHTMLViewer -cssContent])
66 ([UIxMailPartHTMLViewer -flatContentAsString]): the content-ids
67 are now fetch from the clientobject (an instance of
68 SOGoMailObject) with the new "fetchAttachmentIds" method.
70 2007-12-12 Francis Lachapelle <flachapelle@inverse.ca>
72 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
73 -eventsListAction]): added the state of the calendar's owner with
74 respect to the current event.
76 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
77 -_loadAttendees]): added the retrieval of attendees state on
80 2007-12-12 Ludovic Marcotte <ludovic@inverse.ca>
82 * UI/MailPartViewers/UIxMailRenderingContext.{h,m}
83 Removed template caching which added very little
84 and created re-entrant issues.
86 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
87 Added a hack (and stated so in the source file)
88 to avoid what seems to be a bug in libxml.
90 2007-12-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
92 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
94 ([SOGoContentObject -davLastModified])
95 ([SOGoContentObject -davContentLength]): implemented dav methods.
97 2007-12-10 Francis Lachapelle <flachapelle@inverse.ca>
99 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
100 -GETAction:]): when asAttachment is set to true, the header
101 "content-disposition" is set to "attachment" so browsers like IE
102 and Safari properly asks the user to save the file.
104 2007-12-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
106 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
107 ([UIxMailPartHTMLViewer -flatContentAsString]): when in
108 UIxMailPartAlternative, scan the filenames of potential cid at the
109 same level as our parent.
111 2007-12-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
113 * Main/SOGo.m ([SOGo -run]): the table creation script now have a
114 @{tableName} substitution variable to be substitued with the real
115 table name obtained from the configuration variables.
117 2007-12-07 Ludovic Marcotte <ludovic@inverse.ca>
119 * UI/MailPartViewers/UIxMailRenderingContext.m
120 We treat multipart/appledouble like multipart/mixed
121 for now. That allows the user to save both parts.
123 * Corrected typos in Localizable.string files.
125 2007-12-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
127 * UI/Common/UIxAclEditor.m ([-currentUserIsOwner]): replaced
128 method with -canModifyAcls that invokes the security manager
129 instead for the permission "SaveAcls" on the client object.
131 * SoObjects/Appointments/SOGoCalendarComponent.m
132 ([SOGoCalendarComponent -contentAsString]): securize the returned content.
133 ([SOGoCalendarComponent -aclsForUser:uid]): check whether the user
134 is an organizer or a participant as well.
136 * SoObjects/Appointments/SOGoAppointmentObject.m
137 ([SOGoAppointmentObject -changeParticipationStatus:_status]): the
138 user we should change the status of is not the active user but the
139 owner of the object. This is for delegation.
141 * SoObjects/Appointments/SOGoAppointmentFolder.m
142 ([SOGoAppointmentFolder -fetchContentObjectNames]): fetch the
143 elements through the fetchFields:from:to:title:component: method
144 method, so that the result is already filtered depending on the
147 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
148 -toolbar]): if the current user is a delegate, take the permission
149 "ModifyComponent" into account. Also, do not let him/her modify an
150 event for which he/she is the organizer.
152 * SoObjects/Contacts/SOGoContactLDAPFolder.m
153 ([SOGoContactLDAPFolder -davResourceType]): declared as a carddav
154 addressbook collection.
156 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
157 -davResourceType]): declared as a carddav addressbook collection.
159 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davLastModified]):
160 override SoObject's implementation. Otherwise a localized date is returned.
162 * UI/Common/UIxPageFrame.m ([UIxPageFrame -isCalendar])
163 ([UIxPageFrame -isContacts], [UIxPageFrame -isMail]): getters to
164 determine which module is the current one.
166 2007-12-06 Francis Lachapelle <flachapelle@inverse.ca>
168 * UI/Scheduler/NSArray+Scheduler.m ([NSArray -compareEventsTitleAscending:otherEvent])
169 ([NSArray -compareEventsLocationAscending:otherEvent])
170 ([NSArray -compareEventsEndDateAscending:otherEvent])
171 ([NSArray -reversedArray]): new methods that sort an array of
172 events depending of various parameters.
174 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
175 -eventsListAction]): added support for sorting events.
177 2007-12-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
179 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction])
180 ([UIxMailEditor -sendAction]): make sure that the attachments
181 having the same filename are correctly sequenced (ex: base.ext,
182 base-1.ext, base-2.ext).
184 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
185 -fetchBLOB]): added support for quoted-printable decoding. Also,
186 we return nil if the type is not supported.
188 2007-12-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
190 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -newAction]):
191 create task obejcts with the .ics extension.
193 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
194 -newAction]): create appointment objects with the .ics extension.
196 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -newAction]):
197 create objects with the .vcf extension.
199 * Main/NSException+Stacktrace.m: added missing symbols from
200 NSException.m and NSDebug.m (GNUstep).
202 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
203 -foldersSearchAction]): make use of the new search methods in
204 SOGoUserFolder (see below).
206 * UI/Contacts/UIxContactFoldersView.m ([-foldersSearchAction]):
207 moved method into ../MainUI/SOGoUserHomePage.m.
209 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
210 -foldersOfType:folderTypeforUID:uid]): only return folders owned
211 by the specified user.
213 2007-12-05 Francis Lachapelle <flachapelle@inverse.ca>
215 * SoObjects/Mailer/SOGoDraftObject.m: the condition for replyToAll
216 has to be done later to avoid duplicated to and cc addresses.
218 2007-12-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
220 * SoObjects/Appointments/SOGoAppointmentFolder.m
221 ([SOGoAppointmentFolder -davCalendarQuery:queryContext]): fixed a leak.
223 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder -davSubscribe:localContext])
224 ([SOGoGCSFolder -davUnsubscribe:localContext]): subscribe an
225 unsubscribe from DAV-based accesses. We could be compatible with
226 Microsoft's extensions but we have no need for a "subcription id",
227 so we implement our own.
229 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
230 -POSTAction:localContext]): new method to intercept DAV POSTs,
231 which we now use to implement certain custom commands such as
232 "subscribe" and "unsubscribe".
234 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
235 -davNamespaces]): declare the
236 "urn:inverse:params:xml:ns:inverse-dav" xml ns.
237 ([SOGoUserFolder -foldersOfType:folderTypeforUID:uid]): new method
238 designed to replace the UIxContactFoldersView.m mechanism for
239 displaying folders to subcribe to, as a common code base for both
240 Web and DAV-based subscriptions.
241 ([SOGoUserFolder -foldersOfType:typematchingUID:uid]): same as
243 ([SOGoUserFolder -davCollectionQuery:queryContext]): new method
244 that implement a custom DAV-based protocol query for querying
245 folder based on specified attributes.
247 2007-12-03 Ludovic Marcotte <ludovic@inverse.ca>
249 * Main/NSException+Stacktrace.{h,m} - new files
250 to handle automatic stack trace generation
251 upon an uncaught exception.
253 * Updated the templates and Localizable.string files
254 to fix typos and add new strings.
256 * SoObjects/Mailer/SOGoMailBodyPart.m
257 Fixed attachment retreival when the first character
260 * SoObjects/SOGo/SOGoGCSFolder.m
261 Fixed the sending of emails when folders are created/removed.
262 Notifications are sent if the defaults SOGoFoldersSendEMailNotifications
265 * UI/Common/UIxUserRightsEditor.m
266 * UI/Templates/SOGoACLEnglishModificationAdvisory.wox
267 * UI/Templates/SOGoACLFrenchModificationAdvisory.wox
268 * UI/Templates/SOGoACLGermanModificationAdvisory.wox
269 Added the capabilities to email notifications when ACLs have
270 changed on a DAV collection or an IMAP mailbox. Also added
271 new templates (3 .wox) to deal with this.
273 * UI/WebServerResources/ContactsUI.js
274 UI/WebServerResources/SchedulerUI.js
275 Added warnings on operations w/o selection.
277 2007-11-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
279 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
280 -appendSubscribedSources]): don't include sources for which we
281 don't have the SOGoPerm_AccessObject permission.
283 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
284 -rfc822DateString]): we want positive timezones to be specified
285 with a leading "+" too.
287 2007-11-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
289 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
290 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
291 return nil if the subscribed folder has no display name (meaning
292 it no longer exists).
294 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
295 -appendPersonalSources]): don't include sources which are no
298 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
299 -ocsPathOfContainer]): return the intended value, not that of
302 * SoObjects/Appointments/SOGoCalendarComponent.m
303 ([SOGoCalendarComponent -sendResponseToOrganizer]): send the
304 message only of sendEMailNotifications is set.
306 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -subscriptionRoles]):
307 new method that returns the roles that qualifies for adding the
308 special "authorized subscribed" sogo role.
310 2007-11-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
312 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
313 -aclsForUser:uid]): copy all the roles from the container. If the
314 object is new, make sure the roles contain "ObjectEditor" if and
315 only if "ObjectCreator" is present.
317 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
318 -aclsForUser:uid]): no longer take the "ObjectReader" role into
321 * UI/Common/UIxFolderActions.m ([UIxFolderActions
322 -canAccessContentAction]): always return HTTP status 204. We want
323 this because we are relying on the SOPE access control manager to
324 grant access to this method. This requires a fine-tuned access
325 control in SOGo itself...
327 * UI/Contacts/UIxContactsUserRightsEditor.m ([-userCanReadObjects])
328 ([-setUserCanReadObjects:userCanReadObjects]): removed methods.
330 * UI/MailerUI/UIxMailUserRightsEditor.m ([UIxMailUserRightsEditor
331 -updateRights]): no longer take the "ObjectReader" role into account.
332 ([-userCanReadMails], [-setUserCanReadMails:userCanReadMails]):
335 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
336 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): specify context
337 when looking up the Calendar folder.
339 2007-11-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
341 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): same as below.
343 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
344 -event]): create the event if it doesn't exist.
346 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -userHasCalendarAccess])
347 ([UIxPreferences -userHasMailAccess]): same as below, for
348 displaying preference tabs.
350 * UI/Common/UIxPageFrame.m ([UIxPageFrame
351 -userHasCalendarAccess]): new accessor for the link banner.
352 ([UIxPageFrame -userHasMailAccess]): same as above.
354 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
355 -toManyRelationshipKeys]): do not report the path to modules to
356 which the user has no access. No longer cache this information
357 statically, the array will be generated at each call.
358 ([SOGoUserFolder -lookupName:_keyinContext:_ctxacquire:_flag]):
359 ignore the path to modules to which the user has no access.
361 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -canAccessModule:module]):
362 new method that returns whether the user has access to the
365 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
366 -initFromUDSource:udSource]): take a new parameter named
367 'ModulesContraints' that defines a set of constraints for
368 accessing specified named modules. This is an optout, meaning the
369 modules will be present unless a constraint is specified.
371 * SoObjects/Appointments/SOGoAppointmentFolder.m
372 ([SOGoAppointmentFolder
373 -roleForComponentsWithAccessClass:accessClassforUser:uid]): cache
374 acl to reduce method calls.
375 ([SOGoAppointmentFolder
376 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
377 if the user is not the current user, we strip the useless info
380 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
381 -labelForKey:key]): new category method.
383 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
384 -event]): same as below.
386 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): request a
387 secured version of the component.
389 * UI/MailPartViewers/UIxMailPartViewer.m
390 ([-fallbackStringEncoding]): removed method.
391 ([UIxMailPartViewer -flatContentAsString]): we no longer use [self
392 fallbackStringEncoding]. Instead we directly specify
393 NSISOLatin1StringEncoding if UTF-8 has failed.
395 * UI/MailPartViewers/UIxMailPartICalViewer.m
396 ([-fallbackStringEncoding]): removed method.
398 2007-11-25 Ludovic Marcotte <ludovic@inverse.ca>
400 * SoObjects/Mailer/SOGoMailForward.m
401 Use [sourceMail decodedSubject] instead of [sourceMail subject]
402 Signature fix in -signature - see the comment
405 * SoObjects/Mailer/SOGoMailObject.m
406 Improved -stringFromData: to try UTF-8 then fallback to Latin1
408 * SoObjects/Mailer/SOGoMailReply.m
409 Modified -messageBody to strip the signature from the reply.
410 Also modified -signature to add "-- \n%@" instead of the
411 broken ""--\r\n%@" pattern.
413 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m
414 We now favor text/calendar parts over text/html and
415 text/plain parts when viewing a multipart/alternative mail.
416 This allows us to show the email invitations coming from
419 * UI/MailerUI/UIxMailAccountActions.m
420 Signature fix in -composeAction - see the comment
423 * UI/MailPartViewers/UIxMailPartViewer.m
424 Modified -flatContentAsString to use UTF-8 as the
425 default fallback encoding for 8-bit content.
427 * SoObjects/Mailer/SOGoDraftObject.m
428 Modified _fillInReplyAddresses:replyToAll:envelope:
429 so that if there's no recipient, we add at least
431 Fixed a mem leak in the same method.
433 2007-11-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
435 * UI/MailPartViewers/UIxMailRenderingContext.m
436 ([UIxMailRenderingContext -viewerForBodyInfo:_info]): same as below.
438 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
439 -plainTextContentFetchKeys]): same as below.
441 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
442 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): accept the
443 application/ics type from Google Calendar.
445 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
446 +distantFuture]): rewrote method to return an object that is
447 compatible with NSCalendarDate, unlike the implementation in
449 ([NSCalendarDate +distantPast]): same as above.
451 2007-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
453 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: fixed infinite loop
454 when charset is us-ascii, match it to ascii rather than none.
456 * SoObjects/Appointments/SOGoAppointmentFolder.m
457 ([SOGoAppointmentFolder
458 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
459 added search on the c_title column too.
461 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
462 -eventsListAction]): take the "search" url parameter into account.
463 ([UIxCalListingActions -eventsListAction]): fetch events matching
464 the title filter too.
466 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -connectAction]): the
467 user infos are now posted as "application/x-www-form-urlencoded".
468 So we have to have like a form has been posted.
470 2007-11-21 Francis Lachapelle <flachapelle@inverse.ca>
472 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
473 -calendarList]): also returns the calendar of the current
474 event. This is required so the proper calender is selected when
475 you view an event to which you don't have write access.
477 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
478 also returns true for super users.
480 2007-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
482 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
483 -lookupImap4BodyPartKey:inContext:]): return a correct body part
484 when "0" is requested, taking its mime-type into account.
486 * UI/MailPartViewers/UIxMailRenderingContext.m
487 ([UIxMailRenderingContext -flatContentForPartPath:_partPath]):
488 return content for part "0", which would be the message body.
490 2007-11-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
492 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
493 ([_UIxHTMLMailContentHandler
494 -setContentEncoding:newContentEncoding]): new method that
495 specifies an xml charset to return to the parser.
496 ([UIxMailPartHTMLViewer -flatContentAsString]): specifies the
497 charset to the content handler before parsing.
499 * SoObjects/Appointments/SOGoAppointmentObject.m: don't take an
500 empty c_name as a valid response when looking up an event. Create
501 one in that case instead.
503 2007-11-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
505 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -signature]):
506 returns the signature for the default identity of the default
508 ([UIxPreferences -setSignature:newSignature]): accessor that sets
509 the default signature.
511 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
512 -composeAction]): append the message signature to the new draft.
514 * SoObjects/Mailer/SOGoMailReply.m ([SOGoMailReply -signature]):
517 * SoObjects/Mailer/SOGoMailForward.m ([SOGoMailForward
518 -signature]): new method that takes the user's signature and put
519 it at the end of the message, if exists.
521 * UI/Common/UIxPageFrame.m ([UIxPageFrame -isSuperUser]): new
522 accessor that forwards the call to the active user.
524 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -signature]): returns the
525 user default signature.
526 ([SOGoUser -isSuperUser]): declares whether the user is listed
527 among the super users.
529 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
530 -setComponent:newComponent]): retain the component object.
531 ([UIxComponentEditor -organizerIdentity]): new accessor method to
532 handle list of possible organizers.
534 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
535 -event]): retain the returned event object.
537 * SoObjects/Appointments/SOGoAppointmentObject.m
538 ([SOGoAppointmentObject -saveComponent:newEvent]): reset the
539 organizer only if there are no attendees AND the owner of the
540 component is not the organizer him-/herself.
542 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
543 -toolbar]): rewrote in a way that ensures that each case is
546 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -isEqual:otherUser]): new
549 * UI/Scheduler/UIxTaskEditor.m ([-acceptAction])
550 ([-declineAction]): commented out unused methods.
552 * UI/MailPartViewers/UIxMailPartICalActions.m
553 ([UIxMailPartICalActions -deleteFromCalendarAction]): actually
554 delete the found object.
556 2007-11-18 Ludovic Marcotte <ludovic@inverse.ca>
558 * SoObjects/Mailer/SOGoMailBodyPart.m
559 SoObjects/Mailer/SOGoMailObject.m
560 UI/MailPartViewers/UIxMailPartViewer.m
561 Added support of messages containing non-textual
562 content and no parts.
564 * UI/MailerUI/UIxMailView.m
565 SoObjects/Mailer/SOGoMailObject.m
566 UI/Templates/MailerUI/UIxMailView.wox
567 Added support for the Reply-To header upon
570 2007-11-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
572 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]):
573 invoke saveComponent:.
575 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -hasOrganizer])
576 ([UIxComponentEditor -organizerName]): new template accessor
577 related to displaying the event's organizer.
578 ([-containsConflict:_component]): removed method.
579 ([UIxComponentEditor -takeValuesFromRequest:_rqinContext:_ctx]):
580 set RSVP to "TRUE" on each attendee.
582 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
583 -saveAction]): invoke saveComponent:.
585 * UI/MailPartViewers/UIxMailPartICalViewer.m
586 ([UIxMailPartICalViewer -isLoggedInUserTheOrganizer]): make use of
587 the -userIsOrganizer: category method.
588 ([-isLoggedInUserAnAttendee]): make use of -userIsParticipant:.
589 ([UIxMailPartICalViewer -hasSenderStatusChanged]): new template
590 accessor that determines whether the "Update" button should be
593 * UI/MailPartViewers/UIxMailPartICalActions.m
594 ([UIxMailPartICalActions -deleteFromCalendarAction]): implemented
596 ([UIxMailPartICalActions -updateUserStatusAction]): implemented
599 * UI/Common/UIxPageFrame.m ([UIxPageFrame
600 -setCssFiles:newCSSFiles]): new accessor that enables the
601 sub-templates to specify extra CSS files to load.
603 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
604 -homeFolderInContext:context]): cache the home folder of the user
605 object instead of the current user.
607 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
608 -deleteEntriesWithIds:ids]): invokes the "prepareDelete" optional
609 method if the child object implements it.
611 * SoObjects/SOGo/SOGoContentObject.m ([-setContentString:])
614 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
615 -setBaseDN:newBaseDNIDField:newIDFieldCNField:newCNFieldUIDField:newUIDFieldmailFields:newMailFieldsandBindFields:newBindFields]):
616 take a new "mailFields" parameter defining an array of fields
617 where to look at when searching the user's emails. It defaults to
618 the standard "mail" LDAP field.
620 * SoObjects/Appointments/SOGoAptMailICalReply.[hm]: new
621 SoComponent implementing a template for ITIP replies.
623 * SoObjects/Appointments/iCalPerson+SOGo.m ([iCalPerson
624 -mailAddress]): new method that returns a properly formatted email
625 address for the specified person entry.
626 ([iCalPerson -uid]): new method that tests whether the user is
627 known to the system and if so, returns its user id.
629 * SoObjects/Appointments/iCalPerson+SOGo.[hm]: new category module.
631 * SoObjects/Appointments/iCalEventChanges+SOGo.m
632 ([iCalEventChanges -sequenceShouldBeIncreased]): determine whether
633 the changes involved need a sequence inscrease, based on the
636 * SoObjects/Appointments/iCalEventChanges+SOGo.[hm]: new category
639 * SoObjects/Appointments/iCalEvent+SOGo.m ([iCalEvent
640 -isStillRelevant]): new overriden method determining the relevance
641 of the current event based on its end date.
643 * SoObjects/Appointments/iCalEvent+SOGo.[hm]: new category module.
645 * SoObjects/Appointments/iCalEntityObject+SOGo.m
646 ([iCalEntityObject -attendeeUIDs]): new category methods that
647 returns an array containing the uids of the system-know attendees.
648 ([iCalEntityObject -isStillRelevant]): new template method.
649 ([iCalEntityObject -itipEntryWithMethod:method]): clone the
650 current entry calendar with the specified ITIP method.
651 ([iCalEntityObject -attendeesWithoutUser:user]): returns an array
652 of attendees while making sure the specified user is not listed.
654 * SoObjects/Appointments/SOGoCalendarComponent.m
655 ([SOGoCalendarComponent -calendar:create:secure]): new name for
656 -calendar:. Added a "secure" parameter that specifies whether a
657 stripped calendar instance is needed or not. Also, we no longer
658 cache the content to simplify handling of new data.
659 ([SOGoCalendarComponent -component:create:secure]): same as above.
660 ([SOGoCalendarComponent
661 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
662 test whether the component is "still relevant" before sending an
664 ([SOGoCalendarComponent -sendResponseToOrganizer]): new method for
665 sending ITIP replies.
666 ([SOGoCalendarComponent -getUIDsForICalPerson:iCalPerson]):
667 removed method. Replaced with -[iCalPerson uid] category method.
669 * SoObjects/Appointments/SOGoAppointmentObject.[hm]: rewrote
670 class. No longer override saveContentString:,
671 saveContentString:baseSequence:, .... Implemented the
672 saveComponent: and the prepareDelete methods instead. Those
673 methods are called only from the web methods. This avoids the
674 risks related to email sending and changes propagation.
676 * UI/Common/UIxTabItem.m: removed useless class module.
678 * UI/Common/UIxTabView.[hm]: removed useless class module.
680 * UI/Common/UIxPrintPageFrame.m: removed useless class module.
682 * UI/Common/UIxAppNavView.m: removed useless class module.
684 2007-11-16 Ludovic Marcotte <ludovic@inverse.ca>
686 * SoObjects/Mailer/SOGoMailBaseObject.m
689 * SoObjects/Mailer/SOGoMailBodyPart.m
690 We also grok image/jpeg and return the SOGoMailBodyPart
691 for attachments fetching.
693 * SoObjects/Mailer/SOGoMailObject+Draft.m
694 Prevent a crash in case body decoding failed during
697 * SoObjects/Mailer/SOGoMailObject.m
698 Improved body decoding during a reply to also try
699 latin1 as an encoding.
701 * UI/MailPartViewers/UIxMailRenderingContext.m
702 Greatly improved the display mechanisms for emails.
703 Also properly consider the content disposition for
706 * UI/MailerUI/UIxMailToSelection.m
707 Removed worthless code.
709 * UI/WebServerResources/MailerUI.css
710 CSS fix for table views.
712 2007-11-15 Ludovic Marcotte <ludovic@inverse.ca>
714 * UI/WebServerResources/MailerUI.js
715 We now check for empty selection and warn the
716 user about it when deleting messages
718 * SoObjects/Mailer/SOGoDraftObject.m
719 Correctly check for the presence of a subject
720 before attempting to forward a message from
723 * SoObjects/Mailer/SOGoMailObject+Draft.m
724 We no longer use "[Fwd: ]" but simply "Fwd:"
725 when forwarding email messages.
727 * SoObjects/SOGo/SOGoUser.m
728 Modified the default forwarding format to be
729 inline instead of "attachment".
731 * SoObjects/Mailer/SOGoDraftObject.m
732 We now create and use a NGMimeContentDispositionHeaderField
733 in order to avoid encoding the whole Content-Disposition
734 header in case a non-ASCII char is present!
736 2007-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
738 * SoObjects/SOGo/iCalEntityObject+Utilities.m ([iCalEntityObject
739 -findParticipant:user]): new method based on the one removed from
740 SOGoCalendarComponent below.
742 * SoObjects/SOGo/iCalEntityObject+Utilities.[hm]: new category
743 module for iCalEntityObject.
745 * SoObjects/Appointments/SOGoCalendarComponent.m
746 ([-findParticipant:user]): removed method.
748 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
749 -setContentString:newContent]): new accessor method.
751 -saveContentString:newContentbaseVersion:newBaseVersion]): invoke
752 -[self setContentString:].
754 * UI/MailPartViewers/UIxMailPartICalViewer.m
755 ([UIxMailPartICalViewer -authorativeEvent]): returns the most
757 ([-isLoggedInUserTheOrganizer]): make use of -[SOGoUser
760 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
761 -stringByConvertingCRLNToHTML]): fixed crashes due to overflows in
762 temporary buffer we are handing.
764 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
765 -setComponent:newComponent]): check that newComponent is non-nil
766 before replacing the default values.
767 ([UIxComponentEditor -calendarList]): privacy is already an ivar.
768 We don't need to refetch it.
770 2007-11-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
772 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
773 -fetchMailForReplying:sourceMailtoAll:toAll]): remove the current
774 user from the list of recipients and make sure no other address is
777 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
778 -stringByConvertingCRLNToHTML]): build the returned NSString
779 without the ending \0.
781 2007-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
783 * UI/MailPartViewers/UIxMailPartICalViewer.m
784 ([UIxMailPartICalViewer -acceptLink])
785 ([UIxMailPartICalViewer -declineLink])
786 ([UIxMailPartICalViewer -tentativeLink]): removed useless methods.
788 * UI/MailPartViewers/UIxMailPartICalAction.m
789 ([UIxMailPartICalAction -addToCalendarAction])
790 ([UIxMailPartICalAction -deleteFromCalendarAction]): new stub
793 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
794 -lookupImap4BodyPartKey:]): make use of the new method below.
796 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
797 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): new method
798 that returns an appropriate Class depending on a given mime type.
800 * UI/SOGoUI/UIxComponent.m ([UIxComponent -canCreateOrModify]):
801 new boolean accessor that determines whether someone can create
802 (i.e. modify a new entry) or modify an existing entry.
804 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
805 -lookupName:lookupNameinContext:localContextacquire:acquire]):
806 overriden method to bind looked up keys to So methods but by
807 avoiding a call to toOneRelationshipKeys. This will be the top
808 method of the chain, meant to override SoObject's behaviour.
810 * SoObjects/Contacts/SOGoContactLDAPFolder.m
811 ([SOGoContactLDAPFolder
812 -lookupName:objectNameinContext:lookupContextacquire:acquire]):
813 removed hack to prevent [super lookupName...] to read the entire
814 LDAP directory when looking up a record.
816 2007-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
818 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
819 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
822 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
823 ([UIxMailPartHTMLViewer -_attachmentIds]): the reference was one
824 character too short, which cause the images not to be displayed
825 sometimes and crashes to happen whenever the references on a
826 message were wrong (due to bugs in SOPE).
828 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
829 -hasMessageAttachment]): consider an attachment any content that
830 has a non-nil disposition.
832 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
833 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
834 fixed method to make use of the parameters instead of the useless
835 remains that weren't even initialized.
837 * SoObjects/Appointments/SOGoAppointmentObject.m
838 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
839 don't propagate the event among the attendees if this is not an
841 ([SOGoAppointmentObject -deleteWithBaseSequence:]): same as above.
843 * Main/SOGo.m ([SOGo -authenticatorInContext:context]): make use
844 of the new category method below.
846 * SoObjects/SOGo/WORequest+SOGo.m ([WORequest
847 -handledByDefaultHandler]): new method that returns whether this
848 is an "so" or alike request.
850 * SoObjects/SOGo/WORequest+SOGo.[hm]: new category module.
852 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
853 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
854 write the new folder's name in the folder cache.
856 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
857 -calendars]): same as below.
859 * UI/Contacts/UIxContactsListViewContainer.m
860 ([UIxContactsListViewContainer -currentContactFolderName]):
861 translate the display name if its the default one.
863 * SoObjects/Appointments/SOGoAppointmentFolder.m
864 ([SOGoAppointmentFolder -create]): overriden method that invokes
865 its ancestor and then activate itself within the user settings.
867 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
868 -appendPersonalSources]): when the user is the owner of the
869 current folder, we create the "personal" folder if it doesn't
870 exist by invoking "create".
872 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
873 -primaryFetchProfile]): when no row is returned, we initialize
874 "values" to a new dictionary. This solves a bug where the defaults
875 would not be initialized properly.
877 2007-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
879 * SoObjects/SOGo/SOGoGCSFolder.m ([-compare:otherFolder]): method
880 moved into the SOGoFolder class.
882 * SoObjects/Appointments/SOGoAppointmentObject.m
883 ([SOGoAppointmentObject -saveContentString:_iCalinUIDs:_uids]):
884 simplified method by directly building a similar appointment
885 object with the current folder as container.
887 * SoObjects/Contacts/SOGoContactLDAPFolder.m
888 ([SOGoContactLDAPFolder
889 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
890 take the content of an object returned by
891 lookupName:inContext:acquire: instead of the dictionary passed as
892 parameter since it represents a flattened entry return by
893 lookupContactsWithFilter...
895 * SoObjects/Contacts/SOGoFolder+CardDAV.m: NSObject+CardDAV
896 category renamed to SOGoFolder+CardDAV.
898 * SoObjects/SOGo/SOGoParentFolder.m: no longer a subclass of
899 SOGoObject, but of SOGoFolder instead.
901 * SoObjects/SOGo/SOGoUserFolder.m: no longer a subclass of
902 SOGoGCSFolder, but of SOGoFolder instead.
904 * SoObjects/Appointments/SOGoAppointmentFolder.m
905 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): fixed
906 to take the new SOGoParentFolder class into account. Also, create
907 the personal folder if it doesn't exist.
909 * SoObjects/SOGo/SOGoFolder.[hm]: new class module implementing
910 the parent of all SOGo containers.
912 * SoObjects/SOGo/SOGoGCSFolder.[hm]: SOGoFolder class renamed to
915 2007-11-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
917 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection
918 -getAddressesFromFormValues:_dict]): take NSString and NSArray
919 values. Ignore addresses with a length of 0.
921 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -mailAccounts]): we now
922 fetch the accounts from the user defaults and create default
925 2007-11-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
927 * UI/MailPartViewers/UIxMailPartTextViewer.m
928 ([UIxMailPartTextViewer -flatContentAsString]): re-added
929 conversion of line-break to sequences of HTML "BR", with a fast
932 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
933 -flatContentAsString]): simplified method now that we know
934 -[NSString stringWithData:usingEncodingNamed:] has a more robust
937 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
938 -showToAddress]): the answer is cached.
940 * UI/Common/UIxObjectActions.m ([UIxObjectActions +initialize]):
941 read "SOGoACLsSendEMailNotifications" from the user defaults to
942 determiner whether to send an email when a user is added or
943 removed from an object's acl.
945 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
946 -contentForEditing]): make sure the htmlContent flag is set to NO
947 when we select the textual part. Also we select only the relevant
950 * UI/MailerUI/WOContext+UIxMailer.m ([-mailSubjectFormatter]):
953 * UI/MailerUI/UIxMailView.m ([UIxMailView -messageSubject]): new
954 method replacing -objectTitle, written like the ones below.
956 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
957 -messageSubject]): rewrote method to act the one below.
959 * UI/MailPartViewers/UIxMailPartMessageViewer.m
960 ([UIxMailPartMessageViewer -messageSubject]): new method that
961 returns the decoded mail subject or "Untitled" if the subject is
964 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
965 -decodedSubject]): new method that invoke -decodedSubject from the
966 NSString and NSData class, depending on the identity of the
967 subject obtained from the envelope.
969 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
970 -subjectForReply]): take the value of -[SOGoMail decodedSubject]
971 instead of the subject of the envelope.
972 ([SOGoMailObject -filenameForForward]): same as above.
973 ([SOGoMailObject -subjectForForward]): same as above.
975 * SoObjects/Mailer/NSString+Mail.m ([NSString -decodedSubject]):
976 same as below for NSString.
978 * SoObjects/Mailer/NSData+Mail.m ([NSData -decodedSubject]): new
979 method that decodes the subject of a mail taken as an NSData
980 instance. Handling the exceptions and the badly formatted headers.
982 * UI/MailerUI/UIxSubjectFormatter.[hm]: dropped class module.
984 2007-11-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
986 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
987 -deleteEntriesWithIds:ids]): make sure the objects returned by
988 lookupName:... are not instances of NSException.
990 2007-11-03 Ludovic Marcotte <ludovic@inverse.ca>
992 * UI/Scheduler/UIxAppointmentEditor.m
993 Fixed monthly recurrences support.
995 2007-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
997 * SoObjects/Appointments/SOGoAppointmentObject.m
998 ([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
999 sent when modifying an event, when the event was considered
1000 relevant. The same thing is now implemented for event deletion.
1002 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1003 -primaryFetchProfile]): make sure that the deserialized "values"
1004 is an instance of NSMutableDictionary, otherwise we override it
1007 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1008 -contentForReply]): make use of the SOGoMailReply WO page.
1010 * SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
1011 from SOGoMailForward to handle mail replies instead. Only three
1012 methods remaining: date, from and messageBody. The latter is
1015 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1016 -fetchMailForForwarding:sourceMail]): fetch attachments for
1019 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1020 -hasMessageAttachment]): initialize hasAttachment with "NO" to
1021 avoid false positives.
1023 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
1024 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
1025 set title to an empty string where the event/task summary is null.
1027 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1028 -setHeaders:newHeaders]): make sure there is a message id in the
1029 headers dictionary, if not, generate one.
1030 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
1031 message id from the existing draft.
1032 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
1033 message id in the header map.
1035 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1036 -deleteFolderAction]): no longer prefix the target folder with
1039 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1040 -listMailboxesAction]): base the folder type on the folder
1043 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1044 -lookupName:_keyinContext:acquire:_acquire]): compare the full
1045 traversal to the potential looked up folder with the special
1046 folder names and return an object with the appropriate
1047 SOGoMailFolder subclass.
1049 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1050 -traversalFromMailAccount]): don't prepend the whole string with
1053 * SoObjects/Mailer/SOGoMailAccount.m
1054 ([-lookupSentFolder:_keyinContext:_ctx])
1055 ([-lookupDraftsFolder:_keyinContext:_ctx])
1056 ([-lookupTrashFolder:_keyinContext:_ctx])
1057 ([-lookupFiltersFolder:_key:_ctx]): removed methods.
1058 ([SOGoMailAccount -inboxFolderNameInContext:])
1059 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1060 ([SOGoMailAccount -sentFolderNameInContext:])
1061 ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
1062 the resulting name with "prefix" since we might return a nested
1064 ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
1065 names with "/". Sorts the resulting folder list with
1066 localizedCaseInsensitiveCompare: instead of
1067 caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
1068 that were removed, instead, we choose the appropriate class
1069 depending on the folder name. And since we are in SOGoMailAccount,
1070 we don't have to compute a traversal path to match the key with
1073 -folderWithTraversal:traversalandClassName:className]): new method
1074 that returns an instance of the specified SOGoMailFolder subclass,
1075 based on the traversal path passed as parameter.
1076 ([SOGoMailAccount -inboxFolderInContext:_ctx])
1077 ([SOGoMailAccount -draftsFolderInContext:_ctx])
1078 ([-sentFolderInContext:_ctx])
1079 ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
1080 -folderWithTraversal:andClassName: method described above.
1082 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1083 -primaryFetchProfile]): make use of -[NSPropertyListSerialization
1084 propertyListFromData:mutabilityOption:format:errorDescription:] to
1085 deserialize the plist. Removed variant for libFoundation since it
1086 should support the above.
1087 ([AgenorUserDefaults -generateSQLForInsert])
1088 ([AgenorUserDefaults -generateSQLForUpdate]): make use of
1089 -[NSPropertyListSerialization
1090 dataFromPropertyList:format:errorDescription:] to serialize the
1091 plist. Removed variant for libFoundation since it should support
1092 the above. Escape the backslashes from the resulting string.
1094 2007-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1096 * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
1097 SOGoMailFolder: SOGoMailSpecialFolder.
1099 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1100 -traversalFromMailAccount]): overridden method that returns the
1101 initialized mutable string.
1102 ([SOGoMailAccount -allFolderPaths]): take the special folder paths
1103 with -traversalFromMailAccount and reposition them at the
1104 beginning of the list. By creating the special folders during that
1105 request, we also make sure that the folder exists thanks to the
1106 new initialisation method of the new "SOGoSpecialMailFolder"
1108 ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
1110 ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
1112 ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
1113 longer use lookupImap4Folder.
1114 ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
1117 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1118 -traversalFromMailAccount]): new method that returns the full
1119 IMAP4 path to the object.
1121 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
1122 "superUsernames" after fetching it from the ud.
1124 2007-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1126 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1127 -eventsListAction]): substitude the start and end date with their
1128 UTC counterpart, taking into account the offset from UTC related
1129 to those dates instead of the current one. This renders
1130 -[UIxCalMainView -userUTCOffset] obsolete because the computings
1131 that occured in javascript are now done server-side.
1133 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
1134 removed obsolete method.
1136 * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
1137 method converting html content to plain text.
1139 * SoObjects/Mailer/NSString+Mail.[hm]: new category module
1140 enhancing NSString with utility methods pertaining to mail handling.
1142 * SoObjects/Mailer/SOGoMailObject.m
1143 ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
1145 -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
1146 modified method to be always recursive and to take an array of the
1147 accepted mime-types as parameter. The returned array now contains
1148 the mime-type as well as the part keys.
1150 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1151 -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
1152 ([SOGoMailObject -contentForEditing]): rewrote method to take into
1153 account the first text/plain part or the first text/html part
1154 converted to text/plain with our new -[NSString htmlToText]
1157 * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
1158 "replyToAll:" with YES as parameter instead of NO.
1160 2007-10-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1162 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1163 -davContentType]): ignore any possible parameter taken from the
1164 mime-info of the body part.
1166 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1167 -lastFirstMessageNumber]): new accessor that returns the first
1168 message number of the last series of messages.
1169 ([UIxMailListView -fetchKeys]): request the bodystructure for each
1171 ([UIxMailListView -hasMessageAttachment]): extract the attachment
1172 information from the message bodystructure.
1174 2007-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1176 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1177 -GETAction:]): use the "application/octet-stream" mime type for
1178 elements of type "application/x-xpinstall" to avoid confusing
1181 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
1182 ([UIxPreferences -itemMessageCheckText])
1183 ([UIxPreferences -userMessageCheck])
1184 ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
1185 methods for handling the retrieval of new messages automatically.
1187 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
1188 that returns the interval of time between automatic message
1191 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1192 -defaultAction]): now expunges the last folder marked for expunge.
1194 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1195 -trashInContext:_ctx]): now marks the container folder for
1198 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1199 -markForExpunge]): new method that marks the folder for the next
1200 automatic expunge operation in the user settings.
1201 ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
1202 takes the last folder marked for expunge, expunges it and removes
1203 it from the user settings, if it exists.
1205 2007-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1207 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1208 -messageSubjectCellStyleClass]): added support for replied,
1209 forwarded, forwarded and replied mails.
1211 * SoObjects/Mailer/NSData+Mail.m ([NSData
1212 -bodyDataFromEncoding:encoding]): new utility method that decodes
1213 the NSData instance properly depending on the encoding string
1214 passed as parameter.
1216 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1217 -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
1219 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1220 -stringForData:_datapartInfo:_info]): simplified by invoking
1221 -bodyDataFromEncoding: from our new NSData category methods.
1223 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1224 -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
1225 where only the body part of the first of the keys fetched was
1226 returned. Also decodes the body parts properly following their
1229 * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
1230 extends the NSData class with utility methods useful for handling
1233 2007-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1235 * SoObjects/SOGo/NSArray+Utilities.m
1236 ([NSArray -stringsWithFormat:format]): replace instances of NSNull
1239 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1240 -keysWithFormat:keyFormat]): replace instances of NSNull with
1243 * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
1244 empty, use "c_cn" instead.
1246 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1247 ([SOGoMailAccount -draftsFolderInContext:_ctx])
1248 ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
1249 of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
1250 no always be specified from the root instead of sometimes from the
1253 2007-10-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1255 * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
1256 ([UIxPageFrame -productLocalizableStrings]): invoke the new
1257 +[SOGoUser language] method if the user is nil.
1259 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
1260 that returns any generically-found language.
1261 ([SoUser -language]): modified to call the above.
1262 ([SOGoUser -language]): modified to call the above if the user
1263 language has a null length.
1265 * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
1266 -davEntityTag]): modified to return the "hash" of the vCard string.
1268 * UI/MailerUI/UIxMailActions.m ([UIxMailActions
1269 -removeAllLabelsAction]): new method that removes all label flags
1270 from the associated message.
1271 ([UIxMailActions -addLabel1Action]
1272 [UIxMailActions -addLabel2Action]
1273 [UIxMailActions -addLabel3Action
1274 [UIxMailActions -addLabel4Action]
1275 [UIxMailActions -addLabel5Action]): new methods that adds label
1276 flags to the associated message.
1277 ([UIxMailActions -removeLabel1Action]
1278 [UIxMailActions -removeLabel2Action]
1279 [UIxMailActions -removeLabel3Action
1280 [UIxMailActions -removeLabel4Action]
1281 [UIxMailActions -removeLabel5Action]): new methods that removes
1282 label flags from the associated message.
1284 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
1285 new accessor that returns the labels associated with the message.
1287 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1288 -allFolderPaths]): new method that returns all the paths of all
1289 the subfolders of the folder object.
1290 ([SOGoMailFolder -allFolderURLs]): new method replacing
1293 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1294 -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
1295 role from its parent folder.
1297 2007-10-19 Francis Lachapelle <flachapelle@inverse.ca>
1299 * SoObjects/SOGo/SOGoUser.m
1300 ([SOGoUser -rolesForObject:objectinContext:context]): allow
1301 multiple super usernames to be defined. The user default
1302 SOGoSuperUsername is renamed SOGoSuperUsernames and must be
1305 2007-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1307 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1308 -userInContext:]): override the super method by returning
1309 anonymous if the super returns nil.
1311 * UI/Common/UIxPageFrame.m ([UIxPageFrame
1312 -productLocalizableStrings]): new method that returns the
1313 product-specific translation dictionary as a JSON hash.
1314 ([UIxPageFrame -commonLocalizableStrings]): same as above but for
1315 the "Common" framework.
1316 ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
1317 the requestor components to require additional Javascript files.
1318 This is useful now that all the scripts are loaded at the end of
1320 ([UIxPageFrame -additionalJSFiles]): new getter related to the
1323 2007-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1325 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
1326 implemented new web method.
1328 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1329 -copyToFolderNamed:folderNameinContext:]): new method with the
1330 code cut/pasted from -moveToFolderNamed:inContext:.
1331 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
1332 modified to use the code from -copyToFolderNamed:inContext:, which
1333 is common between the two actions.
1335 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1336 ([SOGoMailAccount -sentFolderNameInContext:])
1337 ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
1338 the user settings into account.
1340 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
1341 ([UIxMailFolderActions -setAsSentFolderAction])
1342 ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
1343 that change the purpose of the active folder to "Sent", "Drafts"
1346 * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
1347 returns the subject as quoted-printable.
1349 * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
1350 SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
1351 the "aclMethod" method for the subsequent language-dependent
1354 * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
1355 returns the subject as quoted-printable.
1357 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1358 -dealloc]): release item, aptStartDate and aptEndDate.
1360 2007-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1362 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1363 -initWithName:newNameinContainer:newContainer]): the owner of a
1364 shared folder is set to "nobody" by default.
1366 * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
1367 that returns whether the object has an owner or not.
1369 2007-10-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1371 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1372 the folder even if the current user is not its owner.
1374 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
1376 * We now send advisory emails when folders
1377 are created / deleted.
1379 * Fixed the sending of advisory emails upon
1380 ACL changes on folders.
1382 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
1384 * UI/Scheduler/UIxComponentEditor.m
1385 Implemented event/task priority support.
1387 * SoObjects/Contacts/SOGoContactGCSFolder.m
1388 Added CardDAV support.
1390 * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
1391 Implemented From: based on LDAP results based on
1392 the MailFieldNames attribute (an array) specified
1393 in every LDAP-based authentication sources.
1395 * UI/MailPartViewers/UIxMailPartTextViewer.m and
1396 UI/WebServerResources/MailerUI.css
1397 We avoid replacing "\r\n" and "\n" with <br /> and
1398 rather use CSS capabilities for proper formatting.
1399 This is _WAY_ faster on very large mails.
1401 2007-10-10 Francis Lachapelle <flachapelle@inverse.ca>
1403 * UI/Scheduler/UIxComponentEditor.m
1404 ([UIxComponentEditor -componentCalendar]): returns the calendar
1405 object of the current event.
1407 2007-10-05 Ludovic Marcotte <ludovic@inverse.ca>
1409 * UI/WebServerResources/MailerUI.js
1410 We check if at least one message is selected
1411 before performing a Reply/Reply All/Forward
1413 * SoObjects/Appointments/SOGoAppointmentFolder.m
1414 and others - implemented support for recurring
1415 events (with some known limitations right now,
1416 all soon to be fixed).
1418 2007-10-04 Francis Lachapelle <flachapelle@inverse.ca>
1420 * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
1421 the constraint that a username can't start with a digit.
1423 2007-10-02 Francis Lachapelle <flachapelle@inverse.ca>
1425 * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
1426 repository to Inverse's branch.
1428 2007-09-28 Francis Lachapelle <flachapelle@inverse.ca>
1430 * SoObjects/Mailer/SOGoDraftObject.m
1431 ([SOGoDraftObject -isValidAttachmentName:_name]): removed
1432 constraint on space in file name.
1433 ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
1434 now removes from file name all characters preceding a backslash.
1435 This happens with IE7 because the complete attachment file path
1438 2007-09-25 Francis Lachapelle <flachapelle@inverse.ca>
1440 * SoObjects/Appointments/SOGoAptMailNotification.m
1441 ([SOGoAptMailNotification -appointmentURL]): set personal as the
1442 default calendar where to add the event.
1444 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1445 activate the SOGoUIxDefaultModule user defaults.
1447 2007-09-21 Francis Lachapelle <flachapelle@inverse.ca>
1449 * UI/SOGoUI/UIxComponent.m
1450 ([UIxComponent -shortUserNameForDisplay]): returns the string
1451 "wrongusernamepassword" when authentication failed.
1453 2007-09-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1455 * UI/MailPartViewers/UIxMailPartICalViewer.m
1456 ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
1457 entry of the Calendars parent folder.
1459 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1460 -messageSubject]): new accessor method to work-around a problem
1461 within SOPE where a subject could be returned as an NSData.
1463 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1464 -appendPersonalSources]): make sure the value of the "c_path4" of
1465 the returned rows are not NSNull, otherwise, discard them.
1467 2007-09-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1469 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1470 -compare:otherFolder]): new overriden method that compares two
1471 contact foldes based on their class and then transfer the control
1472 to the super method in SOGoFolder.
1474 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1475 ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
1476 compare two contact folders based on their class and then their
1479 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
1480 new method for sorting folders. The folders are compared based on
1481 their ownership, whether they are a main folder and finally
1482 depending on their display name.
1484 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1485 -pathArrayToSOGoObject]): do not reorder the paths if the third
1486 element is an instance of NSNull.
1488 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1489 -subFolders]): returns a sorted array using the "compare:"
1492 2007-09-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1494 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1495 -calendars]): also returns the owner of the listed folders.
1497 * SoObjects/Appointments/SOGoAppointmentFolder.m
1498 ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
1500 * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
1501 method into UIxFolderActions.
1503 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1504 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
1505 freebusy info from the "personal" calendar.
1507 * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
1508 -createFolderAction]): new standardized method for requesting
1509 folder creations among gcs-based modules.
1511 * UI/Common/UIxParentFolderActions.[hm]: new action class module.
1513 * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
1514 module, equivalent to the SOGoParentFolder's child
1515 SOGoContactFolders, but for calendars.
1517 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
1518 method that returns translated strings for controller bundles
1519 (same as what UIxComponent does for view bundles).
1520 ([SOGoObject -pathArrayToSOGoObject]): new method that returns
1521 the real path to a subscribed folder (if subscribed).
1522 ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
1523 ([SOGoObject -globallyUniqueObjectId]): new instance method
1524 calling its class equivalent.
1526 2007-09-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1528 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
1529 whether the user is logged in and if so, redirect to his/her
1531 ([SOGoRootPage -appendToResponse:inContext:]): removed useless
1534 2007-09-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1536 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1537 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1539 ([SOGoFolder -displayName]): new method.
1540 ([SOGoFolder -delete]): accept to proceed only if nameInContainer
1543 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1544 ([SOGoContactLDAPFolder
1545 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1546 renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
1548 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1549 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1550 removed method, reimplemented in SOGoFolder.
1551 ([SOGoContactGCSFolder -displayName]): removed method,
1552 reimplemented in SOGoFolder.
1553 ([-delete]): removed method, modified in SOGoFolder.
1555 * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
1556 a subclass of SOGoParentFolder.
1558 * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
1559 from SOGoContactFolders and modified to be more content-independent.
1561 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
1562 ([UIxMailActions -markMessageReadAction]): new methods moved from
1563 UIxMailListView and adapted to invoke the client object directly,
1564 since the previous versions had to to a lookup from the parent
1567 * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
1568 method into UIxMailActions.
1569 ([-markMessageReadAction]): same as above.
1570 ([-viewAction]): removed useless method.
1571 ([-javaScriptOK]): removed useless method.
1572 ([-isJavaScriptRequest]): removed useless method.
1573 ([-lookupActiveMessage]): removed useless method.
1575 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1576 -responseWithStatus:status]): new method that returns a WOResponse
1577 initialized with the specified status code.
1578 ([WODirectAction -responseWith204]): new method that invokes the
1579 above one with "204" as parameter.
1580 ([WODirectAction -redirectToLocation:newLocation]): rewrote method
1581 to make use of -responseWithStatus:.
1583 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
1584 method that returns a WOResponse initialized with the 204 status
1587 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
1588 always use a "not deleted" search qualifier along with the user
1589 qualifier (if present).
1591 2007-09-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1593 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1594 -contactSearchAction]): only return the records which have an
1597 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1598 -trashInContext:_ctx]): no longer expunge the mailbox after
1599 marking a message deleted.
1600 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
1603 * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
1604 ([-trashAction]): moved method into UIxMailActions.
1605 ([-moveAction]): moved method into UIxMailActions.
1607 2007-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1609 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1610 ([_UIxHTMLMailContentHandler
1611 -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
1612 comments from the CSS code, do not add the CSS code to the body
1613 content and remove references of body from the CSS declarations.
1614 ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
1615 ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
1616 common with cssContent in a different method and invoke it only
1619 * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
1620 instead of UIxPageFrame.
1622 2007-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1624 * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
1625 ([-appendToResponse:responseinContext:ctx]): commented out.
1626 ([SOGoRootPage -connectURL]): new accessor that returns the full
1627 url the the "connect" method.
1628 ([-connectAction]): rewrote method to return a properly formatted
1629 auth. cookie based on the username and password passed as
1632 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1633 set the value of the cookie to "discard" and set its expiration
1636 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1637 -preprocessCredentialsInContext:context]): consider the user
1638 anonymous if the cookie value is "discard".
1639 ([SOGoWebAuthenticator
1640 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1641 set the expiration date of the cookie to yesterday.
1643 * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
1644 returns the path to the application if the clientObject is not a
1647 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
1648 moved the requirement of authentication from the SOGo application
1651 * SoObjects/Appointments/SOGoAppointmentObject.m
1652 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
1653 check whether the new appointment object is still relevant before
1654 sending a notification.
1656 2007-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1658 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1659 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1660 render the login page through the SoDefaultRenderer.
1662 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
1663 -isPublicInContext:localContext]): new overriden method that
1666 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1667 -currentCalendarLogin]): replace css-unsafe characters with _.
1669 * UI/SOGoUI/UIxComponent.m ([UIxComponent
1670 -shortUserNameForDisplay]): simplified method.
1671 ([-user]): removed method since [context activeUser] is as useful.
1673 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1675 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1676 set the cookie path to "/".
1678 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
1679 authenticator based on the request handler key. "dav" returns the
1680 SOGoDAVAuthenticator, anything else returns the Web authenticator.
1682 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
1683 "SOGoAuthenticator".
1685 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
1686 implementing a subclass of SoCookieAuthenticator, designed for
1687 web-based cookie authentication of users.m
1689 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1690 new method that resets the authentification cookie.
1692 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1694 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
1695 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
1696 didBind to NO to make sure no false authentication is returned if
1697 the bind operation is not executed.
1699 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1701 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
1702 "In-Reply-To" header field when replying.
1704 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
1705 table field names that are queried.
1707 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1708 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
1709 add the "c_" prefix to the quick table field names that are
1712 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1714 * SoObjects/Appointments/SOGoAppointmentFolder.m
1715 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
1716 "personal" to the ocs path of the appointment folder.
1718 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1719 -flatContentAsString]): use latin1 when the encoding is not
1720 specified, and to reencode data chunk which were not correctly
1721 decoded with the original charset.
1723 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
1724 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
1725 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
1726 ([SOGoAppointmentFolder
1727 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
1728 override those methods to use the "personal" additional directory.
1730 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
1731 append "/personal" to the calendar path to simulate a single
1732 calendar in a choice of many.
1734 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1735 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
1736 methods back here. Moved the folder existence check here, and do
1737 it on self only when the lookup happens for a non-folder object.
1738 This permits to accept entries for folders with parents who
1741 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1743 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1744 -shouldTakeValuesFromRequest:requestinContext:context]): same as
1747 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1748 -shouldTakeValuesFromRequest:requestinContext:context]):
1749 redesigned method since any method called can be received from a
1750 POST or a GET. Instead we check the method call itself and we
1751 accept only if it has the "save" prefix.
1753 * SoObjects/Appointments/SOGoAptMailNotification.m
1754 ([SOGoAptMailNotification -getSubject]): returns the subject an a
1755 quoted-printable encoded string, if needed.
1757 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1758 -asQPSubjectString:encoding]): moved method into
1759 NSString+Utilities.m.
1761 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1763 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1764 -messageForwardingList])
1765 ([UIxPreferences -itemMessageForwardingText])D
1766 ([UIxPreferences -userMessageForwarding])
1767 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
1768 new template methods for manage the user preference regarding
1771 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
1772 algorithm to return, in order, the user's defined language or the
1773 first browser language or, finally, the default language.
1774 ([SOGoUser -messageForwarding]): new method that returns the user
1775 preference for message forwarding: "inline" or "attached",
1776 defaulting to "attached".
1778 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1779 -contentForInlineForward]): new method that returns the content of
1780 the message for inline forwarding based on the SOGoMailForward
1783 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1784 -fetchMailForForwarding:sourceMail]): check the user preference
1785 for message forwarding and compose inline forwarded messages if required.
1787 * SoObjects/Appointments/SOGoCalendarComponent.m
1788 ([SOGoCalendarComponent
1789 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1790 now use a template based on the language returned from the
1793 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
1794 a subclass of SOGoMailForward for English locale.
1796 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
1797 a subclass of SOGoMailForward for French locale.
1799 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
1800 helps build template for inline forwarded messages.
1802 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1804 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
1805 to handle "<var:if-ie>" template tags.
1807 * UI/SOGoElements: new extension bundle containing sogo-specific
1810 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1811 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
1812 selected in the dialog.
1813 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
1814 first category, if ever, of the calendar entity.
1816 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1817 -composeAction]): restored method since it is needed by the
1820 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1821 -composeAction]): the address fields should be arrays and not
1824 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
1825 that returns the build date of SOGo in the template.
1827 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1829 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1830 -_flattenedRecords:records]): when the c_cn field is empty,
1831 returns set a formatted string with the concatenation of
1832 c_givenname and c_sn as the displayName.
1834 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1835 -isValidMailAccountName:_key]): prevent unknown accounts from
1838 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1839 -pathToAttachmentObject]): we no longer need the filename
1840 extension for SoLookup...
1842 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1843 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
1844 filename to have an extension, and thus accept any filename.
1846 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1847 -currentCName]): new method that returns the c_name of the
1848 contact, correctly escaped to be passed by url afterwards.
1850 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1851 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
1852 instance of [self decodedFlatContent] instead of the buggy
1853 NSString from [super flatContentAsString] to the parser.
1855 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1857 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
1858 new category method to reponds to the "delete" web command on
1860 ([UIxMailActions -deleteAttachmentAction]): new category method to
1861 reponds to the "deleteAttachment" web command on drafts, taking
1862 the "filename" url parameter into account.
1864 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1865 -contentForEditing]): new method that retrieve the editable mail
1867 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
1868 returns the body keys for attached files (parts with a "filename"
1871 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1872 -asQPSubjectString:encoding]): do not change the string if the
1873 encoded string has the same length (which means it is already
1875 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
1876 that retrieve a draft along with its attachments for editing.
1877 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
1878 choke if the "to" header field is empty.
1879 ([SOGoDraftObject -delete]): new method to delete the draft folder
1880 whenever operations are done.
1882 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1884 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
1885 useless stub method, of which the intention was implemented in
1887 ([-lookupSentFolderUsingAccount]): removed obsolete method.
1888 ([-selectedMailIdentity]): removed obsolete method.
1889 ([-lookupSentFolderUsingFrom]): removed obsolete method.
1890 ([-storeMailInSentFolder:_path]): removed obsolete method, of
1891 which the mechanism has been put in -[SOGoDraftObject sendMail]
1893 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
1894 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
1895 adapted algorithms to the new SOGoDraftObject methods.
1896 ([-deleteAction]): removed method since local draft objects cannot
1897 be removed by the user.
1899 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1900 -expungeAction]): new method replacing the one previously found in
1902 ([UIxMailFolderActions -createFolderAction])
1903 ([UIxMailFolderActions -renameFolderAction])
1904 ([UIxMailFolderActions -deleteFolderAction])
1905 ([UIxMailFolderActions -emptyTrashAction])
1906 ([UIxMailFolderActions -subscribeAction])
1907 ([UIxMailFolderActions -unsubscribeAction]): error situations
1908 should have http return code 500 instead of 403.
1910 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1911 -composeAction]): new method replacing the one previously in
1914 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1915 -imap4URLString]): removed overriden method (see below).
1917 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
1918 cache the mailbox acl.
1919 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
1920 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
1922 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
1923 the new method of determining the users mail accounts.
1925 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
1926 longer adds a "/" at the end of the string (the default for
1927 folders), therefore this will be overriden in SOGoMailFolder
1928 rather than in SOGoMailObject.
1930 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
1931 method, moved into the new UIxMailActions module class.
1933 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
1934 -newDraft]): new method that returns a new SOGoDraftObject
1935 instance with a unique filename based on the current timestamp and
1936 the "newDraft" prefix.
1938 -lookupName:nameinContext:localContextacquire:acquire]): overriden
1939 method by detecting local drafts with their "newDraft" prefix.
1940 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
1942 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
1943 from scratch by making it a subclass of SOGoMailFolder.
1945 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
1948 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
1951 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
1954 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
1955 new method, initializing the new ivars: IMAP4ID, headers, text,
1956 sourceURL and sourceFlag.
1957 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
1958 ([-_ensureUserSpoolFolderPath])
1959 ([-saveMimeMessageToTemporaryFileWithHeaders:])
1960 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
1961 ([-deleteTemporaryMessageFile:], [-delete], [-content])
1962 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
1963 ([-uid], [-flags], [-size], [-envelope]): removed methods.
1964 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
1966 ([SOGoDraftObject -setSourceURL:newSourceURL])
1967 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
1968 methods to store the url of the original message between accesses
1969 so that, depending on the action taken (forward or reply), the
1970 correct flag can be given.
1971 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
1972 the imap4 id that is returned for the message whenever it is saved
1973 into the drafts folder.
1974 ([SOGoDraftObject -save]): new method that takes in charge the
1975 saving of the message in the IMAP drafts folder.
1976 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
1977 new method that fills the original data of the new message with
1978 the reply content of the original message.
1979 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
1980 above for message forwarding.
1981 ([-spoolFileManager]): removed useless method (only returned the
1982 default filemanager...)
1983 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
1984 the resulting message as an NSData chunk.
1986 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
1987 containing a rewrite of the mail action methods found in
1988 UI/Mailer/, that needed to be put in the SOGoMailObject class.
1989 ([SOGoMailObject -subjectForReply]): new method that returns a
1990 subject suitable for replies.
1991 ([SOGoMailObject -contentForReply]): new method that returns the
1992 textual content of an email, quoted for replying.
1993 ([SOGoMailObject -filenameForForward]): new method that returns
1994 the name of the filename that should contain the forwarded
1995 message, based on its subject.
1996 ([SOGoMailObject -subjectForForward]): explicit.
1998 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2000 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
2001 -mailAccounts]): rewrote method to return the name of the mail
2002 accounts now available with the -[SOGoUser mailAccounts] method.
2003 ([UIxMailMainFrame -showLinkBanner]): removed method.
2004 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
2005 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
2006 ([UIxMailMainFrame -rootURL]): removed method.
2007 ([UIxMailMainFrame -userRootURL]): removed method.
2008 ([UIxMailMainFrame -calendarRootURL]): removed method.
2009 ([UIxMailMainFrame -contactsRootURL]): removed method.
2010 ([UIxMailMainFrame -hasErrorText])
2011 ([UIxMailMainFrame -errorText])
2012 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
2013 ([-composeAction]): removed method. Now provided by
2014 UIxMailAccountActions.
2015 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
2016 ([UIxMailMainFrame -hideFolderTree]): removed method.
2017 ([UIxMailMainFrame -treeRootClassName]): removed method.
2018 ([UIxMailMainFrame +initialize]): removed method.
2019 SOGoMailTreeRootClass userdefaults will no longer have any effect.
2021 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
2022 -redirectToLocation:newLocation]): new method that implements the
2023 same functionality as WOComponent.
2025 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
2027 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
2028 method that returns whether the current mail is store in the
2029 drafts folder hierarchy.
2031 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
2032 ([-primaryEmail]): removed method.
2033 ([SOGoUser -primaryIMAP4AccountString]): removed method.
2034 ([SOGoUser -mailAccounts]): new method that returns an array
2035 containing description dictionaries for all the user mail
2036 accounts. Each account also contain the user's identities for that
2038 ([SOGoUser -allIdentities]): new utility method that returns all
2039 the user identities on all accounts.
2040 ([SOGoUser -primaryIdentity]): new method return the first
2041 identity of the first account.
2043 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
2045 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2046 -isInDraftsFolder]): returns NO.
2047 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
2049 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
2051 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2052 -isInDraftsFolder]): new method that detects if self is contained
2053 by the drafts folder by calling itself on the container object.
2055 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
2057 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
2058 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
2059 return the name of the mail accounts now available with the
2060 -[SOGoUser mailAccounts] method.
2062 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
2065 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
2068 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
2069 -keysWithFormat:format]): method that forward the method of the
2070 same name to each member of the array, considering they all are
2071 instances of NSDictionary.
2072 ([NSArray -objectsForKey:key]): same principle as above.
2073 ([NSArray -flattenedArray]): new method that transforms an array
2074 of arrays into a single array containing all the elements of the
2077 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
2078 -keysWithFormat:keyFormat]): new method inspired by the python
2079 string formatting system and which replaces occurences of "%{key}"
2080 by the corresponding keys.
2082 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2084 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
2085 sql script before the generic one when initializing mandatory
2088 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2090 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2091 -pureEMailAddress]): new utility method inspired by the
2092 "_rawSender" private method in SOGoDraftObject, which it now
2095 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
2096 provides a common API for sending emails, no matter what the
2099 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2101 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2102 -quotasAction]): invoke "relativeImap4Name" instead of
2103 "nameInContainer" since the latter also returns the "folder"
2106 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2107 -listMailboxesAction]): declare the output as text/plain in UTF-8.
2109 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2110 -deleteFolderAction]): fixed the url of the destination folder.
2112 * Main/SOGo.m ([SOGo +initialize]): show the build date and
2113 hostname at startup.
2115 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2117 * SoObjects/Appointments/SOGoCalendarComponent.m
2118 ([SOGoCalendarComponent
2119 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
2120 set the mail date to the current date string returned by our
2121 rfc822DateString extension method.
2123 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2124 -_gcsFoldersFromFolder:): ignore the personal folders who are
2125 returned but don't really exist.
2127 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
2129 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
2130 has to return only one element.
2132 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2134 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
2135 -content]): new method returning the decoded content of the
2136 corresponding attachment as an NSData instance.
2137 ([UIxMailPartViewer -filename]): if the "filename" parameter of
2138 the metadata parameterList is empty, try to find out the filename
2139 from the "disposition" metadata returned with the BODYSTRUCTURE
2142 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
2143 -composeAction]): prefix the INBOX folder with "folder".
2145 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
2146 -relativeImap4Name]): return nameInContainer stripped from its
2147 first 6 characters since all folder names are prefixed with
2150 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2151 -imap4URLString]): invoke -relativeImap4Name instead of
2152 "nameInContainer" since the former will return the fixed IMAP4
2153 foldername and the latter the SoObject name.
2155 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2156 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
2158 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
2159 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
2160 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
2161 ([SOGoMailAccount -sentFolderNameInContext:])
2162 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
2163 names with "folder".
2164 ([SOGoMailAccount -inboxFolderInContext:_ctx])
2165 ([SOGoMailAccount -sentFolderInContext:_ctx])
2166 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
2167 the folder names with "folder" since they are prefixed earlier.
2169 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2171 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
2172 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
2173 all starts with "folder".
2175 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
2176 longer declare security info from here.
2178 * SoObjects/Mailer/SOGoMailFolder.m
2179 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
2180 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
2181 folder names now always start with "folder".
2183 * SoObjects/Mailer/SOGoMailAccount.m
2184 ([-lookupName:inContext:acquire:]): folder names now always start
2187 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2189 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
2190 -forwardAction]): adapted to the new saveAttachment:withMetadata:
2193 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
2194 code to save the attached filenames with the filename returned by
2195 the web server as well as their mime types.
2197 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
2198 ([UIxMailPartMessageViewer -toAddresses])
2199 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
2200 the corresponding fields separated with a ", " (if needed).
2202 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
2203 -saveAttachment:_attachwithMetadata:metadata]): new method
2204 replacing -saveAttachment:withName: and which takes a dictionary
2205 as parameter with the filename and the mime type of the
2207 The mimetype is then saved in a hidden text file.
2208 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
2209 take the mime type from the hidden text file related to the
2212 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
2213 ([SOGoContactGCSFolder
2214 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2215 return records if the db records are > 0 and not just > 1...
2217 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2219 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
2221 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
2223 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2224 ([SOGoContactLDAPFolder
2225 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2226 translate the returned records to a normalized form.
2228 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2229 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2230 translate the returned records to a normalized form.
2232 * UI/Scheduler/UIxCalListingActions.m,
2233 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
2234 SoObjects/SOGo/AgenorUserDefaults.m,
2235 SoObjects/Contacts/SOGoContactGCSFolder.m,
2236 SoObjects/Appointments/SOGoAppointmentFolder.m,
2237 OGoContentStore/OCSiCalFieldExtractor.m,
2238 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
2239 table fields with "c_".
2241 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2243 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
2244 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
2245 the application settings. If set, both limit will influence the
2246 maximum size of the resultsets and the time taken to solve them.
2247 ([LDAPSource -_initLDAPConnection]): initialize the limits.
2249 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2251 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
2252 method that declares the DAV namespace related to CardDAV.
2253 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
2254 method that declares the "access-control" and "addressbook-access"
2255 classes to the list.
2257 * SoObjects/Appointments/SOGoAppointmentFolder.m
2258 ([-lookupActionForCalDAVMethod:]): removed method.
2259 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
2260 method that declares the DAV namespace related to CalDAV.
2262 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
2263 optional method for subclasses which handle specific extensions to
2264 the DAV protocol: CardDAV or CalDAV.
2266 -lookupName:lookupNameinContext:localContextacquire:acquire]):
2267 new overriden method that handles dav invocations for extensions
2268 to DAV by returning an appropriate SoSelectorInvocation.
2270 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2271 -asDavInvocation]): new method returning a dictionary with a "ns"
2272 key representing the dav namespace and a "method" key representing
2273 the dav method name of the request.
2275 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
2276 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
2278 ([UIxPreferences -shouldDisplayPasswordChange]): new template
2279 method that returns the value of SOGoUIxUserCanChangePassword.
2281 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
2282 scan the value of SOGoUIxDefaultModule. If not set, the default
2283 module defaults to "Calendar".
2284 ([SOGoUserHomePage -defaultAction]): redirect the user to the
2285 value of "SOGoUIxDefaultModule".
2287 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2289 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2290 -contactInfos]): cache the results to avoid multiple invocations.
2292 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2293 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
2294 really should return something or if we fake to return nil...
2296 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2298 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
2299 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
2300 default is set to "bypass".
2302 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2303 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
2304 when authMethod is set to "bypass" from now on. This would avoid a
2305 security concern with a default installation of SOGo.
2306 AuthentificationMethod is now prefixed with "SOGo" for better
2309 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2311 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2312 -quotasAction]): new method that returns a json representation of
2315 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2317 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2318 -imap4URL]): rewrote method to support accented mailbox names.
2319 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
2320 SOGoAuthenticator's passwordInContext:.
2322 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2323 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
2324 start and due dates to nil if hasStartDate and hasDueDate are
2327 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2328 -passwordInContext:context]): made method public.
2330 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2331 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
2332 to false to avoid a null violation.
2334 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2336 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2337 -contentAsString]): returns the message encoded in ISO Latin 1
2340 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
2341 SOGoSuperUsername user defaults.
2342 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
2344 ([SOGoUser -rolesForObject:objectinContext:context]): if the
2345 current user is the superuser, grant him/her the "owner" role.
2347 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
2348 the folder only if the current user is the owner of the future
2351 * SoObjects/Appointments/SOGoCalendarComponent.m
2352 ([SOGoCalendarComponent -contentAsString]): we return the content
2353 based on the permissions returned by the security manager instead
2354 of by looking at the user roles.
2356 * SoObjects/Appointments/SOGoAppointmentFolder.m
2357 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
2358 folders of the user to whom this folder belongs instead of the
2359 active user. This way, a delegate user will be able to have the
2360 same view that the original user has if he connects from his user
2363 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
2364 user exists before creating the SOGoUserFolder instance. If not,
2367 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
2368 return the message source code in plain text.
2370 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2371 -contentAsString]): returns the message encoded in UTF8.
2373 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2375 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
2376 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
2377 leading tagname into account when serializing the element values.
2379 * Main/SOGoProductLoader.m: only load bundle directories ending
2380 with the "SOGo" extension.
2382 * Main/SOGo.m ([SOGo
2383 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
2384 result set if the query has caused no exception. Otherwise we get
2385 an "evaluation is in progress exception".
2387 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2389 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2390 -generateSQLForInsert]): initialize error to nil before the
2391 serialization. Otherwise the method can get confused if it ever is
2392 initialized to something else.
2394 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
2395 -folderIsMandatory]): returns NO unconditionnally.
2397 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2398 -appendPersonalSources]): add the "personal" folder to the list of
2399 user folders even if it doesn't exist, so that it is created when
2400 the user accesses it.
2402 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2403 -folderIsMandatory]): returns YES if nameInContainer is set to
2404 "personal", which is the default address book.
2406 * SoObjects/Appointments/SOGoAppointmentFolder.m
2407 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
2408 users must have one Calendar folder (one and only one).
2409 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
2410 escaping '\' so make the carriage return a real one. This way,
2411 PgSQL 8 won't complain about escaping the string.
2413 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
2414 method that create the folder if considered mandatory.
2415 ([SOGoFolder -folderIsMandatory]): new method that determines
2416 whether the folder should be created automatically or not. To be
2417 overriden by subclasses.
2419 * Main/SOGo.m ([SOGo -run]): override method and create the
2420 missing system tables if needed.
2422 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2424 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
2425 -mailDateFormatter]): returns the user's date formatter.
2427 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
2428 applies the user timezone to the date object before returning it.
2430 * UI/Common/UIxSortButton.m: removed useless class module.
2432 * UI/Common/UIxSortableTableHeader.m: removed useless class
2435 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2436 -contactInfos]): use the "asc" url parameter instead of "desc" to
2437 determine the ordering.
2438 ([-sortOrdering]): removed method.
2439 ([UIxContactsListView -init]): removed the "searchText" ivar.
2440 (general): the template no longer use the UIxSortableTableHeader
2443 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
2444 -defaultSortKey]): default sort following the messages arrival
2445 instead of their date.
2446 ([-isSortedDescending]): removed method.
2447 ([-imap4SortOrdering]): use the "asc" url parameter instead of
2448 "desc" to determine the ordering.
2449 (general): the template no longer use the UIxSortableTableHeader
2452 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2454 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
2456 ([-setQualifier:_msg], [-qualifier]): removed methods.
2457 ([UIxMailListView -defaultAction]): added code to handle the
2458 search criteria and value passed as url parameters. Also, we now
2459 handle the same search criterias as Thunderbird/Icedove.
2461 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2463 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
2464 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
2465 the string instead of the string itself.
2466 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
2468 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
2469 bool var "acceptAnyUser" that is set when the AuthenticationMethod
2470 user default is nil.
2471 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
2472 unconditionnally returns an instance whenever acceptAnyUser is set.
2474 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2476 * Main/sogod.m (main): prevent SOGo from running as root.
2478 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2480 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2481 -setCurrentPassword:newPassword]): new stub method.
2482 ([SOGoUser -dateFormatterInContext:context]): new method that
2483 returns an instance of SOGoDateFormatter configured based on the
2486 * UI/Common/UIxPageFrame.m ([UIxPageFrame
2487 -relativePreferencesPath]): new method.
2489 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
2490 removed useless method.
2492 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
2493 different configurable formats (long and short date + time).
2495 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
2497 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2498 -isInternetRequest]): removed method.
2500 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2501 -jsonRepresentation]): new method with an explicit name.
2503 * UI/PreferencesUI/product.plist: new bundle that provides a web
2504 ui for handling user defaults.
2506 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
2508 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
2510 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
2512 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2514 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
2516 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2518 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
2519 -compareEventsAscending:otherEvent]): no longer use compare: on
2520 the time objects since one of them could be an NSNull, which
2521 crashes when comparing with anything.
2523 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2524 -eventsListAction]): sort events from here.
2525 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
2527 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
2528 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
2530 * SoObjects/Appointments/SOGoAppointmentFolder.m
2531 ([SOGoAppointmentFolder
2532 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
2533 no longer sort elements from here.
2535 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2537 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2538 -aclsForUser:uid]): implemented method by forwarding the request
2539 to the container. This fixes a bug where users could no longer
2540 read emails from shared folders.
2542 * SoObjects/Appointments/SOGoCalendarComponent.m
2543 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
2544 here, but rather in its parent class.
2546 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
2547 -stringForSecondsSinceThe70s:seconds]): new utility method.
2549 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2550 -eventsListAction]): no longer reduce the end day of one day for
2551 all day events since everything has been fixed in
2552 OCSiCalFieldExtractor.
2554 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2555 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
2556 the end date of all day events of 1 so that they stay on their
2559 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2561 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
2563 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
2565 ([-fetchCoreTasksInfos]): removed method.
2567 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2568 -init]): initialize an instance of SOGoDateFormatter.
2569 ([UIxCalListingActions -eventsListAction]): the display start and
2570 end dates are added to the listing for each event.
2572 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
2574 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2575 -isAllDay]): returns YES if the "hm" url parameter is set to
2577 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
2578 is displayed one day earlier.
2580 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2582 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2583 -_setupContext]): take the range of dates specified by the popup
2586 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
2587 WODirectAction that returns WOResponse objects with the events or
2588 todos satisfying the parameters passed in the url.
2590 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2591 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
2592 "isAllDay" into account and compute the amount of days to pass to
2595 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
2597 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
2598 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
2599 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
2600 new method that returns a json-formatted array of the visible tasks
2601 for the current user.
2603 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2605 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
2606 object must be present in the list of UIDs we delete the object
2607 from. Otherwise Calendar objects having no organizer and no
2608 attendees will remain in their owner's Calendar.
2610 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2611 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
2612 first 3 elements of the path array if the url returned by
2613 baseURLInContext: returns a hostname.
2615 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2616 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
2617 nil, in which case a crash happens when calling hasPrefix:.
2618 ([SOGoMailFolder -_sharesACLs]): same as above.
2619 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
2620 otherUsersFolderName is nil, we return nil.
2621 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
2622 nil from [self otherUsersPathToFolder], we return nil too.
2624 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2626 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2627 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
2628 the result of [self baseURLInContext:] to avoid a double escaping
2629 in the resulting string.
2631 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
2632 the user has the "ObjectReader" role on the parent container, then
2633 he is granted the "ObjectViewer" role on this object. Same for
2634 "ObjectEraser", although this might change later.
2636 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2637 -toolbar]): determine the toolbar filename based on the
2638 permissions declared by the securitymanager. The role mechanism
2639 has been adjusted on a lowerlevel so we can simplify the code.
2641 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2642 -initWithName:newNameinContainer:newContainer]): read the content
2643 directly from here. That way we can determine whether the object
2645 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
2646 the ObjectCreator role is enabled, we also grant the ObjectEditor
2647 role to the current user.
2649 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
2650 changed the method paradigm to only return HTTP code 204. Not test
2651 is done whatsoever since the security manager does it for us.
2653 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
2654 removed method because the same exists in UIxFolderActions.m
2656 * UI/Contacts/UIxContactsUserRightsEditor.m
2657 ([UIxContactsUserRightsEditor
2658 -setUserCanReadObjects:userCanReadObjects]): new method.
2660 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
2661 "FolderEraser" and special permission "Access Object". Removed
2662 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
2663 can be used instead. Removed "FolderReader" since it is useless.
2665 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2666 -vCard]): directly use the "content" ivar since it is initialized
2667 during object creation.
2669 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2670 ([SOGoContactLDAPFolder -init]): no longer handle the
2671 nameInContainer no the container ivars. They were removed because
2672 this class is a descendant of SOGoObject which already has them.
2673 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
2674 returning "displayName".
2675 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
2678 * SoObjects/Appointments/SOGoCalendarComponent.m
2679 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
2680 ([SOGoCalendarComponent -findParticipant:user]): new name for
2681 method "participant:".
2682 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
2683 findparticipant but taking a uid string as parameter.
2684 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
2685 iCalendar automatically. Instead, this is done only when the user
2686 is a "date and time viewer".
2687 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
2688 (modifier and responder) into account by compiling them with the
2691 * SoObjects/Contacts/SOGoContactFolder.h: removed
2692 "nameInContainer" from the list of required methods.
2694 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
2695 -davContentType]): returns "text/calendar".
2697 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2698 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
2699 groupdav resource-type.
2701 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2702 -davContentType]): same as below.
2704 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2705 -initWithName:newNameinContainer:newContainer]): new overriden
2706 method setting the custom owner directly.
2708 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2709 -davContentType]): same as below.
2711 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2712 -davContentType]): same as below.
2714 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
2715 declare "httpd/unix-directory".
2717 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
2718 "UTC" as fallback timezone instead of "Canada/Eastern".
2719 ([-hasEmail:email]): make use of the new NSArray's
2720 containsCaseInsensitiveString: method.
2722 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2723 -davContentType]): declare "message/rfc822" as content type.
2725 * SoObjects/Appointments/SOGoAppointmentFolder.m
2726 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
2728 ([SOGoAppointmentFolder
2729 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
2730 ([-fetchContentObjectNames]): commented out method since it was
2731 usefull only for testing Funambol.
2733 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
2734 -containsCaseInsensitiveString:match]): an enhanced version of
2737 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
2739 ([-showMarkDeletedButton]): removed useless method.
2740 ([-showTrashButton]): removed useless method.
2742 * SoObjects/Appointments/iCalEntityObject+SOGo.m
2743 ([iCalEntityObject -userIsParticipant:user]): new proxy method
2744 that invoked isParticipant on self for each possible email
2745 addresses of the user passed as parameter.
2746 ([iCalEntityObject -userIsOrganizer:user]): same as above.
2748 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
2751 * SoObjects/Appointments/SOGoAppointmentObject.m
2752 ([SOGoAppointmentObject
2753 -saveContentString:contentStringbaseVersion:baseVersion]): remove
2754 method since an event may not have an organizer.
2756 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2757 -GETAction:localContext]): clarified method. Added support for
2758 content-type (thanks to Helge Hess).
2759 ([SOGoObject -initWithName:_nameinContainer:_container]):
2760 initialize and retain the owner.
2761 ([SOGoObject -davContentType]): returns "text/plain".
2763 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2765 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2766 -addUserInAclsAction]): send an acl addition mail.
2767 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
2770 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2771 -_realActionWithFolderName:folderDict]): handle the possible
2772 presence of the "mail-invitation" url parameter. If present, the
2773 user will be redirected to the relevant folder.
2775 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
2776 ([SOGoUser -language]): new method that returns the user's
2777 preferred language, or the system's if none has been set yet.
2779 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
2780 that returns the full dav url to self.
2781 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
2782 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
2783 returns the full so url to the base of the SOGo module to which
2784 self belongs, and for the specified user.
2785 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
2786 but for the current user.
2787 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
2788 required by the acl advisory templates and which returns a link
2789 the target user can click to activate its new subscription.
2790 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
2791 but for inclusion of the application/x-sogo-notification part,
2792 which will be handled by the Lightning enhancer plugin.
2794 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
2795 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
2796 do nothing yet since imap folder subscription is not handled yet.
2798 * SoObjects/SOGo/SOGoContentObject.m
2799 ([-hasSupportForDefaultRoles]): removed method.
2801 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2802 -getFullEmailForUID:uid]): new method that returns the username +
2805 * SoObjects/Appointments/SOGoCalendarComponent.m
2806 ([SOGoCalendarComponent +initialize]): the default language for
2807 mail templates is now set to English.
2809 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
2810 SOGoACLAdvisory implementing the french template for user removal
2813 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
2814 SOGoACLAdvisory implementing the french template for user
2817 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
2818 SOGoACLAdvisory implementing the english template for user removal
2821 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
2822 SOGoACLAdvisory implementing the english template for user
2825 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
2826 supercall of all the acl advistory templates. The model is based
2827 on SOGoAptMailNotification except that the template encapsulates
2828 the message to be sent. Later, we might create a superclass common
2829 to all template-based emails.
2831 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2832 -addRange:newRange]): new method that store a string
2833 representation of the NSRange passed as parameter.
2834 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
2835 any range contained in self intersect with the one passed as parameter.
2837 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
2838 store ranges in an array to prevent them from intersecting with
2839 each other during the passes.
2841 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2843 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2844 -primaryFetchMailboxInfo]): useless method. Removed.
2846 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2848 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2849 -toManyRelationshipKeys]): invoke [self subfolders].
2850 ([SOGoMailFolder -subfolders]): new method containing what used to
2851 be in toManyRelationshipKeys.
2852 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
2855 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2856 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
2857 named and at the beginning of which we put the predefined folders.
2859 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2860 -emptyTrashAction]): new method inspired by a similar one from
2861 UIxMailListView, to which we added the ability to remove
2864 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
2865 method. Replaced with a similar one in UIxMailFolderActions.
2867 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2868 -renameFolderAction]): implemented method.
2869 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
2870 specified folder. Instead, we put it in the trash folder.
2872 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
2873 method, replaced with a similar method in the new
2874 UIxMailFolderAction class module.
2875 ([-deleteFolderAction]): idem.
2877 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2878 -createFolderAction]): new method implementing subfolder creation.
2879 ([UIxMailFolderActions -renameFolderAction]): new method
2880 implementing subfolder renaming (basic implementation to be
2882 ([UIxMailFolderActions -deleteFolderAction]): new method
2883 implementing folder deletion.
2885 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
2886 web actions related to the handling of imap folder.
2888 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2890 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2891 -ownerInContext:localContext]): overriden method because we are an
2892 IMAP4 client and we need a bit more intelligence to deduce the
2893 owner of the current folder.
2894 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
2895 return an NSException so we need to be careful here to avoid a
2897 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
2898 NSException so we need to be careful here to avoid a crash.
2900 * SoObjects/Mailer/SOGoMailAccounts.m
2901 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
2902 there is no longer any concept of Intranet or Internet connection
2905 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2906 -sharedFolderName]): new method.
2907 ([SOGoMailAccount -otherUsersFolderName]): new method.
2909 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
2910 new javascript code and the new UIxMailAccountActions class.
2912 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
2913 javascript code and the new UIxMailAccountActions class.
2915 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
2916 new javascript code and the new UIxMailAccountActions class.
2918 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2919 -listMailboxesAction]): new method that returns a json-formatted
2920 tree of all the mailboxes available to the current user.
2922 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
2923 web actions related to the handling of mail accounts.
2925 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
2928 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
2929 -jsonRepresentation]): new interface method meant to be overriden
2930 by the primitive classes.
2932 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2934 * UI/MailerUI/UIxMailSplashView.m: removed.
2936 * SoObjects/Appointments/SOGoCalendarComponent.m
2937 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
2938 the uid to the list only when the user email is recognized by the
2941 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2943 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2944 -isDeletionAllowed]): completed method with the new imap acl api.
2946 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
2949 * SoObjects/SOGo/SOGoPermissions.m: added the new role
2950 "SOGoMailRole_MessageEraser".
2952 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
2953 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
2954 "defaultUserID" method into account.
2956 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
2957 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
2958 "defaultUserID" method into account.
2960 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
2961 methods to support the IMAP acls mentionned in the RFC 4314,
2962 removed the ones specific to Cyrus.
2964 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
2965 mandatory method for subclasses. Removed the SOGoDefaultUserID
2968 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
2969 overriden method to return @"<default>".
2971 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2972 -defaultUserID]): overriden method to return @"<default>".
2974 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2975 -aclsForUser:uid]): overriden method.
2976 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
2977 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
2978 ([SOGoMailFolder -defaultUserID]): overriden method.
2979 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
2981 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2983 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2984 -aclUsersForObjectAtPath:objectPathArray]): new method that being
2985 forwarded the calles to aclUsers for the GCS-based subclasses of
2988 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
2989 methods that would have been used to support IMAP acls. Replaced
2990 them with the new protocol for them that has been implemented in
2991 SOGo during the last few weeks.
2993 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2994 -hasSupportForDefaultRoles]): override method by returning "YES".
2996 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2997 -addObjectUniquely:object]): new method with an explicit name.
2999 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
3000 "acl" to "aclUsers". Now designed to return only the uid of the
3001 users involved in an ACL.
3002 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
3003 "NO" by default. To indicate to the acl editor that we don't want
3004 to handle a default user.
3006 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
3007 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
3010 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
3011 provides a view to the IMAP acls.
3013 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
3015 * UI/WebServerResources/MailerUI.js: replaced all invocations of
3016 addEventListener to the use of prototype's Event object. Also,
3017 configured all menus programmatically following descriptions lists
3018 containing their callbacks, or nulls, submenus id or separators.
3020 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3022 * UI/Common/UIxObjectActions.m ([UIxObjectActions
3023 -addUserInAclsAction]): save the previous roles of the user
3024 (unlikely) or the default roles, or None instead of saving the
3025 roles that should appear the first time in the role editor when no
3026 default has been set...
3028 * SoObjects/SOGo/SOGoObject.m: defined a new constant
3029 "SOGoDefaultUserID".
3031 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3032 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
3033 ignore the "AuthorizedSubscriber" role and add the "None" role
3034 when no other role is found.
3036 * UI/Common/UIxAclEditor.m: added a button for the new default
3039 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
3040 -_initRights]): don't take the "None" role into account when
3041 initializing the list of current roles.
3043 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
3046 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3048 * SoObjects/SOGo/NSString+Utilities.m ([NSString
3049 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
3050 There is no need to subscract the start from the length if a space
3051 is not found since the range has not changed either. Finally, the
3052 first character before the url might also be a tab or a cr, so we
3053 match it against the "urlAfterEndingChars" custom NSCharacterSet.
3054 ([NSString -stringByDetectingURLs]): modified to handle email
3055 addresses and add a correct "mailto:" link.
3057 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3059 * SoObjects/Appointments/SOGoAppointmentFolder.m
3060 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
3061 method to return the events in the range of 2 weeks ago up to 4
3064 * UI/MailPartViewers/UIxMailPartTextViewer.m
3065 ([UIxMailPartTextViewer -flatContentAsString]): use the new
3066 "stringByDetectingURLs" method to offer clickable urls.
3068 * SoObjects/SOGo/NSString+Utilities.m ([NSString
3069 -stringByDetectingURLs]): this new method replaces passive URLS
3070 with active ones for HTML resolution of the text.
3072 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3074 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3075 -asQPSubjectString:encoding]): simplified method.
3076 The headers indicates "utf-8" again thank to our fix in
3079 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
3082 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3084 * UI/Common/UIxObjectActions.m ([UIxObjectActions
3085 -removeUserFromAclsAction]): implemented this method which was
3086 missing and is required to remove users from ACLs.
3088 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3089 -subscribeAction]): folderDict was not autoreleased, resulting in
3092 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3093 -primaryFetchProfile]): when building with libFoundation, don't
3094 use the "propertyList" method from NSString. Rather, we convert
3095 the string to an NSData instance and passit as parameter to
3096 NSDeserializer. This way, we obtain a mutable dictionary rather
3097 than an immutable one.
3099 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
3100 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
3101 constant string "contentTypeValue".
3102 contentTypeValue is now set back to iso-8859-1 since NGMime
3103 converts extracts the data in that encoding.
3105 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3107 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
3108 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
3109 "bindFields" value is present in the user defaults, use the
3110 specified fields to find the dn of the user to bind.
3111 ([LDAPSource -allEntryIDs])
3112 ([LDAPSource -fetchContactsMatching:match])
3113 ([LDAPSource -lookupContactEntry:entryID])
3114 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
3115 bind and unbind the connection on each request.
3117 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
3119 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3120 -contactSearchAction]): simplified method to use the facilities
3121 provided by the LDAPUserManager. No longer takes care of the
3122 "ldap-only" url parameter since all requests are handled by the
3125 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3126 -primaryFetchProfile]): check that the value returned is not null
3127 before interpreting it.
3129 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
3130 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
3131 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
3132 system email is already present, remove it before adding it.
3134 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
3135 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
3136 loginToCheck is not empty.
3137 ([LDAPSource -fetchContactsMatching:match]): check that match is
3139 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
3141 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
3144 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3146 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
3148 ([SOGoUser -systemEmail]): returns the email formed from the
3149 username and the default mail domain.
3150 ([SOGoUser -hasEmail:email]): test whether the user has the
3151 specified email, in a case-insensitive way.
3153 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3154 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
3155 check login information.
3157 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3158 ([SOGoContactLDAPFolder
3159 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
3160 no longer manage LDAP connections. The requests are forwarded to
3161 the relevant LDAPSource instead.
3163 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3164 -appendSystemSources]): pass LDAPSource objects to
3165 SOGoContactLDAPFolder instances.
3167 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
3168 address of the "from" field before sending the message. Otherwise,
3169 sending the mail won't work.
3171 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
3172 rewrote this method to request all the available email identities
3173 for the current user. Also, the from field also contains the full
3174 name of the user, not just his/her email address.
3176 * SoObjects/Appointments/SOGoCalendarComponent.m
3177 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
3178 from the previous module iCalEntityObject+Agenor.
3179 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
3180 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
3183 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
3184 replacing the SOGoContactLDAPEntry module. It was renamed as such
3185 because it now receives a dictionary instead of an NGLdapEntry.
3186 It thus can now handle data from any source of LDIF data, not
3187 only coming from LDAP.
3189 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
3190 implementing most of what used to be the AgenorUserManager class.
3191 The difference is that users are cached in the forme of
3192 dictionaries and many sources are used. Also, it can be used to
3193 search LDAP contacts.
3195 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
3196 the concept of "ldap source", to be used by all the classes
3197 needing access to LDAP-provided information: addressbooks and the
3198 user manager. Most the method thereing are transcriptions of
3199 methods previously found in SOGoContactLDAPFolder. It also contain
3200 utility methods for user matching and authentification.
3202 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
3203 module, rendered useless by code refactoring.
3205 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
3206 with the freshly written "LDAPUserManager".
3208 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3210 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
3211 SOGOContactLDIFEntry.
3213 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
3214 module, obsoleted by code in SOGo/LDAPSource.[hm].
3216 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3218 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
3219 new method with an explicit name.
3221 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3223 * SoObjects/Appointments/SOGoCalendarComponent.m
3224 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
3225 replacing "isOrganizer:orOwner:" by taking only one instance of
3226 SOGoUser as parameter.
3227 ([SOGoCalendarComponent -participant:user]): new method replacing
3228 the previous "isParticipant" boolean method by returning the first
3229 participant matching the user passed as parameter. This method is
3230 used so that both the regular email address and the "system email
3231 address" of the user are matched against the participants emails.
3233 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3234 -getSystemEMailForUID:uid]): new method that returns the email
3235 formed with the user's uid and the default mail domain.
3237 * SoObjects/Appointments/SOGoCalendarComponent.m
3238 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
3239 was previously commented out.
3241 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
3242 forwared to [AgenorUserManager getSystemEmailForUID:].
3244 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3245 -toolbar]): method replacing the one with the same name in the
3246 task and appointment editor classes. This method makes also use of
3247 the new method "isOrganizerOrOwner:" and "participant:" in
3248 SOGoCalendarComponent.
3250 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3251 -toolbar]): removed method, replaced with a method with the same
3252 name in UIxComponentEditor.
3254 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
3255 method, replaced with a method with the same name in
3258 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3259 -primaryFetchProfile]): the values returned from the database are
3260 converted to a put dictionary first, since the dictionary returned
3261 is actually an immutable one, which can cause a crash afterwards.
3263 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3265 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
3266 and "SOGoRole_ObjectEditor".
3268 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
3269 -prepareRightsForm]): this method is no longer mandatory.
3271 * UI/Contacts/UIxContactsUserRightsEditor.m
3272 ([UIxContactsUserRightsEditor
3273 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
3274 module to handle acls related to the address books. Partial
3277 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3278 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
3281 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
3282 specified roles from cache.
3283 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
3284 put resulting roles in cache.
3286 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
3287 initWithName:inContainer:. Instead, directly initialize the ivars
3288 as it is supposed to be to avoid an infinite loop whenever one of
3289 those two methods are overriden.
3291 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
3294 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3295 -aclsForUser:uid]): override method so that SOGo won't crash when
3296 loading the contact card.
3298 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3300 * SoObjects/Appointments/SOGoAppointmentFolder.m
3301 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
3302 "freebusy" special user should only require opaque elements.
3304 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3306 * SoObjects/Appointments/SOGoAppointmentFolder.m
3307 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
3308 our double declaration where the resulting XML would be screwed.
3309 There is only one collection per namespace.
3311 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
3312 rfc822DateString]): new method that returns a string conform to
3313 rfc 822 and suitable for email headers.
3315 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
3316 "rfc822DateString" category method on the date we put in the
3319 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3321 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
3322 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
3323 which should never be overriden.
3324 ([UIxUserRightsEditor -appendRight:newRight])
3325 ([UIxUserRightsEditor -removeRight:right])
3326 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
3327 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
3328 methods that can be used by the subclasses.
3329 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
3330 mandatorily be overriden to prepare the elements of the subclassed
3332 ([UIxUserRightsEditor -updateRights]): new method that should
3333 mandatorily be overriden to update the user rights from the
3334 elements of the subclassed form.
3336 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
3337 check if the uid is already listed before adding it to our array.
3338 This is because the acl table can contain more than one record per
3339 user/object relationship.
3341 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3342 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
3343 "roles" parameter is now an NSArray instead of a string. Therefore
3344 we loop throughout the array to populate the table. All the
3345 relevant records are removed prior to the addition of the new
3348 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
3349 -aclsForUser:uid]): new override that returns nil until we add
3350 support for IMAP acls.
3352 * SoObjects/Mailer/SOGoMailAccounts.m
3353 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
3355 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3356 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
3358 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3359 -aclsForUser:uid]): override this method which will always return
3362 * SoObjects/SOGo/SOGoPermissions.[hm]: added
3363 [Public,Private,Confidential]
3364 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
3365 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
3366 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
3368 * SoObjects/Appointments/SOGoAppointmentFolder.m
3369 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
3370 that defines default roles for new elements in the acl.
3372 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
3373 module and subclass of UIxUserRightsEditor specific to the
3374 handling of user rights on calendar folders.
3376 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3378 * SoObjects/Appointments/SOGoAppointmentFolder.m
3379 ([SOGoAppointmentFolder -groupDavResourceType]): return both
3380 "vevent-collection" and "vtodo-collection".
3382 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
3383 that implements the detailed editor of user rights per-object.
3385 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3387 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3388 -rolesForObject:objectinContext:context]): no longer query objects
3389 for "roleForUser:". Instead, all objects should implement
3392 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
3393 new method to comply with the new acl "protocol" in SOGoObject.
3394 Uses SOGoFolder's new facilities for ACLS.
3395 ([SOGoContentObject -aclsForUser:uid]): idem.
3396 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
3397 ([SOGoContentObject -removeAclsForUsers:users]): idem.
3399 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3400 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
3401 based folders. This method is derived from the code that was in
3402 UIxAclFolder before its removal.
3403 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
3406 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
3408 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
3409 ([SOGoFolder -setRoleForUsers:uidsto:role])
3410 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
3412 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
3413 that requires overriding by subclasses.
3414 ([SOGoObject -aclsForUser:uid]): idem.
3415 ([SOGoObject -defaultAclRoles]): idem.
3416 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
3417 ([SOGoObject -removeAclsForUsers:users]): idem.
3419 * UI/Common/UIxObjectActions.m: new module implementing the web
3420 actions common to SOGoObject and all its subclasses.
3421 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
3422 user with the clientObject defaults user rights to the object's
3425 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
3426 to the point where it will only list the users (and their name)
3427 associated with an object acl.
3429 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
3430 methods have been moved into SOGoObject and SOGoFolder during a
3433 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3434 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
3435 method made useless by the programmatic handling of iCalendar
3437 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
3438 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
3439 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
3441 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
3442 drop on all folder nodes, not just on leaves.
3444 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3445 ([SOGoContactLDAPFolder
3446 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
3448 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3450 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
3451 debugging facilities when the SOGoDebugObjectAllocation user
3454 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3456 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
3457 method that SOGo will need with non-gnustep Foundation
3459 ([NSString -stringByAppendingPathComponent:component]): new method
3460 that SOGo will need when building with libFoundation. Method
3461 removed later since it is available from
3462 Foundation/NSPathUtilities.h.
3464 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
3467 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
3468 every subclass to access [WOApplication context] without having to
3469 invoke it more than once.
3471 * SoObjects/Appointments/SOGoCalendarComponent.m
3472 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
3473 moved method from SOGoTaskObject and SOGoAppointmentObject up to
3476 * UI/Scheduler/UIxCalSelectTab.m: removed module.
3478 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3480 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
3481 -vCard]): test the prefix of the card in a case-independent way.
3483 * OGoContentStore/OCSContactFieldExtractor.m
3484 ([OCSContactFieldExtractor
3485 -extractQuickFieldsFromContent:content]): we no longer accept
3486 records in a format other than versit vCard so we can get rid of a
3489 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3491 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3492 -selectorComponentClass]): restored method.
3494 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3496 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
3497 -shouldDisplayCurrentTask]): the current task is not displayed if
3498 it is NOT completed or if the "showCompletedTasks" flag is set.
3499 The logic was inverted in Lightning and is now in SOGo too.
3501 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3503 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
3504 want the "work" url instead of the "home".
3506 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3507 -_saveSnapshot]): save url values from snapshot.
3508 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
3510 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3511 -calendarList]): new method replacing "availableCalendars".
3513 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
3514 -calendarFolders]): we now take the list of subscribed calendar
3517 * SoObjects/Appointments/SOGoAppointmentFolder.m
3518 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
3519 method derived from and replacing [UIxCalView calendarFolders].
3521 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3523 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3524 -toManyRelationshipKeys]): don't put the predefined folders in the
3525 list if they are returned by the server.
3527 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
3528 longer store the "flattenedBlocks" in a dictionary since the
3529 object will be deleted anyway and we don't need to put the folders
3532 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3533 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
3534 attachment path into account when computing the part urls.
3536 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3538 * UI/Contacts/UIxContactsListViewContainer.m
3539 ([UIxContactsListViewContainer -additionalFolders]): take the list
3540 of subscribed folders from the new property list used for the user
3541 settings. The value of its key is SubscribedFolders for the
3542 dictionary entry named "Contacts".
3544 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3545 -canAccessContentAction]): new method to override the one from
3546 UIxFoldersActions by taking into account the fact that, this time,
3547 the clientObject is an ldap folder. Removed many method that used
3548 to be related to the handling of the user selector.
3550 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
3551 to make sure they can be removed.
3553 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
3554 populate the calendar entries based on the user settings plist.
3556 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3557 -selectForMailerAction]): restored method.
3559 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
3560 from a simplified version of the old UIxContactEditor (removed).
3562 * UI/Contacts/UIxContactsUserFolders.m: new template module for
3563 selecting users or user folders through an LDAP search of which
3564 the results are displayed as a tree.
3566 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
3567 method "onContactAdd" here since the Mailer is now the only module
3568 to use it when composing emails.
3570 * UI/WebServerResources/generic.js: added code for handling the
3571 new scheme used for describing SOGo folders, common code to handle
3572 folder addition or removal.
3574 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3575 -activateFolderAction]): new method that change the "active"
3576 settings in the folder-related fields in the user settings.
3577 ([UIxFolderActions -deactivateFolderAction]): see above.
3579 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3580 -checkRightsAction]): removed method.
3582 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3583 -updateAdditionalAddressBooksAction]): removed method.
3585 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3586 -updateCalendarsAction]): removed method.
3588 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3590 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3591 -checkRightsAction]): removed method.
3593 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3594 -canAccessContentAction]): new method designed to replace
3595 [UIxCalMainView checkRightsAction] in a more universal way.
3597 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3599 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3600 -roleOfUser:uidinContext:context]): take all the subkeys into
3601 account, not only the "personal" folder.
3603 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3604 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
3605 to the new components.
3607 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
3610 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3611 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
3612 field of the sogo_user_profile table, where the user-customizable
3613 changes will be saved.
3614 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
3615 similar to the one above, using the "settings" field where the
3616 automatic settings will be saved.
3618 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
3619 module to bind the userdefaults to a property list contained in a
3620 specified field of the sogo_user_profile table.
3621 ([AgenorUserDefaults
3622 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
3623 added a "fieldName" parameter.
3625 * UI/Common/UIxFolderActions.m: new module implementing web
3626 actions common to all GCS-based folders.
3628 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3630 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
3631 put a carriage return after the day name.
3633 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3634 -readFreeBusyAction]): restored method.
3636 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3638 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3639 -defaultAction]): remade module to redirect automatically to the
3642 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
3644 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3646 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3647 -deleteAction]): new web method to delete personal addressbook
3650 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3651 -delete]): override method to refuse the deletion of the folder if
3652 its nameInContainer is "personal".
3654 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
3655 that forwards the deletion request to the folder manager.
3657 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3659 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
3660 -zoomList]): new method that returns the list of available zoom factors.
3662 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3663 -changeStatusAction]): rewrote method.
3665 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3666 -_handleAttendeesEdition]): make sure "attendeesNames" has a
3667 length > 0 before computing the attendees. Otherwise there will be
3668 an invalid empty entry.
3669 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
3670 organizer when there are attendees and remove it when the
3671 attendees are removed.
3673 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3675 * UI/Scheduler/UIxAttendeesEditor.m): new component.
3677 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
3678 the task and appointment editors. Now a container component
3679 handling the common elements of tasks and events.
3681 * UI/Scheduler/UIxTaskEditor.m: same as below.
3683 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
3684 a subclass of UIxComponentEditor but a subcomponent of it.
3686 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
3687 toolbar can have the special value "none" to indicate there is
3688 none attached to the window.
3690 * SoObjects/Appointments/SOGoCalendarComponent.m
3691 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
3693 ([SOGoCalendarComponent -isParticipant:email]): new method.
3694 ([SOGoCalendarComponent -calendar:create]): takes one parameter
3695 "create" which is a boolean indicating whether we want to create
3696 the calendar if it does not exist.
3698 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3700 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
3701 of a table, the same way the dayly and weekly views have been for
3704 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
3706 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
3709 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
3710 property to point at the user folder
3712 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3714 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3715 -userInContext:]): returns "SOGoUser".
3717 * SoObjects/Appointments/SOGoCalendarComponent.m
3718 ([SOGoCalendarComponent -contentAsString]): overriden method that
3719 takes the privacy into account and discard the relevant fields if
3720 needed by generating a new content string and caching it.
3721 ([SOGoCalendarComponent
3722 -saveContentString:contentStringbaseVersion:baseVersion]): if the
3723 new method above has cached a content string, release it and set
3724 it to nil so that it will have to be regenerated in the case it is
3726 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
3727 discard the fields that have to be hidden when the card is
3730 * SoObjects/Appointments/SOGoAppointmentFolder.m
3731 ([SOGoAppointmentFolder
3732 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
3733 sure the cards are now handled as instances of
3734 SOGoCalendarComponent instead of SOGoContentObject so that their
3735 content string is taking the privacy classifiction into account.
3736 ([SOGoAppointmentFolder -_privacySqlString]): new method that
3737 generates a query to determine what information can be given and
3738 if the card itself has to be shown.
3740 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3741 -getICalPersonsFromValue:selectorValue]): removed useless
3742 "isAccessRestricted" method.
3744 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3745 -setStyle:_style]): test whether the values of orgmail and
3746 partmails are null before manipulating them, otherwise SOGo sends
3747 a "rangeOfString:" message to an NSNull, which makes it crashes.
3749 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3750 -extractQuickFieldsFromEvent:_event]): we now use the new
3751 "symbolicAccessClass" method from iCalEntity to determine the
3752 value of the "classifiction" field.
3753 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
3756 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3758 * SoObjects/Appointments/SOGoAppointmentFolder.m
3759 ([SOGoAppointmentFolder
3760 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
3761 see below, the query is adapted consequently.
3763 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3764 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
3765 renamed to "classification" and can any integer as value.
3766 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
3769 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3771 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3772 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
3773 don't prepend anything to the class and id named. Instead, we
3774 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
3777 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3779 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
3780 -rolesOfUser:logininContext:context]): if object does not exists
3781 (for example when it's being created), the current user has the
3782 same rights on it than he/she has on its parent container.
3784 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3785 -nameExistsInFolder:objectName]): methods that tests if a c_name
3786 corresponding to the name passed as parameter is present in the db
3789 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3791 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3792 -rolesForObject:objectinContext:context]): test for
3793 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
3795 * SoObjects/Appointments/SOGoCalendarComponent.m
3796 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
3797 returns the roles of the user on the container object if the event
3800 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3802 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
3803 alternativeViewer a multipart/related message is being handled.
3805 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
3808 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
3809 text/html component before text/plain.
3811 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3812 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
3813 fetching of HTML parts.
3815 * SoObjects/Appointments/SOGoCalendarComponent.m
3816 ([SOGoCalendarComponent -componentTag]): new template method that
3817 returns the vcalendar tag of the current object.
3818 ([SOGoCalendarComponent -component]): new method that returns the
3819 first object matching [self componentTag] within the current
3820 calendar object. This method replaces 'firstEventInCalendar:' as
3821 well as "firstTaskInCalendar:".
3822 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
3823 moved method from SOGoAppointmentObject.m.
3825 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3827 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
3828 module which shows each selected user's calendar in a different
3829 column instead of mixing their events together.
3831 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
3832 replaced use of [NSString stringByTrimmingWhiteSpaces] with
3833 [NSString stringByTrimmingSpaces].
3835 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
3836 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
3839 * UI/Scheduler/UIxCalDayOverview.m,
3840 UI/Scheduler/UIxCalDayChartview.m,
3841 UI/Scheduler/UIxCalDayListview.m,
3842 UI/Scheduler/UIxCalWeekOverview.m,
3843 UI/Scheduler/UIxCalWeekChartview.m,
3844 UI/Scheduler/UIxCalWeekListview.m,
3845 UI/Scheduler/UIxCalInlineMonthOverview.m,
3846 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
3848 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3850 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3851 -appendPersonalSourcesInContext:context]): release connectoin
3852 channel when everything is done.
3854 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3855 -newAbAction]): new action method to crate a new contact folder
3858 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
3859 that requests the folder manager to create a folder table with the
3860 specified type at the specified path. The type is taken from [self
3863 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3864 -folderType]): implemented.
3866 * SoObjects/Appointments/SOGoAppointmentFolder.m
3867 ([SOGoAppointmentFolder -folderType]): implemented.
3869 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3870 -appendPersonalSourcesInContext:context]): we now fetch all
3871 folders with type "Contact" that belong to the current user.
3872 ([SOGoContactFolders -newFolderWithName:name]): new method to
3873 create a new contact folder.
3875 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
3876 resulting url with [NSString+Utilities hostlessURL] instead of
3877 using NSURL. This is because the url in question sometimes has a
3878 hostname and sometimes not. "hostlessURL" ensure the hostname is
3880 ([UIxComponent -applicationPath]): same as above.
3882 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
3884 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
3885 folders before doing the one on messages.
3887 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3889 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
3890 makeObjectsPerform:withObject:withObject: for GNUstep
3893 * OGoContentStore/GNUmakefile, Protocols/common.make,
3894 SoObjects/common.make, UI/common.make: install in
3895 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
3897 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
3899 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
3902 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3904 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
3905 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
3908 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3909 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
3910 password would be accepted anyway as long as its length was > 0.
3911 This can be the case ONLY when LDAP is disabled otherwise we have
3912 a serious security issue...
3914 * SoObjects/Appointments/SOGoAppointmentObject.m
3915 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
3916 user is not an organizer nor a participant, he is declared as
3917 "Owner" if he owns the calendar the entry where the entry is
3918 contained. Other cases should not be possible.
3920 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3922 * UI/Contacts/UIxContactEditor.m: display and handle the new
3925 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3926 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
3929 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3930 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
3933 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3935 * SoObjects/Appointments/SOGoCalendarComponent.m
3936 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
3937 returns the value of ud "SOGoAppointmentSendEMailNotifications"
3939 ([SOGoCalendarComponent
3940 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
3942 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3944 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3945 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
3946 so that the mailbox cache is refreshed everytime the user presses
3947 on "get mail". I doubt a mailbox cache really is useful in general
3950 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3952 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3953 -userInContext:]): if the lookup is on "freebusy.ifb" and the
3954 username is "anonymous" the user is automatically set to
3957 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3959 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3960 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
3961 user with password "freebusy".
3963 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
3964 -contentAsString]): the default timerange is now 14 days before
3965 currentday and 1 month after.
3967 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3969 * SoObjects/Appointments/SOGoAppointmentFolder.m
3970 ([SOGoAppointmentFolder
3971 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
3972 escape the record string in a way suitable with XML encoding.
3974 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3976 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
3977 calendar view would not be updated properly.
3979 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3981 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3982 -newStartDate]): fix the handling of the component start date
3983 depending on the "hm" and the "day" parameters.
3985 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3986 -roleOfUser:uidinContext:context]): set role of current user to
3987 "Assistant" if the object that is accessed is "freebusy.ifb".
3989 * SoObjects/Appointments/SOGoAppointmentFolder.m
3990 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
3991 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
3992 ([SOGoAppointmentFolder
3993 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
3994 lookupCalendarFolderForUID: method, which doesn't do security
3997 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3999 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
4000 accessor that returns the comma-separated list of users with role
4002 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
4003 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
4004 "checkedUsers". Instead, each user is either classified in the
4005 list of assistants or the list of delegates.
4007 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4009 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
4010 -composeAction]): method imported from removed container modules.
4011 ([UIxMailMainFrame -mailFolderName]): method imported from removed
4014 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
4015 for wrapping UIxMailView with the "popupview" action.
4017 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
4018 since its the component that displays the same splash screen than
4019 the one in Thunderbird/Icedove.
4021 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
4022 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
4023 UI/MailerUI/UIxMailListViewContainer.[hm],
4024 UI/MailerUI/UIxMailViewContainer.[hm]: removed
4026 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4028 * UI/WebServerResources/HTMLElement.js: replaced the functional
4029 selectNode() and deselectNode() functions with select() and
4030 deselect() methods of HTMLElement.
4032 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
4033 events are initialized from here now instead of in the HTML code.
4035 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4036 -checkRightsAction]): new method similar to the one with the same
4037 name in UIxCalMainView.m.
4039 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
4040 code to handle the publishing of freebusy information.
4042 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4044 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4045 -checkRightsAction]): new action method that returns a
4046 comma-separated list of boolean values matching the right of the
4047 current user to "view" (as a permission) each foreign calendar
4048 stored in his preferences.
4050 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
4051 new method that sets a customOwner, which can be returned with
4052 ownerInContext it set.
4054 * SoObjects/Appointments/SOGoAppointmentFolder.m
4055 ([SOGoAppointmentFolder
4056 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
4058 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4060 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
4061 below, but for the Contacts and Calendar collections.
4063 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
4064 new acl facilities method from sope-gdl/GCSFolder.m.
4066 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
4067 -roleOfUser:uidinContext:context]): new method that returns
4068 SOGoRole_Assistant when the user is an assistant or a delegate on
4069 the "personal" ab object. This is so that setting roles on the
4070 SOGoContactFolders object is not required.
4072 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4074 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
4076 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
4077 to the handling of the user selection for the acls.
4079 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
4080 values from SoPermissions with ones specific to SOGo.
4082 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
4083 handles the storage for the acls.
4085 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
4086 class for SOGoAppointmentObject and SOGoTaskObject.
4088 * UI/Common/UIxAclEditor.[hm]: new component that provides a
4089 general editor for folder acls.
4091 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
4093 ([NSString -davMethodToObjC]): method that returns the method name
4094 for a DAV property implementation.
4096 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
4098 ([NSArray -stringsWithFormat:format]): new method that returns
4099 formatted occurences of the strings stored in the array.
4101 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
4102 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
4103 subclass module of SoWebDAVValue that supports collections of
4104 properties of the same type.
4106 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4108 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
4109 -lookupFolder:ofClassNamed:inContext:]): added the ability to
4110 configure the name of the SOGoDraftFolders with the ud var
4111 "SOGoDraftsFolderName".
4113 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4115 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
4116 -userTimeZone:username]): new method that returns the timezone for
4117 the specified user depending on his preferences and the server
4120 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
4121 -stringForData:partInfo:]): take the encoding into account and
4122 translate the text to "normal" before processing the charset data.
4124 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4126 * UI/WebServerResources/generic.js: the progress indicator is on
4127 when loading the page so we turn it off, and we turn it back on
4128 whenever we switch to another module...
4130 * UI/WebServerResources/SchedulerUI.js: make sure the day view
4131 synchronization mechanism works everywhere.
4133 * UI/WebServerResources/generic.js: the log window is not only
4134 visible when UIxDebugEnabled is set.
4136 * UI/WebServerResources/SchedulerUI.js: the month overview's day
4137 cells are now initialized with the DOM event interface methods
4138 instead of with html attributes.
4140 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
4141 headers (should be made configurable at some point)...
4143 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
4144 "not null" constraint on startdate, enddate, isopaque,
4145 participants and partmails.
4147 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4149 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
4150 -hoursToDisplay]): prevent a crash by retaining the
4151 "hoursToDisplay" array after it's created.
4152 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
4153 clickable hours DIV.
4155 * UI/WebServerResources/SchedulerUI.js: made the event
4156 participation status modification asynchronous, which also fixes a
4157 bug where the window would sometimes close before the accept or
4158 decline action was completed. Also, adapted the event handling
4159 related to the days or weeks view with the new DIV-based layout.
4161 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
4163 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
4164 DIV-based presentation of the days and weeks.
4166 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
4168 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
4169 might return an exception so we have to handle it if we don't
4172 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4174 * UI/WebServerResources/SchedulerUI.js: updated the list
4175 initialization code to use the new event management scheme, adding
4176 what was missing to be able to delete events and tasks again.
4178 * UI/WebServerResources/MailerUI.js: added code to activate the
4179 "Get mails" button. Fixed a bug which prevented messages to be
4182 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
4183 navigation and focus handling of INPUTs.
4185 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4187 * UI/WebServerResources/MailerUI.js: added code to handle the
4188 possible drag and drop events to manager in the mail module.
4189 Moving messages, opening parent folders, ...
4191 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
4192 the drag and drop manager as well as the interface to HTMLElement
4193 to trigger drag and drop events.
4195 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
4196 action to move the current message to the mailbox named after the
4197 value of parameter "tofolder".
4199 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
4200 -moveToFolderNamed:folderNameinContext:]): new method base on
4203 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4205 * UI/WebServerResources/generic.js: added and activated many
4206 "load" handlers to configure generic widgets used across the
4207 modules. More events are now handled in a DOM-fashion way instead
4208 of by setting the relative attributes in the templates.
4210 * UI/Templates/UIxSortableTableHeader.wox: all the events are
4211 declared from the javascript DOM onload handlers.
4213 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
4216 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
4217 declared from the javascript DOM onload handlers.
4219 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
4220 we want everything to be separated from each other, as much as
4223 * UI/WebServerResources/SOGoDragHandles.js: new module containing
4224 the "SOGoDragHandlesInterface", implementing methods that can be
4225 attributed to DIV so that they can be used as drag handles.
4227 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
4228 -asQPSubjectString]): initialize the tmp strings with '0' to make
4229 sure they don't contain garbage.
4231 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4233 * UI/WebServerResources/MailerUI.js: register the messageList
4234 table as a dragging source and the leaf of the navigation tree as
4235 dnd destinations to the DNDManager.
4237 * UI/WebServerResources/generic.js: initialize tabs from the
4238 "unload" event listener that is added programmatically instead of
4239 from the template... Also, added the new DNDManager object.
4241 * UI/WebServerResources/HTMLTableElement.js: added code to
4242 simulate XUL drag n drop events. This code will possibly be moved
4243 to HTMLElement.js instead later...
4245 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4246 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
4249 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4250 -_qualifierForFilter:filter]): only search records which starts
4251 with the specified pattern.
4253 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4255 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
4256 -asQPSubjectString]): new method that returns the special QP
4257 string with its qp declaration for email subjects.
4258 ([SOGoDraftObject -bodyPartForText])
4259 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
4260 double-encode data in UTF-8.
4262 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4263 -newStartDate]): new method to determine the start date depending
4264 on the URL parameters, the current day and the current time.
4265 ([UIxComponentEditor -toolbar]): new method to determine the
4266 filename of the toolbar that should be drawn depending on the
4267 ownership and the list of attendees of the task/event wrt to the
4270 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4271 -setDayStartHour:aStartHour]): adjust the minutes to the next
4272 quarter of hour, if not already set to a quarter.
4274 * UI/WebServerResources/UIxAppointmentEditor.js,
4275 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
4278 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4280 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4281 -loadValuesFromComponent:component]): handles access class
4282 (privacy) and status.
4284 * UI/Contacts/UIxContactsListViewContainer.m
4285 ([UIxContactsListViewContainer -additionalFolders]): return nil if
4286 [self additionalAddressBooks] returns an empty string.
4288 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4290 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
4291 rangesOf7Days]): enhanced and debugged algorithm to feed the array
4292 with slices where the first day is still in the requested month.
4294 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
4297 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
4298 of events in the day boxes of the calendar's monthly view.
4300 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
4301 -davContentType]): declare "text/calendar".
4303 * SoObjects/Appointments/SOGoAppointmentObject.m
4304 ([SOGoAppointmentObject -davContentType]): declare
4307 * SoObjects/Appointments/SOGoAppointmentFolder.m
4308 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
4309 HTTP methods are handled by SOPE and requires nil to be returned,
4310 this method now invokes the new
4311 "requestNamedIsHandledLater:inContext:" method to check that.
4312 ([SOGoAppointmentFolder
4313 -requestNamedIsHandledLater:nameinContext:context]): new methods
4314 that returns "YES" only for the "OPTIONS" http method (for now...).
4315 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
4316 overloaded method to append the "access-control" and
4317 "calendar-access" DAV abilities to the initial declaration.
4319 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
4320 imitate the look of Sunbird/Lightning's monthly view.
4322 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
4323 UIxCalMonthViewOld.[hm].
4325 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4327 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
4328 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
4330 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
4331 returns an image name based on the participation status of the
4334 * UI/WebServerResources/SchedulerUI.js: same strip down as for
4337 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
4338 ([UIxContactsListViewContainer -additionalFolders])
4339 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
4340 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
4341 methods to handle the external addressbooks a user has subscribed
4342 too, by retriving them from his preferences.
4344 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4345 -updateAdditionalAddressBooksAction]): new method that updates the
4346 user settings with the list of addressbook he has subscribed to.
4348 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
4349 module for the address book selector.
4351 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
4352 a toolbar with two buttons ("add" and "remove") to manage the
4353 additional addressbooks a user might subscribe to.
4355 * UI/WebServerResources/ContactsUI.js: added code to handle
4356 "external addressbooks" from the Javascript point-of-view, by
4357 extending existing methods and adding code for the "add ab" and
4358 "remove ab" buttons.
4360 * UI/WebServerResources/generic.js: moved extensions methods to
4361 DOM elements to separate files for better clarity.
4363 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
4364 new method that returns "pageContent" as class, but also "popup"
4365 for the DIV where the page content lies, so that we can manipulate
4366 the content of popup's with CSS identifiers.
4368 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4370 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4371 -displayStyle]): new method that returns a string containing the
4372 css style relative to the current appointment cell. This code is
4373 currently inactive but might be reused later.
4375 * UI/WebServerResources/SchedulerUI.js: added code to handle the
4376 display of the selected day (the day pointed by the mouse, or the
4377 current day when changing the view).
4379 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
4380 -dayCellClasses]): new method that returns a string containing the
4381 css classes applicable to the current cell, depending on the
4382 position of the day in the week, the day of today and the
4385 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
4386 -currentContactAptBorder]): new method that returns the
4387 appropriate border color for the specified user.
4389 * SoObjects/Appointments/SOGoAppointmentObject.m
4390 ([SOGoAppointmentObject
4391 -saveContentString:contentStringbaseVersion:baseVersion]):
4392 overloaded method that parse new events and detects if they have
4393 an organizer or not. If they are new and have no organizer set
4394 (Sunbird/Lightning...), the owner of the event is set as
4397 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
4398 category that provides facility methods and interfaces to the
4401 * SoObjects/Contacts/product.plist: give full access to ANY
4402 authenticated user, not just the owner (to every objects...).
4404 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4406 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
4407 every replica widgets are declared as such to their master
4408 counterpart. Take the days into account when displaying the time
4409 range taken by the appointment.
4411 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
4412 -getICalPersonsFromValue:selectorValue]): method taken from
4413 UIxFreeBusyUserSelector, that is shared both by
4414 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
4416 * SoObjects/Appointments/SOGoAppointmentFolder.m
4417 ([SOGoAppointmentFolder
4418 -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.
4420 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
4421 derived and taken as a subset of UIxFreeBusyUserSelector that
4422 implements the table part of the FreeBusy view. Most of the
4423 methods of UIxFreeBusyUserSelector relative to that table were
4424 moved into UIxFreeBusyUserSelectorTable, which can also be used as
4425 a standalone view for AJAX operations.
4427 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4429 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4430 -vCard]): change reverted.
4432 * UI/Contacts/UIxContactEditor.m: check whether the client contact
4433 folder has selector "globallyUniqueObjectId" before calling that
4436 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4437 -vCard]): the "setVClass" NGVCard method really is "setClass"
4440 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4441 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
4442 request the "streetAddress" instead of the "streetaddress".
4443 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
4444 mails that *contain*, and not just *start with* the search
4447 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4448 -vCard]): mark address returned from LDAP as the work address.
4450 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
4451 span covered with the anchor, not only the textual information
4454 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
4455 argument (event or task) to newEvent in the appointmentListMenu.
4456 Make the appointmentsListView display the appointmentsListMenu.
4458 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
4459 12 to 50 before displaying "...".
4460 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
4461 if its length > 0, whether location itself is nil or not...
4462 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
4463 of which the length > 0.
4465 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4467 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
4468 french and ISO dates.
4470 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
4471 from UIxContactSelector to handle contact lists (current and
4472 additional contacts).
4474 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4475 -_freeBusyAsText]): added handling of an "additional"-named query
4476 parameter that describe the number of additional days after
4477 enddate that should be returned.
4479 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4480 -_responseForResults:results]): give priority to results with
4481 "c_uid" fields. If none returned, use the first contact received.
4483 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4484 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
4485 2 and "CANCELLED" to 0.
4487 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4489 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
4490 of start and end dates to short string dates.
4492 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4493 -readFreeBusyAction]): new method that returns an array of numbers
4494 corresponding to the state in the freebusy of each "quarter of an
4495 hour" between the "sday" and "eday" date parameters passed in the
4496 url. This permits to handle the display of the freebusy with Ajax
4498 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
4499 since the free busy displays 2 days ahead.
4501 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4502 -contactSearchAction]): new action that returns the uid and the
4503 username + email of the user whose name contain the value of the
4504 "search" url parameter.
4506 * SoObjects/Appointments/SOGoAppointmentFolder.m
4507 ([SOGoAppointmentFolder
4508 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
4509 useful for the computing of the status of the freebusy.
4511 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
4512 -init]): new component that incarnates a user selector for events
4513 inspired by the new one found in Thunderbird Lightning.
4515 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4517 * UI/WebServerResources/generic.js: added code to enable or
4518 disable anchor visually (following our internal algorithm).
4520 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
4521 added new "url" ivar with its classic accessors.
4522 ([UIxComponentEditor -urlButtonClasses]): new method that returns
4523 the class strings for the url button on the appointment/task
4524 editor (depending on the validity of the url).
4526 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
4527 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
4528 the template to match the Lightning's new task/appointment editor.
4530 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
4532 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
4534 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4536 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4537 ([SOGoContactLDAPFolder
4538 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
4540 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
4541 iCalEntityObject instances instead of just iCalEvent's.
4543 * SoObjects/Appointments/SOGoAppointmentFolder.m
4544 ([SOGoAppointmentFolder
4545 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
4547 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
4548 bad way of handling ownership that way.
4550 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4551 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
4552 on "cn", just like Mozilla.
4554 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4556 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
4557 "to" should be retained, otherwise it will be autoreleased and a
4560 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4561 -writeAction]): updated method to fetch the card before initing
4564 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4565 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
4568 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
4569 -iCalStringTemplate]): start and due date are now optional.
4571 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4572 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
4573 appropriate accessors to be settable through the templates.
4575 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
4576 new "isDisabled" ivar with appropriate accessors to be
4577 settable through the templates.
4579 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4580 -availableCalendars]): new method that list the calendars to which
4581 the user has subscribed.
4582 ([UIxComponentEditor -componentOwner]): returns the owner of the
4585 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4586 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
4587 quickentries to null whenever each or all of them are null, by
4588 providing an impossible timestamp from with NSNotFound as value.
4590 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4592 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
4593 that handles the creation of new fields with the new APIs and the
4594 new node structure on the page.
4596 * UI/Scheduler/UIxAppointmentEditor.m,
4597 UI/Scheduler/UIxTaskEditor.m:
4598 refactored to user UIxComponentEditor as parent class.
4600 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
4601 containing the methods common to the UIxTaskEditor and the
4602 UIxAppointmentEditor.
4604 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4606 * SoObjects/Appointments/SOGoAppointmentFolder.m
4607 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
4608 the handling of time-ranges.
4610 * UI/WebServerResources/ContactsUI.js: specify a notification type as
4611 parameters when onConfirmContactSelection in invoked.
4613 * UI/WebServerResources/generic.js: specify a notification type as
4614 parameters when onContactRemove in invoked.
4616 * UI/WebServerResources/SchedulerUI.js: when the user deselects
4617 all calendars, select his entry.
4619 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4621 * UI/WebServerResources/SchedulerUI.js: edit and delete events
4622 with their owner-relative urls. Generate a correct entry in the
4623 css color table when a user is added to the calendars list. Put
4624 the same color next to the user id.
4626 * UI/WebServerResources/generic.js: implemented some new helper
4629 * SoObjects/Appointments/SOGoAppointmentFolder.m
4630 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
4631 entries if their owner is not the current user.
4633 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4634 -displayClasses]): return the correct class for the current event
4635 representation depending on its owner.
4637 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
4638 and associate a color for each user login depending on its
4639 position in the list.
4641 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
4642 -currentRowCSSClass]): return the correct class for the current
4643 row depending on the owner of the event.
4645 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4646 -setColors:colors]): new method to associate a color table with
4647 each user in the list.
4649 * SoObjects/Appointments/SOGoAppointmentFolder.m
4650 ([SOGoAppointmentFolder
4651 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
4653 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
4654 NSObject to associate an instance with a user.
4656 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4658 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
4661 * UI/WebServerResources/ContactsUI.js: added handling of
4662 notification of changes to contact selectors.
4664 * UI/WebServerResources/generic.js: added handling of notification
4665 of changes to contact selectors.
4667 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4668 -updateCalendarsAction]): proxy method to update the user
4669 preference table with the new selected calendar uids.
4671 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
4672 -calendarsContactsAction]): new method.
4674 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
4675 ([UIxContactSelector -setHasCheckBoxes:aBool])
4676 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
4677 permit the drawing of checkboxes instead of card icons.
4679 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
4680 wrap a selector the the "Calendars" tab.
4682 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
4683 new user calendar selector.
4685 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4687 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
4688 may cover hour 0 to hour 23.
4690 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4691 -iCalStringFromQueryParameter:format:]): dates explicitly set to
4694 * UI/WebServerResources/SchedulerUI.js: manage both lists of
4695 objects wrt to the toolbar actions.
4697 * UI/WebServerResources/generic.js: added code to the "String"
4698 class to decode number-encoded char entities.
4700 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4701 -batchDeleteAction]): new method to delete selected entries in the
4704 * SoObjects/Appointments/SOGoAppointmentFolder.m
4705 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
4706 that delete identified entries in batch.
4708 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4709 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
4711 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
4712 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4713 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
4714 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4716 return a UIxJSClose component if everything went fine.
4718 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
4721 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
4722 UIxAppointmentEditor.m.
4724 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
4725 a very light page with javascript code to close a window, by
4726 calling a method on the opener if specified. This component is
4727 designed to work as a response to form postings.
4729 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4731 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
4732 SOGoAppointmentObject adapted for the handling of tasks.
4734 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
4735 extracted from SOGoAppointmentObject.
4737 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4738 -saveUrl]): returns the url needed to POST the new form to.
4739 redirect the user to <aptid>/editAsAppointment instead of /edit,
4740 so that SOGoAppointmentFolder can return the correct object type.
4742 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
4743 -compareAptsAscending:_other]): accept empty start or end dates.
4745 * SoObjects/Appointments/SOGoAppointmentFolder.m
4746 ([SOGoAppointmentFolder
4747 -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.
4748 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
4749 components of type "vtodo" as well as "vevent".
4750 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
4751 url specified ends with AsTask or AsAppointment, returns the
4752 an object of the appropriate class, otherwise deduce it from its
4753 content if the HTTP method is "PUT", otherwise read its type from
4756 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4757 -extractQuickFieldsFromTodo:_task]): extract quick fields from
4760 * UI/Scheduler/UIxCalView.m ([UIxCalView
4761 -fetchCoreAppointmentsInfos]): replacement methods for
4762 fetchCoreInfos but by retrieving object with component "vevent".
4763 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
4766 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
4767 UIxCalAptListView adapted for the handling of tasks.
4769 * UI/Scheduler/UIxTaskProposal.[hm],
4770 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
4771 clones of the UIxAppointment* classes for the handling of tasks.
4773 * UI/WebServerResources/UIxTaskEditor.js: clone of
4774 UIxAppointmentEditor adapted for the handling of tasks.
4776 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
4777 Scroll the daily view to the appropriate hour when an appointment
4778 is selected in the appointments list.
4780 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4782 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4783 -setDayStartHour:aStartHour]): specifies the user timezone on the
4786 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
4789 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
4790 ([NSCalendarDate -driftedDate]): methods made useless by a better
4791 comprehension of the NSTimeZone API...
4793 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4795 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
4796 new methods from the NSCalendarDate methods.
4798 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
4799 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
4801 +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).
4802 ([NSCalendarDate -adjustedDate]): this method returns another
4803 instance set to the correct hour after the original date was set
4804 from a non-GMT timezone. This date can be used for storage.
4805 ([NSCalendarDate -driftedDate]): this method does exactly the
4806 opposite of -adjutedDate, that is, it enables the method
4807 hourOfDay, minuteOfHour etc... to return the values according to
4808 the original date's timezone. This date CANNOT be used for storage.
4810 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
4811 -shortDateString]): new method that will return a "short date
4812 string" (yyyymmdd) from a calendar date object.
4814 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4815 -_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.
4817 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
4818 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
4820 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4822 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
4823 view of the day at the height of hour 8:00.
4825 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
4826 ([UIxCalView -dayEndHour]): returns 24.
4828 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
4829 ([UIxContactFoldersView -newAction]): invoke
4830 _selectActionForApplication: on self with the proper attribute too.
4832 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
4833 we now use the action mechanism in UIxContactsListView to keep the
4834 same view for the contact selectors and the regular contact view.
4836 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
4837 UIxContactsListViewContainerBase.[hm]
4839 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
4841 * UI/WebServerResources/generic.js: generalized emailstring
4842 handling functions. Generalized address book access functions.
4844 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4845 -isPopup]): return YES if the "popup" query parameter is set.
4847 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4848 -defaultAction]): keep the url parameters when redirecting.
4849 ([UIxContactFoldersView -selectForSchedulerAction])
4850 ([UIxContactFoldersView -selectForMailerAction]): new action
4851 methods for the /scheduler-contacts and /mailer-contacts invocations.
4853 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
4854 newly available NSString+URL category.
4856 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
4857 -asURLParameters]): handle dictionary entries which could be
4858 instances of NSArray rather than NSString.
4860 * SoObjects/SOGo/NSString+URL.m ([NSString
4861 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
4862 ([NSString -urlWithoutParameters]): new method that returns the
4863 url without its parameters.
4865 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
4867 * SoObjects/SOGo/NSDictionary+URL.[hm],
4868 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
4870 * UI/WebServerResources/UIxMailEditor.js: add support for
4871 additions of different types (to, cc, bcc) of recipients from the
4874 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
4877 * UI/Contacts/UIxContactsMailerSelection.m,
4878 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
4879 UI/Contacts/UIxContactsSelectionView.m to provide a different set
4880 of widgets depending on the application invoking the contact list.
4882 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4884 * UI/WebServerResources/ContactsUI.js: hide the current contact
4885 whenever the user changes of contact folder.
4887 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
4888 now provided by the template when loading the page.
4890 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4891 -iCalPersonWithUid:uid]): new method taken from removed module
4894 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4896 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
4897 -categoriesAsString]): same as below.
4899 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
4900 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
4902 * SoObjects/Appointments/SOGoAppointmentObject.m
4903 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
4904 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
4907 * SoObjects/Appointments/SOGoAppointmentFolder.m
4908 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
4909 hackish test to detect whether the request concernes VEVENT's or
4910 anything else. Return events only in the former case.
4911 ([SOGoAppointmentFolder
4912 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
4913 c_name quickfield so that the calendar list can identify the
4914 appointments with their complete "filename".
4916 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
4917 groupsOfClass:fromSource: to parse the given vcalendar.
4919 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
4921 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
4923 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
4926 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
4928 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4930 * SoObjects/Appointments/SOGoAppointmentFolder.m
4931 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
4932 sensitive to the CalDAV method names.
4933 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
4934 "calendar-query" CalDAV method name.
4936 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
4937 code coming originally from MailerUI.js.
4939 * UI/WebServerResources/UIxContactEditor.js: imitate the
4940 Thunderbird address book by completing the display name with the
4941 content of the first and last name fields, until the display name
4942 is modified manually.
4944 * UI/WebServerResources/generic.js: added a "trim" method to the
4947 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4948 -displayName]): new method that returns the display name from "cn"
4949 or from the "displayName" key if found.
4951 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4952 -initSnapshot]): check if "[card n]" returns anything to avoid a
4955 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
4956 that returns an unparsed doctype definition for the pages.
4958 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4959 -vCard]): set the card's fn to attribute "displayName" if found
4962 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4964 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4965 -vCard]): handle the "streetAddress" and "l" fields.
4967 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
4968 header fields by converting the tables to DIVs and SPANs.
4970 * UI/WebServerResources/generic.css: attempted unification of font
4971 families and size across all the elements. changed the
4972 logConsole's "position" from "fixed" to "absolute" to avoid
4975 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4977 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
4978 empty the contact view when the current contact is being deleted.
4980 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
4981 parse the email field and provide the address full name if found
4982 as the "contactFN" parameter.
4984 * UI/WebServerResources/generic.js (openMailTo): do not give a
4985 name to the opened window so that serveral ones can be opened at
4988 * UI/MailPartViewers/UIxMailPartTextViewer.m
4989 ([UIxMailPartTextViewer -flatContentAsString]): override method by
4990 replacing carriage returns with "<br />" in the result string from
4991 super's implementation.
4993 * UI/Contacts/UIxContactView.m ([UIxContactView
4994 -_urlOfType:aType]): don't manage non-mailto urls through
4995 javascript, let the user decide what's best for him.
4997 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4998 -newAction]): transfer all the query parameters by using the
4999 "asURLParameters"'s result string from [self queryParameters].
5001 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
5002 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
5003 query parameters and put their values (if any) into the snapshot.
5005 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
5006 carriage-returns to "<br />".
5007 ([UIxContactView -workCompany]): explicitly initialize company to
5008 nil if org is nil or empty.
5010 * UI/WebServerResources/UIxContactEditor.js: updated validation
5011 code after we added and renamed some fields.
5013 * UI/WebServerResources/ContactsUI.js: added code to cache contact
5014 cards and to handle card updates.
5016 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5018 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
5019 test the length of the returned string since they will never be
5022 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
5023 return self if the process went successful, returns an exception
5024 otherwise (and only otherwise...).
5026 * OGoContentStore/OCSContactFieldExtractor.m
5027 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
5028 adapted method to the new VCard api. Since the cards are stored in
5029 vcard format, we no longer deal with a dictionary but with a
5032 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5034 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
5035 return a string with a "mailto" url.
5036 ([UIxContactView -_urlOfType:aType]): generic method to return a
5037 url string with a html anchor pointing to it.
5039 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
5040 since subclass "UIxContactEditor" did nothing. Implemented code to
5041 display and modify the values parsed from the vcards, displayed in
5042 a way similar to the Thunderbird addressbook.
5044 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
5045 -save]): new dummy method.
5047 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
5048 -save]): made method void.
5050 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5052 * UI/Contacts/UIxContactView.m: added many wrapper methods to
5053 display blocks of data à la Thunderbird Addressbook. If data is
5054 available, those wrappers (around the NGVCard methods) will
5055 enclose the results in a proper HTML output with the correct label
5056 (if present), otherwise it will return an empty string.
5057 ([UIxContactView -vcardAction]): new action to return the contact
5058 as text/vcard (for exporting).
5060 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
5061 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
5063 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
5064 -vCard]): create a new NGVCard instance when no data is available
5066 ([SOGoContactGCSEntry -save]): save the vCard using the new
5067 "versitString" API method/message.
5069 * UI/Contacts/UIxContactView.h: separated interface from
5072 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
5073 views and display them beneath the list.
5075 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5077 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
5078 the timezone even when it's the server timezone.
5080 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5081 -privateContacts:inContext:]): no long configure the calendar
5082 object with the user's timezone since it's now accessible
5083 application-wide throught the SOGoObject methods.
5085 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
5086 method. Removed the "backendTimeZone" method.
5088 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
5089 instead of SoComponent.
5091 * SoObjects/Appointments/SOGoAppointmentObject.m:
5092 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
5093 [self serverTimeZone] instead of "EST" (which was removed).
5095 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
5096 "timeZone" ivar and its accessors.
5098 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
5099 centralized method returing the timezone configured in the
5100 userdefaults db or "Canada/Eastern" if missing.
5101 ([SOGoObject -userTimeZone]): new centralized method returing the
5102 timezone of the current user or the server timezone if missing
5103 from the user configuration table.
5105 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5107 * UI/WebServerResources/SchedulerUI.js: implemented caching of
5110 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
5111 return a path based on the object's context instead of the first
5112 level in SOGo's object hierarchy...
5114 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5116 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
5119 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
5120 timezone ([self viewTimeZone]) to the WEMonthOverview component to
5121 avoid a confusion with the days.
5123 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
5126 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
5127 imitate Sunbird's synchronization between the 3 visible views.
5129 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
5130 sure the numbers in dateString are formatted so as to take 4 chars
5131 for the year and 2 for the day and the month, otherwise
5132 NSCalendarDate will return a nil date.
5133 ([UIxComponent -applicationPath]): return a path based on the
5134 object's context instead of the second level in SOGo's object
5137 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5139 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
5140 user's timezone abbreviation to the date string passed as parameter to
5141 NSCalendarDate to generate an accurate date instance. Do the same
5142 when no date is specified and today is chosen.
5144 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
5145 form's time values to integers before comparing them.
5147 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
5148 ([UIxCalAptListView -currentEndTime]): initialize the resulting
5149 dates timezone with [self viewTimeZone].
5151 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
5152 "viewTimeZone" ivar destined to hold an instance of the user's
5154 ([UIxComponent -viewTimeZone]): take the timezone from the user's
5157 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5159 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
5160 rearranged the layout.
5162 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
5163 manage showing and hiding appointment details.
5165 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5166 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
5167 timezone by taking the current user's timezone setting.
5169 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
5171 * SoObjects/Appointments/SOGoAppointmentObject.m
5172 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
5173 set default timezone to EST, although this code should be
5174 rewritten to handle a system and a user default value.
5176 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
5177 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
5178 take the values from the hour and minute INPUTs when data is
5179 POSTed since we no longer use the UIxTimeSelector component.
5180 ([UIxTimeDateControl -selectableHours])
5181 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
5182 template SELECTs to display reasonable and acceptable values
5183 instead of all the possibilities.
5185 * UI/WebServerResources/generic.js: adapted code for the new
5186 implementation of the UIxContactSelector component (added a
5187 "remove" button, removed the previous INPUT and replaced them with
5188 links of class "button").
5190 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
5191 UIxTimeDateControl.m.
5193 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
5194 ([UIxCalDayTable -currentAppointmentHour]): new methods that
5195 returns correctly formatted values used as attributes for JS code.
5197 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
5198 -initialContactsAsString]): renamed implementation of
5199 initialParticipants.
5200 ([UIxContactSelector -currentContactId])
5201 ([UIxContactSelector -currentContactName]): new methods used when
5202 listing the initial contacts in the widget. Currently, both return
5203 the person's cn but the latter should ultimately return a user
5206 * UI/Contacts/UIxContactSelector.h: separated interface from
5207 UIxContactSelector.m.
5209 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
5210 all javascript code is now put in Scheduler.js/generic.js.
5212 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
5213 moved into NSCalendarDate+Scheduler instead.
5215 * SoObjects/Appointments/SOGoAppointmentFolder.m
5216 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
5217 configure the timezone from SOGoUserFolder when the instance is
5219 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
5220 the value of the new "timezone" ivar.
5222 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5224 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
5225 the date selector in the first page and the container of the
5226 future calendar selector in the second page.
5228 * UI/WebServerResources/generic.js: added code for handling tabbed
5231 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
5232 returns the bundle name associated to the current running product.
5234 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5236 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
5237 exception by invoking a timeout on the opener rather than invoking
5238 the list refresh method.
5240 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
5243 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
5244 ([UIxCalWeekView -prevWeekQueryParameters])
5245 ([UIxCalWeekView -nextWeekQueryParameters])
5246 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
5247 that return the dates relatively to the current day.
5248 ([UIxCalWeekView -lastWeekName])
5249 ([UIxCalWeekView -currentWeekName])
5250 ([UIxCalWeekView -nextWeekName])
5251 ([UIxCalWeekView -weekAfterNextWeekName])
5252 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
5253 methods that returns the label for the corresponding weeks.
5255 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
5256 used by UIxCalDayView and UIxCalWeekView to display the events
5257 occuring in one or more days.
5259 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5261 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
5262 entries in the new "monthMenu" and "yearMenu".
5264 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
5265 method to return the current day as a string formatted depending
5266 on the current locale.
5268 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
5269 ([UIxCalAptListView -endDate]): "today" is now the default filter
5270 for displayed events.
5271 ([UIxCalAptListView -currentSerialDay]): new method returning the
5272 date of the current enumerated appointment in serial form
5275 * UI/WebServerResources/SchedulerUI.js: added code to select the
5276 relevant day when an appointment is selected. Added code to popup
5277 a month and a year menu whenever the header entries are clicked in
5278 the calendar widget.
5280 * UI/WebServerResources/generic.js: made addClassName and
5281 removeClassName methods of HTMLElement.
5283 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5285 * UI/WebServerResources/MailerUI.js: fixed the contact creation
5286 from email addresses.
5288 * UI/WebServerResources/generic.js: centralized the search-related
5289 functions here since the same code was used across the 3
5292 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
5293 ([UIxCalAptListView -endDate]): return the required dates needed
5294 depending on the value given to the "filterpopup" url parameter.
5296 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
5297 code by invoking UIxComponent's labelForKey:.
5299 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
5300 [self pageResourceManager] instead of [self resourceManager].
5302 * UI/Contacts/UIxContactEditorBase.m: invokes
5303 globallyUniqueObjectId on the clientobject's class instead of the
5304 hardcoded "SOGoFolder".
5306 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
5307 -newAction]): redirect the "new" action to the personal (default)
5310 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
5311 +objectWithName:inContainer:]): new constructor.
5313 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
5314 -lookupContactWithId:recordId]): always create a contact object,
5315 even if it does not exist.
5317 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5319 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
5320 component that lays out the different components of SOGoCalendar.
5321 Only serves as an Objective-C counterpart to its xml template.
5323 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
5326 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
5327 display a widget to handle the information displayed in the
5328 appointments list. Not currently used, lacks implementation.
5330 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
5331 display a calendar as a dynamic widget from where one can select
5332 the current visible day.
5334 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
5335 extracted from UIxCalInlineMonthOverview.m.
5337 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
5338 calendarPageURL methods. The javascript code is handled by .js
5339 files as much as possible...
5341 * UI/WebServerResources/ContactsUI.js,
5342 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
5345 * UI/WebServerResources/SchedulerUI.js: implemented functions to
5346 handle the new widgets. XmlHTTPRequest code taken from
5349 * UI/WebServerResources/generic.js: put some functions related to
5350 element selections as methods to HTMLElement and HTMLTableElement.
5352 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
5353 display the list of appointments (embodies the code-size of
5354 UIxCalAptListView; answers to the "aptlist" method).
5356 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5358 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
5359 -correctURLAction]): new short action method replacing the method
5360 below by taking far less code.
5362 * SoObjects/Appointments/SOGoAppointmentFolder.m
5363 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
5364 with an action in the view-related code.
5366 * UI/Scheduler/UIxAppointmentEditor.m: invoke
5367 "stringByEscapingHTMLString" on the resulting value to avoid
5368 issues with accented characters.
5369 ([-jsCode]): removed method since the javascript code was merged
5370 into SchedulerUI.js.
5372 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5374 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
5375 new class method that returns an iCalPerson based on the UID given
5378 * UI/Contacts/UIxContactsListViewContainerBase.m:
5379 UIxContactsListViewContainer renamed to serve as a base class for
5380 the contact lists in both the contact editor and the contact
5383 * SoObjects/Contacts/SOGoContactLDAPFolder.m
5384 ([SOGoContactLDAPFolder
5385 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
5386 setUserIdentifier:setRootDN:]): an LDAP field specifying the
5387 loginname of the users can now be specified.
5389 * UI/WebServerResources/generic.js: added code to manage contact
5390 lists through the new implementation of the UIxContactSelector.
5392 * UI/Templates: put the templates related to SchedulerUI in its
5395 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
5396 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
5397 entry for "uid" with the field name representing the login name of
5398 the user in the corresponding LDAP branch.
5400 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5402 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
5403 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
5404 request is a PUT, always create an entry, even if we're not sure
5407 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5409 * UI/WebServerResources/ContactsUI.js: implemented live-search.
5411 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
5412 -appendSystemSourcesInContext:context]): populated method with
5413 code that creates entries mapped to instances SOGoContactFolder,
5414 based on the configuration found in the NSUserDefaults under the
5415 key "SOGoLDAPAddressBooks".
5416 ([SOGoContactFolders
5417 -lookupName:nameinContext:contextacquire:acquire]):
5418 "contactsources" do not exist anymore, SOGoContactFolder was split
5419 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
5420 and one protocol: SOGOContactFolder, instead.
5421 ([SOGoContactFolders -contactFolders]): new accessor used by the
5422 views of SOGoContactXXXFolder to list the possible sources.
5424 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
5425 defines the methods that UIxContactsView, ..Editor and so on...
5428 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
5429 defines the methods that UIxContactsListViewBase expects as well
5430 as the data fields returned in the contact lists.
5432 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
5433 returns entries an LDAP server. Conforms to the new
5434 SOGOContactFolder protocol.
5436 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
5437 returns a vCard based on contact entries from an LDAP server.
5438 Conforms to the new SOGOContactObject protocol.
5440 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
5441 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
5442 entry for the textual representation of the vCard.
5444 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
5447 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
5448 "SOGoContactObject".
5450 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
5451 method that generates a textual representation of the vcard.
5453 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
5455 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
5456 "SOGoContactFolder".
5458 * SoObjects/Contacts/SOGoContactSource.h,
5459 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
5462 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
5463 -singleAttributeWithName:key]): new method that returns the first
5464 object associated with an ldap key (where generally one value is
5467 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
5468 map the entry into an NSDictionary for processing by
5469 UIxContactsListViewBase.m with the least possible overhead.
5471 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
5474 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5476 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5477 -privateContacts:inContext:]): now returns an instance of
5480 * UI/Contacts/UIxContactsListViewContainer.m
5481 ([UIxContactsListViewContainer -contactFolderName]): new method to
5482 return the absolute path to the current contact folder, called
5483 from within the template.
5485 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
5486 JS code to initialize the 'currentContactFolder' generic var.
5488 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
5489 +contactFolderWithSource:inContainer:andName:]): new class
5490 method meant to return an instance connected to the specified
5491 source. Currently useless but won't be anymore in the next few
5494 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
5495 the "lookupFreeBusyObject" method since it does not exist.
5497 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
5498 as a "view" for the SOGoContactFolders object. Does nothing but
5499 redirect the browser to the URL of the personal address book of
5500 the user. It does not even have a template.
5502 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
5503 implementing the SOGoContactSource protocol. Does nothing
5504 currently but will be used to implement access to the personal
5505 address book of the user stored in the SOGo database.
5507 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
5508 protocol defining an API common to all possible types of contact
5511 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
5512 serving as the root of the contact folders available to the
5513 current user. Correctly lists the contact sources in webdav.
5515 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5517 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
5518 -composeAction]): new action method that permits external object
5519 to write a message from the default (primary) account.
5521 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5522 -initSnapshot]): new method with code taken from "defaultAction"
5523 but needed for others.
5524 ([UIxContactEditorBase -writeAction]): new action designed to
5525 compose the correct URL needed to obtain the MailerUI's email
5526 editor with the correct "mailto" parameter.
5528 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
5529 Common so that other modules can use it.
5531 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
5532 easier to manage both ajax and non-ajax requests.
5534 * UI/Contacts/UIxContactsFilterPanel.m: clone of
5535 UIxMailFilterPanel, but applicable to contact lists.
5537 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
5538 -vcardContentFromSOGoContactRecord]): use the new standard methods
5539 created for each type of entry. If a line is determined to not
5540 contain information, it will be skipped.
5542 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
5543 +initialize]): init defaultMailDomain with the user default
5544 "SOGoDefaultMailDomain".
5546 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5548 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5549 -saveAction]): reorganized methods to only have ONE return point.
5550 Invoke saveRecord: directly on the clientObject instead of
5551 saveContentString, which does the same thing anyway.
5553 * SoObjects/Contacts/NSDictionary+Contact.m
5554 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
5555 method to convert the dictionary returned with the user submission
5556 to a record in VCARD format to be stored in the database.
5558 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5560 * UI/WebServerResources/MailerUI.js: when opening the context menu
5561 of the message list, select the message below the mouse cursor and
5562 deselect the other selected messages temporarily. This mimics the
5563 behaviour of Thunderbird for that matter and was already
5564 implemented for the entries of the folder tree.
5566 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
5567 -iconForMenuItem]): new method that returns the fully qualified
5568 relative URL to the icon representing the mailbox, or the default
5569 mailbox icon if needed.
5571 * UI/SOGoUI/UIxComponent.m ([UIxComponent
5572 -urlForResourceFilename:filename]): automatically return an empty
5573 string whenever the filename passed as argument is nil.
5575 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
5576 "desc" parameter set to 1 so that they are sorted in descending
5577 order by default. Also, added "onHeaderClick()", triggered by
5578 clicking on the message list header elements.
5580 * UI/MailerUI/UIxMailSortableTableHeader.m
5581 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
5583 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5584 -isSortedDescending]): defaults to "YES" when the sort order is
5587 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5589 * UI/WebServerResources/MailerUI.js:
5590 - message cache: set the max num of cached messages to 20. Limit
5591 the cached message size to 30000 bytes.
5592 - ajax: when a message request is called while one is already
5593 being performed, the latter will be cancelled. Idem when
5594 retrieving the content of a mailbox.
5595 - folder tree: when a mailbox is selected because of the URL
5596 requested (initMailboxSelection), the dtree is expanded throughout
5597 the mailbox entry's parent hierarchy to ensure it is made visible
5598 when the page is being displayed. (new function: expandUpperTree).
5599 - mailbox loading: when loading a mailbox where a message was
5600 previously selected, we invoke its url with the "pageforuid"
5601 parameter correctly specified. During callback processing, we scan
5602 the table for the related row and reselect it.
5603 Also, the message area is set blank before loading any mailbox.
5605 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5606 -defaultAction]): if the "pageforuid" parameter is passed in the
5607 url, take its value and invoke [self firstMessageOfPageFor:]
5608 consequently to deduce the first message to display. Otherwise,
5609 set it to "idx", otherwise set it to 0.
5610 ([UIxMailListView -firstMessageOfPageFor:]): new method
5611 that determines the first message of the page where the message
5612 passed as parameter is contained.
5614 * UI/WebServerResources/UIxMailListView.js: removed this module,
5615 its code was put in MailerUI.js instead.
5617 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5619 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
5620 which returns the nodes for the parent specified in "parentMenu".
5621 Used to generate the javascript code for the folder dtree.
5623 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
5624 using that container-template are now using UIxMailMainFrame
5625 since UIxMailPanelFrame had no real interest. File removed.
5627 * UI/WebServerResources/dtree.{css,js}: new files to handle
5628 javascript-generated mailbox tree. Modified from original version
5629 by integrating the previous code with the one we are using for
5630 selections and mailbox handling. Minor visual enhancements too...
5632 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5634 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
5635 returned, put it in an NSArray before returning it (fixes
5638 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5640 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
5641 that returns a url string stripped from its "http://hostname"
5644 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
5646 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
5648 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5650 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
5651 -mailDateFormatter]): retrieve the timezone from the user settings
5652 and pass it to the returned dateFormatter. Also, the dateFormatter
5653 is kept in a static variable to avoid useless
5654 creations/destructions.
5656 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
5657 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
5659 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
5660 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
5661 s/Criteria/Text/ to handle the "criteria" form parameter.
5663 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5665 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
5666 to integrate better with the firefox look&feel. Added entries for
5667 the new "menu" DIV class (popup menus).
5669 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
5670 takes any chunk of text as param, detects the user email and the
5671 optional first and last names and return them in a well-formatted
5672 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
5673 namespace conflict. Added "onMenuClick(node, event, menuId)" to
5674 handle popup menus through "onclick" element attributes (node =
5675 this, event = event and menuId = name of the menu DIV id to
5678 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5679 -snapshot]): add an entry for "email" into the snapshot
5680 dictionary if a "contactEmail" URL parameter was detected and if
5681 the entry for "email" is empty.
5683 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
5684 button now invokes the newContact() js function in ContactsUI.js
5685 instead of opening "new" directly. newContact() pops up a window
5686 stripped from its navigation bar.
5688 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
5689 bundle (AddressBook).
5691 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
5692 "menu" and id "addressMenu" have the header email addresses
5693 display it with the new menu code in generic.js.
5695 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
5696 replaced the body tables with a div of class "pageContent"
5697 (standardization across the page templates).
5699 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
5700 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
5701 those are now inherited from UIxPageFrame.
5703 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
5705 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
5706 a "mailto" URL parameter is detected and the "to" array is empty,
5707 initialize "to" with the value of "mailto" before returning it.
5709 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
5710 -composeAction]): rewrote method in a cleaner way and with usage
5711 of the URL extensions to NSString and NSDictionary (see below).
5712 Also, if a "mailto" url parameter is detected, pass it to the
5715 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
5718 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
5719 returns a parameter string to add to a base URL.
5721 * UI/Common/NSString+URL.m ([NSString
5722 -composeURLWithAction:parameters:andHash:useHash]): new method to
5723 compose a complete URL from an object URL with parameters and an
5724 optional '#' character.
5726 * UI/Common/UIxPageFrame.h: separated interface from
5729 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
5731 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
5733 * UI/WebServerResources/generic.js: added code to manage
5734 selections within HTML containers.
5736 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
5737 added method to determine the possible URL for a product-specific
5738 javascript filename of the forme <productname>.js.
5739 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
5740 ([UIxPageFrame -isPopup]): new method to determine whether the
5741 application navigator bar should be displayed (main page) or not
5744 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
5745 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
5746 the user through LDAP.
5748 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5750 * The toolbar code from the MailerUI product was taken, renamed as
5751 "UIxToolBar" and put into UI/Common. Toolbar plists were created
5752 for the Contacts and Scheduler products and put in their respectir
5753 Toolbars/ subdirectories. Finally,
5754 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
5755 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
5756 and an invocation to the UIxToolbar component was put at the top
5757 of UI/Templaces/UIxPageFrame.wox.
5759 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
5760 within the templates whether a separator should be displayed.
5762 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
5763 that returns NO if the toolbar is empty.
5765 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5767 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
5769 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
5770 new toolbar objects.
5772 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
5774 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
5775 linkbanner as a DIV instead of a TABLE.
5777 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
5779 returns 'YES' to request the display of the navigation bar between
5782 2006-06-15 ludovic@inverse.ca
5784 * It's now possible to set the default
5785 domain using for email using the
5786 SOGoDefaultMailDomain preference key.
5788 2006-06-15 ludovic@inverse.ca
5790 * Initial import of SOGo from trunk.