1 2007-12-17 Francis Lachapelle <flachapelle@inverse.ca>
3 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
4 -composeAction]): fixed URL when no recipient is specified.
6 2007-12-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
8 * UI/Scheduler/NSArray+Scheduler.m ([NSMutableArray
9 -reverseArray]): new category method.
11 2007-12-14 Ludovic Marcotte <ludovic@inverse.ca>
13 * SoObjects/Appointments/SOGoCalendarComponent.m
14 We set headers in lowercase so that they get properly
17 * SoObjects/Mailer/SOGoDraftObject.m
20 2007-12-13 Francis Lachapelle <flachapelle@inverse.ca>
22 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame -saveFoldersStateAction])
23 ([UIxMailMainFrame -getFoldersStateAction]): new methods to get
24 and set the folders state of the user's web view.
26 2007-12-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
28 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -crashAction]): new
29 action methods that generates a segmentation faults.
30 ([SOGoRootPage -exceptionAction]): new method that returns an
32 ([SOGoRootPage -raisedExceptionAction]): new method that raises an
33 exception without returning it.
35 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWithStatus:status])
36 ([UIxComponent -responseWithStatus:statusandString:contentString])
37 ([UIxComponent -responseWithStatus:statusandJSONRepresentation:contentObject])
38 ([UIxComponent -responseWith204]): new utility methods.
40 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
41 -responseWithStatus:statusandString:contentString])
43 -responseWithStatus:statusandJSONRepresentation:contentObject]):
46 * SoObjects/SOGo/NSScanner+BSJSONAdditions.m ([NSScanner
47 -scanJSONStringDelimiterString]): new category module taken from
50 * SoObjects/SOGo/NSDictionary+BSJSONAdditions.[hm]: new category
51 module taken from BSJSONAdditions 1.3.
52 http://blakeseely.com/downloads.html
54 2007-12-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
56 * SoObjects/SOGo/NSString+Utilities.m ([NSString
57 -stringByDetectingURLs]): we now go back until the real start of
60 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
61 -fetchAttachmentIds]): new method that wanders through the mail
62 structure to collect the attachment content ids and to associate
65 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
66 ([_UIxHTMLMailContentHandler
67 -startElement:_localNamenamespace:_nsrawName:_rawNameattributes:_attributes]):
68 the content-ids are now enclosed between "<>" before retrieval
69 from the attachment dictionary.
70 ([UIxMailPartHTMLViewer -cssContent])
71 ([UIxMailPartHTMLViewer -flatContentAsString]): the content-ids
72 are now fetch from the clientobject (an instance of
73 SOGoMailObject) with the new "fetchAttachmentIds" method.
75 2007-12-12 Francis Lachapelle <flachapelle@inverse.ca>
77 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
78 -eventsListAction]): added the state of the calendar's owner with
79 respect to the current event.
81 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
82 -_loadAttendees]): added the retrieval of attendees state on
85 2007-12-12 Ludovic Marcotte <ludovic@inverse.ca>
87 * UI/MailPartViewers/UIxMailRenderingContext.{h,m}
88 Removed template caching which added very little
89 and created re-entrant issues.
91 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
92 Added a hack (and stated so in the source file)
93 to avoid what seems to be a bug in libxml.
95 2007-12-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
97 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
99 ([SOGoContentObject -davLastModified])
100 ([SOGoContentObject -davContentLength]): implemented dav methods.
102 2007-12-10 Francis Lachapelle <flachapelle@inverse.ca>
104 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
105 -GETAction:]): when asAttachment is set to true, the header
106 "content-disposition" is set to "attachment" so browsers like IE
107 and Safari properly asks the user to save the file.
109 2007-12-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
111 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
112 ([UIxMailPartHTMLViewer -flatContentAsString]): when in
113 UIxMailPartAlternative, scan the filenames of potential cid at the
114 same level as our parent.
116 2007-12-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
118 * Main/SOGo.m ([SOGo -run]): the table creation script now have a
119 @{tableName} substitution variable to be substitued with the real
120 table name obtained from the configuration variables.
122 2007-12-07 Ludovic Marcotte <ludovic@inverse.ca>
124 * UI/MailPartViewers/UIxMailRenderingContext.m
125 We treat multipart/appledouble like multipart/mixed
126 for now. That allows the user to save both parts.
128 * Corrected typos in Localizable.string files.
130 2007-12-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
132 * UI/Common/UIxAclEditor.m ([-currentUserIsOwner]): replaced
133 method with -canModifyAcls that invokes the security manager
134 instead for the permission "SaveAcls" on the client object.
136 * SoObjects/Appointments/SOGoCalendarComponent.m
137 ([SOGoCalendarComponent -contentAsString]): securize the returned content.
138 ([SOGoCalendarComponent -aclsForUser:uid]): check whether the user
139 is an organizer or a participant as well.
141 * SoObjects/Appointments/SOGoAppointmentObject.m
142 ([SOGoAppointmentObject -changeParticipationStatus:_status]): the
143 user we should change the status of is not the active user but the
144 owner of the object. This is for delegation.
146 * SoObjects/Appointments/SOGoAppointmentFolder.m
147 ([SOGoAppointmentFolder -fetchContentObjectNames]): fetch the
148 elements through the fetchFields:from:to:title:component: method
149 method, so that the result is already filtered depending on the
152 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
153 -toolbar]): if the current user is a delegate, take the permission
154 "ModifyComponent" into account. Also, do not let him/her modify an
155 event for which he/she is the organizer.
157 * SoObjects/Contacts/SOGoContactLDAPFolder.m
158 ([SOGoContactLDAPFolder -davResourceType]): declared as a carddav
159 addressbook collection.
161 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
162 -davResourceType]): declared as a carddav addressbook collection.
164 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davLastModified]):
165 override SoObject's implementation. Otherwise a localized date is returned.
167 * UI/Common/UIxPageFrame.m ([UIxPageFrame -isCalendar])
168 ([UIxPageFrame -isContacts], [UIxPageFrame -isMail]): getters to
169 determine which module is the current one.
171 2007-12-06 Francis Lachapelle <flachapelle@inverse.ca>
173 * UI/Scheduler/NSArray+Scheduler.m ([NSArray -compareEventsTitleAscending:otherEvent])
174 ([NSArray -compareEventsLocationAscending:otherEvent])
175 ([NSArray -compareEventsEndDateAscending:otherEvent])
176 ([NSArray -reversedArray]): new methods that sort an array of
177 events depending of various parameters.
179 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
180 -eventsListAction]): added support for sorting events.
182 2007-12-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
184 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction])
185 ([UIxMailEditor -sendAction]): make sure that the attachments
186 having the same filename are correctly sequenced (ex: base.ext,
187 base-1.ext, base-2.ext).
189 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
190 -fetchBLOB]): added support for quoted-printable decoding. Also,
191 we return nil if the type is not supported.
193 2007-12-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
195 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -newAction]):
196 create task obejcts with the .ics extension.
198 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
199 -newAction]): create appointment objects with the .ics extension.
201 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -newAction]):
202 create objects with the .vcf extension.
204 * Main/NSException+Stacktrace.m: added missing symbols from
205 NSException.m and NSDebug.m (GNUstep).
207 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
208 -foldersSearchAction]): make use of the new search methods in
209 SOGoUserFolder (see below).
211 * UI/Contacts/UIxContactFoldersView.m ([-foldersSearchAction]):
212 moved method into ../MainUI/SOGoUserHomePage.m.
214 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
215 -foldersOfType:folderTypeforUID:uid]): only return folders owned
216 by the specified user.
218 2007-12-05 Francis Lachapelle <flachapelle@inverse.ca>
220 * SoObjects/Mailer/SOGoDraftObject.m: the condition for replyToAll
221 has to be done later to avoid duplicated to and cc addresses.
223 2007-12-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
225 * SoObjects/Appointments/SOGoAppointmentFolder.m
226 ([SOGoAppointmentFolder -davCalendarQuery:queryContext]): fixed a leak.
228 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder -davSubscribe:localContext])
229 ([SOGoGCSFolder -davUnsubscribe:localContext]): subscribe an
230 unsubscribe from DAV-based accesses. We could be compatible with
231 Microsoft's extensions but we have no need for a "subcription id",
232 so we implement our own.
234 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
235 -POSTAction:localContext]): new method to intercept DAV POSTs,
236 which we now use to implement certain custom commands such as
237 "subscribe" and "unsubscribe".
239 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
240 -davNamespaces]): declare the
241 "urn:inverse:params:xml:ns:inverse-dav" xml ns.
242 ([SOGoUserFolder -foldersOfType:folderTypeforUID:uid]): new method
243 designed to replace the UIxContactFoldersView.m mechanism for
244 displaying folders to subcribe to, as a common code base for both
245 Web and DAV-based subscriptions.
246 ([SOGoUserFolder -foldersOfType:typematchingUID:uid]): same as
248 ([SOGoUserFolder -davCollectionQuery:queryContext]): new method
249 that implement a custom DAV-based protocol query for querying
250 folder based on specified attributes.
252 2007-12-03 Ludovic Marcotte <ludovic@inverse.ca>
254 * Main/NSException+Stacktrace.{h,m} - new files
255 to handle automatic stack trace generation
256 upon an uncaught exception.
258 * Updated the templates and Localizable.string files
259 to fix typos and add new strings.
261 * SoObjects/Mailer/SOGoMailBodyPart.m
262 Fixed attachment retreival when the first character
265 * SoObjects/SOGo/SOGoGCSFolder.m
266 Fixed the sending of emails when folders are created/removed.
267 Notifications are sent if the defaults SOGoFoldersSendEMailNotifications
270 * UI/Common/UIxUserRightsEditor.m
271 * UI/Templates/SOGoACLEnglishModificationAdvisory.wox
272 * UI/Templates/SOGoACLFrenchModificationAdvisory.wox
273 * UI/Templates/SOGoACLGermanModificationAdvisory.wox
274 Added the capabilities to email notifications when ACLs have
275 changed on a DAV collection or an IMAP mailbox. Also added
276 new templates (3 .wox) to deal with this.
278 * UI/WebServerResources/ContactsUI.js
279 UI/WebServerResources/SchedulerUI.js
280 Added warnings on operations w/o selection.
282 2007-11-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
284 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
285 -appendSubscribedSources]): don't include sources for which we
286 don't have the SOGoPerm_AccessObject permission.
288 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
289 -rfc822DateString]): we want positive timezones to be specified
290 with a leading "+" too.
292 2007-11-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
294 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
295 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
296 return nil if the subscribed folder has no display name (meaning
297 it no longer exists).
299 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
300 -appendPersonalSources]): don't include sources which are no
303 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
304 -ocsPathOfContainer]): return the intended value, not that of
307 * SoObjects/Appointments/SOGoCalendarComponent.m
308 ([SOGoCalendarComponent -sendResponseToOrganizer]): send the
309 message only of sendEMailNotifications is set.
311 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -subscriptionRoles]):
312 new method that returns the roles that qualifies for adding the
313 special "authorized subscribed" sogo role.
315 2007-11-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
317 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
318 -aclsForUser:uid]): copy all the roles from the container. If the
319 object is new, make sure the roles contain "ObjectEditor" if and
320 only if "ObjectCreator" is present.
322 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
323 -aclsForUser:uid]): no longer take the "ObjectReader" role into
326 * UI/Common/UIxFolderActions.m ([UIxFolderActions
327 -canAccessContentAction]): always return HTTP status 204. We want
328 this because we are relying on the SOPE access control manager to
329 grant access to this method. This requires a fine-tuned access
330 control in SOGo itself...
332 * UI/Contacts/UIxContactsUserRightsEditor.m ([-userCanReadObjects])
333 ([-setUserCanReadObjects:userCanReadObjects]): removed methods.
335 * UI/MailerUI/UIxMailUserRightsEditor.m ([UIxMailUserRightsEditor
336 -updateRights]): no longer take the "ObjectReader" role into account.
337 ([-userCanReadMails], [-setUserCanReadMails:userCanReadMails]):
340 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
341 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): specify context
342 when looking up the Calendar folder.
344 2007-11-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
346 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): same as below.
348 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
349 -event]): create the event if it doesn't exist.
351 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -userHasCalendarAccess])
352 ([UIxPreferences -userHasMailAccess]): same as below, for
353 displaying preference tabs.
355 * UI/Common/UIxPageFrame.m ([UIxPageFrame
356 -userHasCalendarAccess]): new accessor for the link banner.
357 ([UIxPageFrame -userHasMailAccess]): same as above.
359 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
360 -toManyRelationshipKeys]): do not report the path to modules to
361 which the user has no access. No longer cache this information
362 statically, the array will be generated at each call.
363 ([SOGoUserFolder -lookupName:_keyinContext:_ctxacquire:_flag]):
364 ignore the path to modules to which the user has no access.
366 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -canAccessModule:module]):
367 new method that returns whether the user has access to the
370 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
371 -initFromUDSource:udSource]): take a new parameter named
372 'ModulesContraints' that defines a set of constraints for
373 accessing specified named modules. This is an optout, meaning the
374 modules will be present unless a constraint is specified.
376 * SoObjects/Appointments/SOGoAppointmentFolder.m
377 ([SOGoAppointmentFolder
378 -roleForComponentsWithAccessClass:accessClassforUser:uid]): cache
379 acl to reduce method calls.
380 ([SOGoAppointmentFolder
381 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
382 if the user is not the current user, we strip the useless info
385 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
386 -labelForKey:key]): new category method.
388 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
389 -event]): same as below.
391 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): request a
392 secured version of the component.
394 * UI/MailPartViewers/UIxMailPartViewer.m
395 ([-fallbackStringEncoding]): removed method.
396 ([UIxMailPartViewer -flatContentAsString]): we no longer use [self
397 fallbackStringEncoding]. Instead we directly specify
398 NSISOLatin1StringEncoding if UTF-8 has failed.
400 * UI/MailPartViewers/UIxMailPartICalViewer.m
401 ([-fallbackStringEncoding]): removed method.
403 2007-11-25 Ludovic Marcotte <ludovic@inverse.ca>
405 * SoObjects/Mailer/SOGoMailForward.m
406 Use [sourceMail decodedSubject] instead of [sourceMail subject]
407 Signature fix in -signature - see the comment
410 * SoObjects/Mailer/SOGoMailObject.m
411 Improved -stringFromData: to try UTF-8 then fallback to Latin1
413 * SoObjects/Mailer/SOGoMailReply.m
414 Modified -messageBody to strip the signature from the reply.
415 Also modified -signature to add "-- \n%@" instead of the
416 broken ""--\r\n%@" pattern.
418 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m
419 We now favor text/calendar parts over text/html and
420 text/plain parts when viewing a multipart/alternative mail.
421 This allows us to show the email invitations coming from
424 * UI/MailerUI/UIxMailAccountActions.m
425 Signature fix in -composeAction - see the comment
428 * UI/MailPartViewers/UIxMailPartViewer.m
429 Modified -flatContentAsString to use UTF-8 as the
430 default fallback encoding for 8-bit content.
432 * SoObjects/Mailer/SOGoDraftObject.m
433 Modified _fillInReplyAddresses:replyToAll:envelope:
434 so that if there's no recipient, we add at least
436 Fixed a mem leak in the same method.
438 2007-11-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
440 * UI/MailPartViewers/UIxMailRenderingContext.m
441 ([UIxMailRenderingContext -viewerForBodyInfo:_info]): same as below.
443 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
444 -plainTextContentFetchKeys]): same as below.
446 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
447 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): accept the
448 application/ics type from Google Calendar.
450 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
451 +distantFuture]): rewrote method to return an object that is
452 compatible with NSCalendarDate, unlike the implementation in
454 ([NSCalendarDate +distantPast]): same as above.
456 2007-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
458 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: fixed infinite loop
459 when charset is us-ascii, match it to ascii rather than none.
461 * SoObjects/Appointments/SOGoAppointmentFolder.m
462 ([SOGoAppointmentFolder
463 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
464 added search on the c_title column too.
466 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
467 -eventsListAction]): take the "search" url parameter into account.
468 ([UIxCalListingActions -eventsListAction]): fetch events matching
469 the title filter too.
471 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -connectAction]): the
472 user infos are now posted as "application/x-www-form-urlencoded".
473 So we have to have like a form has been posted.
475 2007-11-21 Francis Lachapelle <flachapelle@inverse.ca>
477 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
478 -calendarList]): also returns the calendar of the current
479 event. This is required so the proper calender is selected when
480 you view an event to which you don't have write access.
482 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
483 also returns true for super users.
485 2007-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
487 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
488 -lookupImap4BodyPartKey:inContext:]): return a correct body part
489 when "0" is requested, taking its mime-type into account.
491 * UI/MailPartViewers/UIxMailRenderingContext.m
492 ([UIxMailRenderingContext -flatContentForPartPath:_partPath]):
493 return content for part "0", which would be the message body.
495 2007-11-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
497 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
498 ([_UIxHTMLMailContentHandler
499 -setContentEncoding:newContentEncoding]): new method that
500 specifies an xml charset to return to the parser.
501 ([UIxMailPartHTMLViewer -flatContentAsString]): specifies the
502 charset to the content handler before parsing.
504 * SoObjects/Appointments/SOGoAppointmentObject.m: don't take an
505 empty c_name as a valid response when looking up an event. Create
506 one in that case instead.
508 2007-11-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
510 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -signature]):
511 returns the signature for the default identity of the default
513 ([UIxPreferences -setSignature:newSignature]): accessor that sets
514 the default signature.
516 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
517 -composeAction]): append the message signature to the new draft.
519 * SoObjects/Mailer/SOGoMailReply.m ([SOGoMailReply -signature]):
522 * SoObjects/Mailer/SOGoMailForward.m ([SOGoMailForward
523 -signature]): new method that takes the user's signature and put
524 it at the end of the message, if exists.
526 * UI/Common/UIxPageFrame.m ([UIxPageFrame -isSuperUser]): new
527 accessor that forwards the call to the active user.
529 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -signature]): returns the
530 user default signature.
531 ([SOGoUser -isSuperUser]): declares whether the user is listed
532 among the super users.
534 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
535 -setComponent:newComponent]): retain the component object.
536 ([UIxComponentEditor -organizerIdentity]): new accessor method to
537 handle list of possible organizers.
539 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
540 -event]): retain the returned event object.
542 * SoObjects/Appointments/SOGoAppointmentObject.m
543 ([SOGoAppointmentObject -saveComponent:newEvent]): reset the
544 organizer only if there are no attendees AND the owner of the
545 component is not the organizer him-/herself.
547 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
548 -toolbar]): rewrote in a way that ensures that each case is
551 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -isEqual:otherUser]): new
554 * UI/Scheduler/UIxTaskEditor.m ([-acceptAction])
555 ([-declineAction]): commented out unused methods.
557 * UI/MailPartViewers/UIxMailPartICalActions.m
558 ([UIxMailPartICalActions -deleteFromCalendarAction]): actually
559 delete the found object.
561 2007-11-18 Ludovic Marcotte <ludovic@inverse.ca>
563 * SoObjects/Mailer/SOGoMailBodyPart.m
564 SoObjects/Mailer/SOGoMailObject.m
565 UI/MailPartViewers/UIxMailPartViewer.m
566 Added support of messages containing non-textual
567 content and no parts.
569 * UI/MailerUI/UIxMailView.m
570 SoObjects/Mailer/SOGoMailObject.m
571 UI/Templates/MailerUI/UIxMailView.wox
572 Added support for the Reply-To header upon
575 2007-11-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
577 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]):
578 invoke saveComponent:.
580 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -hasOrganizer])
581 ([UIxComponentEditor -organizerName]): new template accessor
582 related to displaying the event's organizer.
583 ([-containsConflict:_component]): removed method.
584 ([UIxComponentEditor -takeValuesFromRequest:_rqinContext:_ctx]):
585 set RSVP to "TRUE" on each attendee.
587 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
588 -saveAction]): invoke saveComponent:.
590 * UI/MailPartViewers/UIxMailPartICalViewer.m
591 ([UIxMailPartICalViewer -isLoggedInUserTheOrganizer]): make use of
592 the -userIsOrganizer: category method.
593 ([-isLoggedInUserAnAttendee]): make use of -userIsParticipant:.
594 ([UIxMailPartICalViewer -hasSenderStatusChanged]): new template
595 accessor that determines whether the "Update" button should be
598 * UI/MailPartViewers/UIxMailPartICalActions.m
599 ([UIxMailPartICalActions -deleteFromCalendarAction]): implemented
601 ([UIxMailPartICalActions -updateUserStatusAction]): implemented
604 * UI/Common/UIxPageFrame.m ([UIxPageFrame
605 -setCssFiles:newCSSFiles]): new accessor that enables the
606 sub-templates to specify extra CSS files to load.
608 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
609 -homeFolderInContext:context]): cache the home folder of the user
610 object instead of the current user.
612 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
613 -deleteEntriesWithIds:ids]): invokes the "prepareDelete" optional
614 method if the child object implements it.
616 * SoObjects/SOGo/SOGoContentObject.m ([-setContentString:])
619 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
620 -setBaseDN:newBaseDNIDField:newIDFieldCNField:newCNFieldUIDField:newUIDFieldmailFields:newMailFieldsandBindFields:newBindFields]):
621 take a new "mailFields" parameter defining an array of fields
622 where to look at when searching the user's emails. It defaults to
623 the standard "mail" LDAP field.
625 * SoObjects/Appointments/SOGoAptMailICalReply.[hm]: new
626 SoComponent implementing a template for ITIP replies.
628 * SoObjects/Appointments/iCalPerson+SOGo.m ([iCalPerson
629 -mailAddress]): new method that returns a properly formatted email
630 address for the specified person entry.
631 ([iCalPerson -uid]): new method that tests whether the user is
632 known to the system and if so, returns its user id.
634 * SoObjects/Appointments/iCalPerson+SOGo.[hm]: new category module.
636 * SoObjects/Appointments/iCalEventChanges+SOGo.m
637 ([iCalEventChanges -sequenceShouldBeIncreased]): determine whether
638 the changes involved need a sequence inscrease, based on the
641 * SoObjects/Appointments/iCalEventChanges+SOGo.[hm]: new category
644 * SoObjects/Appointments/iCalEvent+SOGo.m ([iCalEvent
645 -isStillRelevant]): new overriden method determining the relevance
646 of the current event based on its end date.
648 * SoObjects/Appointments/iCalEvent+SOGo.[hm]: new category module.
650 * SoObjects/Appointments/iCalEntityObject+SOGo.m
651 ([iCalEntityObject -attendeeUIDs]): new category methods that
652 returns an array containing the uids of the system-know attendees.
653 ([iCalEntityObject -isStillRelevant]): new template method.
654 ([iCalEntityObject -itipEntryWithMethod:method]): clone the
655 current entry calendar with the specified ITIP method.
656 ([iCalEntityObject -attendeesWithoutUser:user]): returns an array
657 of attendees while making sure the specified user is not listed.
659 * SoObjects/Appointments/SOGoCalendarComponent.m
660 ([SOGoCalendarComponent -calendar:create:secure]): new name for
661 -calendar:. Added a "secure" parameter that specifies whether a
662 stripped calendar instance is needed or not. Also, we no longer
663 cache the content to simplify handling of new data.
664 ([SOGoCalendarComponent -component:create:secure]): same as above.
665 ([SOGoCalendarComponent
666 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
667 test whether the component is "still relevant" before sending an
669 ([SOGoCalendarComponent -sendResponseToOrganizer]): new method for
670 sending ITIP replies.
671 ([SOGoCalendarComponent -getUIDsForICalPerson:iCalPerson]):
672 removed method. Replaced with -[iCalPerson uid] category method.
674 * SoObjects/Appointments/SOGoAppointmentObject.[hm]: rewrote
675 class. No longer override saveContentString:,
676 saveContentString:baseSequence:, .... Implemented the
677 saveComponent: and the prepareDelete methods instead. Those
678 methods are called only from the web methods. This avoids the
679 risks related to email sending and changes propagation.
681 * UI/Common/UIxTabItem.m: removed useless class module.
683 * UI/Common/UIxTabView.[hm]: removed useless class module.
685 * UI/Common/UIxPrintPageFrame.m: removed useless class module.
687 * UI/Common/UIxAppNavView.m: removed useless class module.
689 2007-11-16 Ludovic Marcotte <ludovic@inverse.ca>
691 * SoObjects/Mailer/SOGoMailBaseObject.m
694 * SoObjects/Mailer/SOGoMailBodyPart.m
695 We also grok image/jpeg and return the SOGoMailBodyPart
696 for attachments fetching.
698 * SoObjects/Mailer/SOGoMailObject+Draft.m
699 Prevent a crash in case body decoding failed during
702 * SoObjects/Mailer/SOGoMailObject.m
703 Improved body decoding during a reply to also try
704 latin1 as an encoding.
706 * UI/MailPartViewers/UIxMailRenderingContext.m
707 Greatly improved the display mechanisms for emails.
708 Also properly consider the content disposition for
711 * UI/MailerUI/UIxMailToSelection.m
712 Removed worthless code.
714 * UI/WebServerResources/MailerUI.css
715 CSS fix for table views.
717 2007-11-15 Ludovic Marcotte <ludovic@inverse.ca>
719 * UI/WebServerResources/MailerUI.js
720 We now check for empty selection and warn the
721 user about it when deleting messages
723 * SoObjects/Mailer/SOGoDraftObject.m
724 Correctly check for the presence of a subject
725 before attempting to forward a message from
728 * SoObjects/Mailer/SOGoMailObject+Draft.m
729 We no longer use "[Fwd: ]" but simply "Fwd:"
730 when forwarding email messages.
732 * SoObjects/SOGo/SOGoUser.m
733 Modified the default forwarding format to be
734 inline instead of "attachment".
736 * SoObjects/Mailer/SOGoDraftObject.m
737 We now create and use a NGMimeContentDispositionHeaderField
738 in order to avoid encoding the whole Content-Disposition
739 header in case a non-ASCII char is present!
741 2007-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
743 * SoObjects/SOGo/iCalEntityObject+Utilities.m ([iCalEntityObject
744 -findParticipant:user]): new method based on the one removed from
745 SOGoCalendarComponent below.
747 * SoObjects/SOGo/iCalEntityObject+Utilities.[hm]: new category
748 module for iCalEntityObject.
750 * SoObjects/Appointments/SOGoCalendarComponent.m
751 ([-findParticipant:user]): removed method.
753 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
754 -setContentString:newContent]): new accessor method.
756 -saveContentString:newContentbaseVersion:newBaseVersion]): invoke
757 -[self setContentString:].
759 * UI/MailPartViewers/UIxMailPartICalViewer.m
760 ([UIxMailPartICalViewer -authorativeEvent]): returns the most
762 ([-isLoggedInUserTheOrganizer]): make use of -[SOGoUser
765 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
766 -stringByConvertingCRLNToHTML]): fixed crashes due to overflows in
767 temporary buffer we are handing.
769 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
770 -setComponent:newComponent]): check that newComponent is non-nil
771 before replacing the default values.
772 ([UIxComponentEditor -calendarList]): privacy is already an ivar.
773 We don't need to refetch it.
775 2007-11-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
777 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
778 -fetchMailForReplying:sourceMailtoAll:toAll]): remove the current
779 user from the list of recipients and make sure no other address is
782 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
783 -stringByConvertingCRLNToHTML]): build the returned NSString
784 without the ending \0.
786 2007-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
788 * UI/MailPartViewers/UIxMailPartICalViewer.m
789 ([UIxMailPartICalViewer -acceptLink])
790 ([UIxMailPartICalViewer -declineLink])
791 ([UIxMailPartICalViewer -tentativeLink]): removed useless methods.
793 * UI/MailPartViewers/UIxMailPartICalAction.m
794 ([UIxMailPartICalAction -addToCalendarAction])
795 ([UIxMailPartICalAction -deleteFromCalendarAction]): new stub
798 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
799 -lookupImap4BodyPartKey:]): make use of the new method below.
801 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
802 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): new method
803 that returns an appropriate Class depending on a given mime type.
805 * UI/SOGoUI/UIxComponent.m ([UIxComponent -canCreateOrModify]):
806 new boolean accessor that determines whether someone can create
807 (i.e. modify a new entry) or modify an existing entry.
809 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
810 -lookupName:lookupNameinContext:localContextacquire:acquire]):
811 overriden method to bind looked up keys to So methods but by
812 avoiding a call to toOneRelationshipKeys. This will be the top
813 method of the chain, meant to override SoObject's behaviour.
815 * SoObjects/Contacts/SOGoContactLDAPFolder.m
816 ([SOGoContactLDAPFolder
817 -lookupName:objectNameinContext:lookupContextacquire:acquire]):
818 removed hack to prevent [super lookupName...] to read the entire
819 LDAP directory when looking up a record.
821 2007-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
823 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
824 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
827 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
828 ([UIxMailPartHTMLViewer -_attachmentIds]): the reference was one
829 character too short, which cause the images not to be displayed
830 sometimes and crashes to happen whenever the references on a
831 message were wrong (due to bugs in SOPE).
833 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
834 -hasMessageAttachment]): consider an attachment any content that
835 has a non-nil disposition.
837 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
838 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
839 fixed method to make use of the parameters instead of the useless
840 remains that weren't even initialized.
842 * SoObjects/Appointments/SOGoAppointmentObject.m
843 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
844 don't propagate the event among the attendees if this is not an
846 ([SOGoAppointmentObject -deleteWithBaseSequence:]): same as above.
848 * Main/SOGo.m ([SOGo -authenticatorInContext:context]): make use
849 of the new category method below.
851 * SoObjects/SOGo/WORequest+SOGo.m ([WORequest
852 -handledByDefaultHandler]): new method that returns whether this
853 is an "so" or alike request.
855 * SoObjects/SOGo/WORequest+SOGo.[hm]: new category module.
857 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
858 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
859 write the new folder's name in the folder cache.
861 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
862 -calendars]): same as below.
864 * UI/Contacts/UIxContactsListViewContainer.m
865 ([UIxContactsListViewContainer -currentContactFolderName]):
866 translate the display name if its the default one.
868 * SoObjects/Appointments/SOGoAppointmentFolder.m
869 ([SOGoAppointmentFolder -create]): overriden method that invokes
870 its ancestor and then activate itself within the user settings.
872 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
873 -appendPersonalSources]): when the user is the owner of the
874 current folder, we create the "personal" folder if it doesn't
875 exist by invoking "create".
877 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
878 -primaryFetchProfile]): when no row is returned, we initialize
879 "values" to a new dictionary. This solves a bug where the defaults
880 would not be initialized properly.
882 2007-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
884 * SoObjects/SOGo/SOGoGCSFolder.m ([-compare:otherFolder]): method
885 moved into the SOGoFolder class.
887 * SoObjects/Appointments/SOGoAppointmentObject.m
888 ([SOGoAppointmentObject -saveContentString:_iCalinUIDs:_uids]):
889 simplified method by directly building a similar appointment
890 object with the current folder as container.
892 * SoObjects/Contacts/SOGoContactLDAPFolder.m
893 ([SOGoContactLDAPFolder
894 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
895 take the content of an object returned by
896 lookupName:inContext:acquire: instead of the dictionary passed as
897 parameter since it represents a flattened entry return by
898 lookupContactsWithFilter...
900 * SoObjects/Contacts/SOGoFolder+CardDAV.m: NSObject+CardDAV
901 category renamed to SOGoFolder+CardDAV.
903 * SoObjects/SOGo/SOGoParentFolder.m: no longer a subclass of
904 SOGoObject, but of SOGoFolder instead.
906 * SoObjects/SOGo/SOGoUserFolder.m: no longer a subclass of
907 SOGoGCSFolder, but of SOGoFolder instead.
909 * SoObjects/Appointments/SOGoAppointmentFolder.m
910 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): fixed
911 to take the new SOGoParentFolder class into account. Also, create
912 the personal folder if it doesn't exist.
914 * SoObjects/SOGo/SOGoFolder.[hm]: new class module implementing
915 the parent of all SOGo containers.
917 * SoObjects/SOGo/SOGoGCSFolder.[hm]: SOGoFolder class renamed to
920 2007-11-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
922 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection
923 -getAddressesFromFormValues:_dict]): take NSString and NSArray
924 values. Ignore addresses with a length of 0.
926 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -mailAccounts]): we now
927 fetch the accounts from the user defaults and create default
930 2007-11-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
932 * UI/MailPartViewers/UIxMailPartTextViewer.m
933 ([UIxMailPartTextViewer -flatContentAsString]): re-added
934 conversion of line-break to sequences of HTML "BR", with a fast
937 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
938 -flatContentAsString]): simplified method now that we know
939 -[NSString stringWithData:usingEncodingNamed:] has a more robust
942 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
943 -showToAddress]): the answer is cached.
945 * UI/Common/UIxObjectActions.m ([UIxObjectActions +initialize]):
946 read "SOGoACLsSendEMailNotifications" from the user defaults to
947 determiner whether to send an email when a user is added or
948 removed from an object's acl.
950 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
951 -contentForEditing]): make sure the htmlContent flag is set to NO
952 when we select the textual part. Also we select only the relevant
955 * UI/MailerUI/WOContext+UIxMailer.m ([-mailSubjectFormatter]):
958 * UI/MailerUI/UIxMailView.m ([UIxMailView -messageSubject]): new
959 method replacing -objectTitle, written like the ones below.
961 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
962 -messageSubject]): rewrote method to act the one below.
964 * UI/MailPartViewers/UIxMailPartMessageViewer.m
965 ([UIxMailPartMessageViewer -messageSubject]): new method that
966 returns the decoded mail subject or "Untitled" if the subject is
969 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
970 -decodedSubject]): new method that invoke -decodedSubject from the
971 NSString and NSData class, depending on the identity of the
972 subject obtained from the envelope.
974 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
975 -subjectForReply]): take the value of -[SOGoMail decodedSubject]
976 instead of the subject of the envelope.
977 ([SOGoMailObject -filenameForForward]): same as above.
978 ([SOGoMailObject -subjectForForward]): same as above.
980 * SoObjects/Mailer/NSString+Mail.m ([NSString -decodedSubject]):
981 same as below for NSString.
983 * SoObjects/Mailer/NSData+Mail.m ([NSData -decodedSubject]): new
984 method that decodes the subject of a mail taken as an NSData
985 instance. Handling the exceptions and the badly formatted headers.
987 * UI/MailerUI/UIxSubjectFormatter.[hm]: dropped class module.
989 2007-11-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
991 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
992 -deleteEntriesWithIds:ids]): make sure the objects returned by
993 lookupName:... are not instances of NSException.
995 2007-11-03 Ludovic Marcotte <ludovic@inverse.ca>
997 * UI/Scheduler/UIxAppointmentEditor.m
998 Fixed monthly recurrences support.
1000 2007-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1002 * SoObjects/Appointments/SOGoAppointmentObject.m
1003 ([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
1004 sent when modifying an event, when the event was considered
1005 relevant. The same thing is now implemented for event deletion.
1007 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1008 -primaryFetchProfile]): make sure that the deserialized "values"
1009 is an instance of NSMutableDictionary, otherwise we override it
1012 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1013 -contentForReply]): make use of the SOGoMailReply WO page.
1015 * SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
1016 from SOGoMailForward to handle mail replies instead. Only three
1017 methods remaining: date, from and messageBody. The latter is
1020 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1021 -fetchMailForForwarding:sourceMail]): fetch attachments for
1024 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1025 -hasMessageAttachment]): initialize hasAttachment with "NO" to
1026 avoid false positives.
1028 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
1029 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
1030 set title to an empty string where the event/task summary is null.
1032 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1033 -setHeaders:newHeaders]): make sure there is a message id in the
1034 headers dictionary, if not, generate one.
1035 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
1036 message id from the existing draft.
1037 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
1038 message id in the header map.
1040 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1041 -deleteFolderAction]): no longer prefix the target folder with
1044 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1045 -listMailboxesAction]): base the folder type on the folder
1048 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1049 -lookupName:_keyinContext:acquire:_acquire]): compare the full
1050 traversal to the potential looked up folder with the special
1051 folder names and return an object with the appropriate
1052 SOGoMailFolder subclass.
1054 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1055 -traversalFromMailAccount]): don't prepend the whole string with
1058 * SoObjects/Mailer/SOGoMailAccount.m
1059 ([-lookupSentFolder:_keyinContext:_ctx])
1060 ([-lookupDraftsFolder:_keyinContext:_ctx])
1061 ([-lookupTrashFolder:_keyinContext:_ctx])
1062 ([-lookupFiltersFolder:_key:_ctx]): removed methods.
1063 ([SOGoMailAccount -inboxFolderNameInContext:])
1064 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1065 ([SOGoMailAccount -sentFolderNameInContext:])
1066 ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
1067 the resulting name with "prefix" since we might return a nested
1069 ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
1070 names with "/". Sorts the resulting folder list with
1071 localizedCaseInsensitiveCompare: instead of
1072 caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
1073 that were removed, instead, we choose the appropriate class
1074 depending on the folder name. And since we are in SOGoMailAccount,
1075 we don't have to compute a traversal path to match the key with
1078 -folderWithTraversal:traversalandClassName:className]): new method
1079 that returns an instance of the specified SOGoMailFolder subclass,
1080 based on the traversal path passed as parameter.
1081 ([SOGoMailAccount -inboxFolderInContext:_ctx])
1082 ([SOGoMailAccount -draftsFolderInContext:_ctx])
1083 ([-sentFolderInContext:_ctx])
1084 ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
1085 -folderWithTraversal:andClassName: method described above.
1087 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1088 -primaryFetchProfile]): make use of -[NSPropertyListSerialization
1089 propertyListFromData:mutabilityOption:format:errorDescription:] to
1090 deserialize the plist. Removed variant for libFoundation since it
1091 should support the above.
1092 ([AgenorUserDefaults -generateSQLForInsert])
1093 ([AgenorUserDefaults -generateSQLForUpdate]): make use of
1094 -[NSPropertyListSerialization
1095 dataFromPropertyList:format:errorDescription:] to serialize the
1096 plist. Removed variant for libFoundation since it should support
1097 the above. Escape the backslashes from the resulting string.
1099 2007-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1101 * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
1102 SOGoMailFolder: SOGoMailSpecialFolder.
1104 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1105 -traversalFromMailAccount]): overridden method that returns the
1106 initialized mutable string.
1107 ([SOGoMailAccount -allFolderPaths]): take the special folder paths
1108 with -traversalFromMailAccount and reposition them at the
1109 beginning of the list. By creating the special folders during that
1110 request, we also make sure that the folder exists thanks to the
1111 new initialisation method of the new "SOGoSpecialMailFolder"
1113 ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
1115 ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
1117 ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
1118 longer use lookupImap4Folder.
1119 ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
1122 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1123 -traversalFromMailAccount]): new method that returns the full
1124 IMAP4 path to the object.
1126 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
1127 "superUsernames" after fetching it from the ud.
1129 2007-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1131 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1132 -eventsListAction]): substitude the start and end date with their
1133 UTC counterpart, taking into account the offset from UTC related
1134 to those dates instead of the current one. This renders
1135 -[UIxCalMainView -userUTCOffset] obsolete because the computings
1136 that occured in javascript are now done server-side.
1138 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
1139 removed obsolete method.
1141 * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
1142 method converting html content to plain text.
1144 * SoObjects/Mailer/NSString+Mail.[hm]: new category module
1145 enhancing NSString with utility methods pertaining to mail handling.
1147 * SoObjects/Mailer/SOGoMailObject.m
1148 ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
1150 -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
1151 modified method to be always recursive and to take an array of the
1152 accepted mime-types as parameter. The returned array now contains
1153 the mime-type as well as the part keys.
1155 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1156 -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
1157 ([SOGoMailObject -contentForEditing]): rewrote method to take into
1158 account the first text/plain part or the first text/html part
1159 converted to text/plain with our new -[NSString htmlToText]
1162 * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
1163 "replyToAll:" with YES as parameter instead of NO.
1165 2007-10-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1167 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1168 -davContentType]): ignore any possible parameter taken from the
1169 mime-info of the body part.
1171 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1172 -lastFirstMessageNumber]): new accessor that returns the first
1173 message number of the last series of messages.
1174 ([UIxMailListView -fetchKeys]): request the bodystructure for each
1176 ([UIxMailListView -hasMessageAttachment]): extract the attachment
1177 information from the message bodystructure.
1179 2007-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1181 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1182 -GETAction:]): use the "application/octet-stream" mime type for
1183 elements of type "application/x-xpinstall" to avoid confusing
1186 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
1187 ([UIxPreferences -itemMessageCheckText])
1188 ([UIxPreferences -userMessageCheck])
1189 ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
1190 methods for handling the retrieval of new messages automatically.
1192 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
1193 that returns the interval of time between automatic message
1196 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1197 -defaultAction]): now expunges the last folder marked for expunge.
1199 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1200 -trashInContext:_ctx]): now marks the container folder for
1203 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1204 -markForExpunge]): new method that marks the folder for the next
1205 automatic expunge operation in the user settings.
1206 ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
1207 takes the last folder marked for expunge, expunges it and removes
1208 it from the user settings, if it exists.
1210 2007-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1212 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1213 -messageSubjectCellStyleClass]): added support for replied,
1214 forwarded, forwarded and replied mails.
1216 * SoObjects/Mailer/NSData+Mail.m ([NSData
1217 -bodyDataFromEncoding:encoding]): new utility method that decodes
1218 the NSData instance properly depending on the encoding string
1219 passed as parameter.
1221 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1222 -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
1224 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1225 -stringForData:_datapartInfo:_info]): simplified by invoking
1226 -bodyDataFromEncoding: from our new NSData category methods.
1228 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1229 -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
1230 where only the body part of the first of the keys fetched was
1231 returned. Also decodes the body parts properly following their
1234 * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
1235 extends the NSData class with utility methods useful for handling
1238 2007-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1240 * SoObjects/SOGo/NSArray+Utilities.m
1241 ([NSArray -stringsWithFormat:format]): replace instances of NSNull
1244 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1245 -keysWithFormat:keyFormat]): replace instances of NSNull with
1248 * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
1249 empty, use "c_cn" instead.
1251 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1252 ([SOGoMailAccount -draftsFolderInContext:_ctx])
1253 ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
1254 of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
1255 no always be specified from the root instead of sometimes from the
1258 2007-10-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1260 * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
1261 ([UIxPageFrame -productLocalizableStrings]): invoke the new
1262 +[SOGoUser language] method if the user is nil.
1264 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
1265 that returns any generically-found language.
1266 ([SoUser -language]): modified to call the above.
1267 ([SOGoUser -language]): modified to call the above if the user
1268 language has a null length.
1270 * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
1271 -davEntityTag]): modified to return the "hash" of the vCard string.
1273 * UI/MailerUI/UIxMailActions.m ([UIxMailActions
1274 -removeAllLabelsAction]): new method that removes all label flags
1275 from the associated message.
1276 ([UIxMailActions -addLabel1Action]
1277 [UIxMailActions -addLabel2Action]
1278 [UIxMailActions -addLabel3Action
1279 [UIxMailActions -addLabel4Action]
1280 [UIxMailActions -addLabel5Action]): new methods that adds label
1281 flags to the associated message.
1282 ([UIxMailActions -removeLabel1Action]
1283 [UIxMailActions -removeLabel2Action]
1284 [UIxMailActions -removeLabel3Action
1285 [UIxMailActions -removeLabel4Action]
1286 [UIxMailActions -removeLabel5Action]): new methods that removes
1287 label flags from the associated message.
1289 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
1290 new accessor that returns the labels associated with the message.
1292 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1293 -allFolderPaths]): new method that returns all the paths of all
1294 the subfolders of the folder object.
1295 ([SOGoMailFolder -allFolderURLs]): new method replacing
1298 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1299 -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
1300 role from its parent folder.
1302 2007-10-19 Francis Lachapelle <flachapelle@inverse.ca>
1304 * SoObjects/SOGo/SOGoUser.m
1305 ([SOGoUser -rolesForObject:objectinContext:context]): allow
1306 multiple super usernames to be defined. The user default
1307 SOGoSuperUsername is renamed SOGoSuperUsernames and must be
1310 2007-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1312 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1313 -userInContext:]): override the super method by returning
1314 anonymous if the super returns nil.
1316 * UI/Common/UIxPageFrame.m ([UIxPageFrame
1317 -productLocalizableStrings]): new method that returns the
1318 product-specific translation dictionary as a JSON hash.
1319 ([UIxPageFrame -commonLocalizableStrings]): same as above but for
1320 the "Common" framework.
1321 ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
1322 the requestor components to require additional Javascript files.
1323 This is useful now that all the scripts are loaded at the end of
1325 ([UIxPageFrame -additionalJSFiles]): new getter related to the
1328 2007-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1330 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
1331 implemented new web method.
1333 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1334 -copyToFolderNamed:folderNameinContext:]): new method with the
1335 code cut/pasted from -moveToFolderNamed:inContext:.
1336 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
1337 modified to use the code from -copyToFolderNamed:inContext:, which
1338 is common between the two actions.
1340 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1341 ([SOGoMailAccount -sentFolderNameInContext:])
1342 ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
1343 the user settings into account.
1345 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
1346 ([UIxMailFolderActions -setAsSentFolderAction])
1347 ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
1348 that change the purpose of the active folder to "Sent", "Drafts"
1351 * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
1352 returns the subject as quoted-printable.
1354 * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
1355 SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
1356 the "aclMethod" method for the subsequent language-dependent
1359 * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
1360 returns the subject as quoted-printable.
1362 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1363 -dealloc]): release item, aptStartDate and aptEndDate.
1365 2007-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1367 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1368 -initWithName:newNameinContainer:newContainer]): the owner of a
1369 shared folder is set to "nobody" by default.
1371 * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
1372 that returns whether the object has an owner or not.
1374 2007-10-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1376 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1377 the folder even if the current user is not its owner.
1379 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
1381 * We now send advisory emails when folders
1382 are created / deleted.
1384 * Fixed the sending of advisory emails upon
1385 ACL changes on folders.
1387 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
1389 * UI/Scheduler/UIxComponentEditor.m
1390 Implemented event/task priority support.
1392 * SoObjects/Contacts/SOGoContactGCSFolder.m
1393 Added CardDAV support.
1395 * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
1396 Implemented From: based on LDAP results based on
1397 the MailFieldNames attribute (an array) specified
1398 in every LDAP-based authentication sources.
1400 * UI/MailPartViewers/UIxMailPartTextViewer.m and
1401 UI/WebServerResources/MailerUI.css
1402 We avoid replacing "\r\n" and "\n" with <br /> and
1403 rather use CSS capabilities for proper formatting.
1404 This is _WAY_ faster on very large mails.
1406 2007-10-10 Francis Lachapelle <flachapelle@inverse.ca>
1408 * UI/Scheduler/UIxComponentEditor.m
1409 ([UIxComponentEditor -componentCalendar]): returns the calendar
1410 object of the current event.
1412 2007-10-05 Ludovic Marcotte <ludovic@inverse.ca>
1414 * UI/WebServerResources/MailerUI.js
1415 We check if at least one message is selected
1416 before performing a Reply/Reply All/Forward
1418 * SoObjects/Appointments/SOGoAppointmentFolder.m
1419 and others - implemented support for recurring
1420 events (with some known limitations right now,
1421 all soon to be fixed).
1423 2007-10-04 Francis Lachapelle <flachapelle@inverse.ca>
1425 * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
1426 the constraint that a username can't start with a digit.
1428 2007-10-02 Francis Lachapelle <flachapelle@inverse.ca>
1430 * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
1431 repository to Inverse's branch.
1433 2007-09-28 Francis Lachapelle <flachapelle@inverse.ca>
1435 * SoObjects/Mailer/SOGoDraftObject.m
1436 ([SOGoDraftObject -isValidAttachmentName:_name]): removed
1437 constraint on space in file name.
1438 ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
1439 now removes from file name all characters preceding a backslash.
1440 This happens with IE7 because the complete attachment file path
1443 2007-09-25 Francis Lachapelle <flachapelle@inverse.ca>
1445 * SoObjects/Appointments/SOGoAptMailNotification.m
1446 ([SOGoAptMailNotification -appointmentURL]): set personal as the
1447 default calendar where to add the event.
1449 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1450 activate the SOGoUIxDefaultModule user defaults.
1452 2007-09-21 Francis Lachapelle <flachapelle@inverse.ca>
1454 * UI/SOGoUI/UIxComponent.m
1455 ([UIxComponent -shortUserNameForDisplay]): returns the string
1456 "wrongusernamepassword" when authentication failed.
1458 2007-09-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1460 * UI/MailPartViewers/UIxMailPartICalViewer.m
1461 ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
1462 entry of the Calendars parent folder.
1464 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1465 -messageSubject]): new accessor method to work-around a problem
1466 within SOPE where a subject could be returned as an NSData.
1468 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1469 -appendPersonalSources]): make sure the value of the "c_path4" of
1470 the returned rows are not NSNull, otherwise, discard them.
1472 2007-09-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1474 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1475 -compare:otherFolder]): new overriden method that compares two
1476 contact foldes based on their class and then transfer the control
1477 to the super method in SOGoFolder.
1479 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1480 ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
1481 compare two contact folders based on their class and then their
1484 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
1485 new method for sorting folders. The folders are compared based on
1486 their ownership, whether they are a main folder and finally
1487 depending on their display name.
1489 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1490 -pathArrayToSOGoObject]): do not reorder the paths if the third
1491 element is an instance of NSNull.
1493 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1494 -subFolders]): returns a sorted array using the "compare:"
1497 2007-09-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1499 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1500 -calendars]): also returns the owner of the listed folders.
1502 * SoObjects/Appointments/SOGoAppointmentFolder.m
1503 ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
1505 * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
1506 method into UIxFolderActions.
1508 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1509 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
1510 freebusy info from the "personal" calendar.
1512 * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
1513 -createFolderAction]): new standardized method for requesting
1514 folder creations among gcs-based modules.
1516 * UI/Common/UIxParentFolderActions.[hm]: new action class module.
1518 * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
1519 module, equivalent to the SOGoParentFolder's child
1520 SOGoContactFolders, but for calendars.
1522 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
1523 method that returns translated strings for controller bundles
1524 (same as what UIxComponent does for view bundles).
1525 ([SOGoObject -pathArrayToSOGoObject]): new method that returns
1526 the real path to a subscribed folder (if subscribed).
1527 ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
1528 ([SOGoObject -globallyUniqueObjectId]): new instance method
1529 calling its class equivalent.
1531 2007-09-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1533 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
1534 whether the user is logged in and if so, redirect to his/her
1536 ([SOGoRootPage -appendToResponse:inContext:]): removed useless
1539 2007-09-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1541 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1542 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1544 ([SOGoFolder -displayName]): new method.
1545 ([SOGoFolder -delete]): accept to proceed only if nameInContainer
1548 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1549 ([SOGoContactLDAPFolder
1550 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1551 renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
1553 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1554 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1555 removed method, reimplemented in SOGoFolder.
1556 ([SOGoContactGCSFolder -displayName]): removed method,
1557 reimplemented in SOGoFolder.
1558 ([-delete]): removed method, modified in SOGoFolder.
1560 * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
1561 a subclass of SOGoParentFolder.
1563 * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
1564 from SOGoContactFolders and modified to be more content-independent.
1566 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
1567 ([UIxMailActions -markMessageReadAction]): new methods moved from
1568 UIxMailListView and adapted to invoke the client object directly,
1569 since the previous versions had to to a lookup from the parent
1572 * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
1573 method into UIxMailActions.
1574 ([-markMessageReadAction]): same as above.
1575 ([-viewAction]): removed useless method.
1576 ([-javaScriptOK]): removed useless method.
1577 ([-isJavaScriptRequest]): removed useless method.
1578 ([-lookupActiveMessage]): removed useless method.
1580 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1581 -responseWithStatus:status]): new method that returns a WOResponse
1582 initialized with the specified status code.
1583 ([WODirectAction -responseWith204]): new method that invokes the
1584 above one with "204" as parameter.
1585 ([WODirectAction -redirectToLocation:newLocation]): rewrote method
1586 to make use of -responseWithStatus:.
1588 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
1589 method that returns a WOResponse initialized with the 204 status
1592 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
1593 always use a "not deleted" search qualifier along with the user
1594 qualifier (if present).
1596 2007-09-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1598 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1599 -contactSearchAction]): only return the records which have an
1602 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1603 -trashInContext:_ctx]): no longer expunge the mailbox after
1604 marking a message deleted.
1605 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
1608 * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
1609 ([-trashAction]): moved method into UIxMailActions.
1610 ([-moveAction]): moved method into UIxMailActions.
1612 2007-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1614 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1615 ([_UIxHTMLMailContentHandler
1616 -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
1617 comments from the CSS code, do not add the CSS code to the body
1618 content and remove references of body from the CSS declarations.
1619 ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
1620 ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
1621 common with cssContent in a different method and invoke it only
1624 * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
1625 instead of UIxPageFrame.
1627 2007-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1629 * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
1630 ([-appendToResponse:responseinContext:ctx]): commented out.
1631 ([SOGoRootPage -connectURL]): new accessor that returns the full
1632 url the the "connect" method.
1633 ([-connectAction]): rewrote method to return a properly formatted
1634 auth. cookie based on the username and password passed as
1637 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1638 set the value of the cookie to "discard" and set its expiration
1641 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1642 -preprocessCredentialsInContext:context]): consider the user
1643 anonymous if the cookie value is "discard".
1644 ([SOGoWebAuthenticator
1645 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1646 set the expiration date of the cookie to yesterday.
1648 * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
1649 returns the path to the application if the clientObject is not a
1652 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
1653 moved the requirement of authentication from the SOGo application
1656 * SoObjects/Appointments/SOGoAppointmentObject.m
1657 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
1658 check whether the new appointment object is still relevant before
1659 sending a notification.
1661 2007-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1663 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1664 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1665 render the login page through the SoDefaultRenderer.
1667 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
1668 -isPublicInContext:localContext]): new overriden method that
1671 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1672 -currentCalendarLogin]): replace css-unsafe characters with _.
1674 * UI/SOGoUI/UIxComponent.m ([UIxComponent
1675 -shortUserNameForDisplay]): simplified method.
1676 ([-user]): removed method since [context activeUser] is as useful.
1678 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1680 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1681 set the cookie path to "/".
1683 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
1684 authenticator based on the request handler key. "dav" returns the
1685 SOGoDAVAuthenticator, anything else returns the Web authenticator.
1687 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
1688 "SOGoAuthenticator".
1690 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
1691 implementing a subclass of SoCookieAuthenticator, designed for
1692 web-based cookie authentication of users.m
1694 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1695 new method that resets the authentification cookie.
1697 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1699 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
1700 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
1701 didBind to NO to make sure no false authentication is returned if
1702 the bind operation is not executed.
1704 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1706 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
1707 "In-Reply-To" header field when replying.
1709 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
1710 table field names that are queried.
1712 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1713 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
1714 add the "c_" prefix to the quick table field names that are
1717 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1719 * SoObjects/Appointments/SOGoAppointmentFolder.m
1720 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
1721 "personal" to the ocs path of the appointment folder.
1723 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1724 -flatContentAsString]): use latin1 when the encoding is not
1725 specified, and to reencode data chunk which were not correctly
1726 decoded with the original charset.
1728 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
1729 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
1730 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
1731 ([SOGoAppointmentFolder
1732 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
1733 override those methods to use the "personal" additional directory.
1735 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
1736 append "/personal" to the calendar path to simulate a single
1737 calendar in a choice of many.
1739 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1740 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
1741 methods back here. Moved the folder existence check here, and do
1742 it on self only when the lookup happens for a non-folder object.
1743 This permits to accept entries for folders with parents who
1746 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1748 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1749 -shouldTakeValuesFromRequest:requestinContext:context]): same as
1752 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1753 -shouldTakeValuesFromRequest:requestinContext:context]):
1754 redesigned method since any method called can be received from a
1755 POST or a GET. Instead we check the method call itself and we
1756 accept only if it has the "save" prefix.
1758 * SoObjects/Appointments/SOGoAptMailNotification.m
1759 ([SOGoAptMailNotification -getSubject]): returns the subject an a
1760 quoted-printable encoded string, if needed.
1762 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1763 -asQPSubjectString:encoding]): moved method into
1764 NSString+Utilities.m.
1766 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1768 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1769 -messageForwardingList])
1770 ([UIxPreferences -itemMessageForwardingText])D
1771 ([UIxPreferences -userMessageForwarding])
1772 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
1773 new template methods for manage the user preference regarding
1776 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
1777 algorithm to return, in order, the user's defined language or the
1778 first browser language or, finally, the default language.
1779 ([SOGoUser -messageForwarding]): new method that returns the user
1780 preference for message forwarding: "inline" or "attached",
1781 defaulting to "attached".
1783 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1784 -contentForInlineForward]): new method that returns the content of
1785 the message for inline forwarding based on the SOGoMailForward
1788 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1789 -fetchMailForForwarding:sourceMail]): check the user preference
1790 for message forwarding and compose inline forwarded messages if required.
1792 * SoObjects/Appointments/SOGoCalendarComponent.m
1793 ([SOGoCalendarComponent
1794 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1795 now use a template based on the language returned from the
1798 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
1799 a subclass of SOGoMailForward for English locale.
1801 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
1802 a subclass of SOGoMailForward for French locale.
1804 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
1805 helps build template for inline forwarded messages.
1807 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1809 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
1810 to handle "<var:if-ie>" template tags.
1812 * UI/SOGoElements: new extension bundle containing sogo-specific
1815 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1816 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
1817 selected in the dialog.
1818 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
1819 first category, if ever, of the calendar entity.
1821 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1822 -composeAction]): restored method since it is needed by the
1825 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1826 -composeAction]): the address fields should be arrays and not
1829 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
1830 that returns the build date of SOGo in the template.
1832 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1834 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1835 -_flattenedRecords:records]): when the c_cn field is empty,
1836 returns set a formatted string with the concatenation of
1837 c_givenname and c_sn as the displayName.
1839 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1840 -isValidMailAccountName:_key]): prevent unknown accounts from
1843 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1844 -pathToAttachmentObject]): we no longer need the filename
1845 extension for SoLookup...
1847 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1848 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
1849 filename to have an extension, and thus accept any filename.
1851 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1852 -currentCName]): new method that returns the c_name of the
1853 contact, correctly escaped to be passed by url afterwards.
1855 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1856 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
1857 instance of [self decodedFlatContent] instead of the buggy
1858 NSString from [super flatContentAsString] to the parser.
1860 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1862 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
1863 new category method to reponds to the "delete" web command on
1865 ([UIxMailActions -deleteAttachmentAction]): new category method to
1866 reponds to the "deleteAttachment" web command on drafts, taking
1867 the "filename" url parameter into account.
1869 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1870 -contentForEditing]): new method that retrieve the editable mail
1872 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
1873 returns the body keys for attached files (parts with a "filename"
1876 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1877 -asQPSubjectString:encoding]): do not change the string if the
1878 encoded string has the same length (which means it is already
1880 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
1881 that retrieve a draft along with its attachments for editing.
1882 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
1883 choke if the "to" header field is empty.
1884 ([SOGoDraftObject -delete]): new method to delete the draft folder
1885 whenever operations are done.
1887 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1889 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
1890 useless stub method, of which the intention was implemented in
1892 ([-lookupSentFolderUsingAccount]): removed obsolete method.
1893 ([-selectedMailIdentity]): removed obsolete method.
1894 ([-lookupSentFolderUsingFrom]): removed obsolete method.
1895 ([-storeMailInSentFolder:_path]): removed obsolete method, of
1896 which the mechanism has been put in -[SOGoDraftObject sendMail]
1898 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
1899 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
1900 adapted algorithms to the new SOGoDraftObject methods.
1901 ([-deleteAction]): removed method since local draft objects cannot
1902 be removed by the user.
1904 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1905 -expungeAction]): new method replacing the one previously found in
1907 ([UIxMailFolderActions -createFolderAction])
1908 ([UIxMailFolderActions -renameFolderAction])
1909 ([UIxMailFolderActions -deleteFolderAction])
1910 ([UIxMailFolderActions -emptyTrashAction])
1911 ([UIxMailFolderActions -subscribeAction])
1912 ([UIxMailFolderActions -unsubscribeAction]): error situations
1913 should have http return code 500 instead of 403.
1915 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1916 -composeAction]): new method replacing the one previously in
1919 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1920 -imap4URLString]): removed overriden method (see below).
1922 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
1923 cache the mailbox acl.
1924 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
1925 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
1927 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
1928 the new method of determining the users mail accounts.
1930 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
1931 longer adds a "/" at the end of the string (the default for
1932 folders), therefore this will be overriden in SOGoMailFolder
1933 rather than in SOGoMailObject.
1935 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
1936 method, moved into the new UIxMailActions module class.
1938 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
1939 -newDraft]): new method that returns a new SOGoDraftObject
1940 instance with a unique filename based on the current timestamp and
1941 the "newDraft" prefix.
1943 -lookupName:nameinContext:localContextacquire:acquire]): overriden
1944 method by detecting local drafts with their "newDraft" prefix.
1945 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
1947 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
1948 from scratch by making it a subclass of SOGoMailFolder.
1950 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
1953 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
1956 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
1959 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
1960 new method, initializing the new ivars: IMAP4ID, headers, text,
1961 sourceURL and sourceFlag.
1962 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
1963 ([-_ensureUserSpoolFolderPath])
1964 ([-saveMimeMessageToTemporaryFileWithHeaders:])
1965 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
1966 ([-deleteTemporaryMessageFile:], [-delete], [-content])
1967 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
1968 ([-uid], [-flags], [-size], [-envelope]): removed methods.
1969 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
1971 ([SOGoDraftObject -setSourceURL:newSourceURL])
1972 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
1973 methods to store the url of the original message between accesses
1974 so that, depending on the action taken (forward or reply), the
1975 correct flag can be given.
1976 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
1977 the imap4 id that is returned for the message whenever it is saved
1978 into the drafts folder.
1979 ([SOGoDraftObject -save]): new method that takes in charge the
1980 saving of the message in the IMAP drafts folder.
1981 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
1982 new method that fills the original data of the new message with
1983 the reply content of the original message.
1984 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
1985 above for message forwarding.
1986 ([-spoolFileManager]): removed useless method (only returned the
1987 default filemanager...)
1988 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
1989 the resulting message as an NSData chunk.
1991 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
1992 containing a rewrite of the mail action methods found in
1993 UI/Mailer/, that needed to be put in the SOGoMailObject class.
1994 ([SOGoMailObject -subjectForReply]): new method that returns a
1995 subject suitable for replies.
1996 ([SOGoMailObject -contentForReply]): new method that returns the
1997 textual content of an email, quoted for replying.
1998 ([SOGoMailObject -filenameForForward]): new method that returns
1999 the name of the filename that should contain the forwarded
2000 message, based on its subject.
2001 ([SOGoMailObject -subjectForForward]): explicit.
2003 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2005 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
2006 -mailAccounts]): rewrote method to return the name of the mail
2007 accounts now available with the -[SOGoUser mailAccounts] method.
2008 ([UIxMailMainFrame -showLinkBanner]): removed method.
2009 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
2010 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
2011 ([UIxMailMainFrame -rootURL]): removed method.
2012 ([UIxMailMainFrame -userRootURL]): removed method.
2013 ([UIxMailMainFrame -calendarRootURL]): removed method.
2014 ([UIxMailMainFrame -contactsRootURL]): removed method.
2015 ([UIxMailMainFrame -hasErrorText])
2016 ([UIxMailMainFrame -errorText])
2017 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
2018 ([-composeAction]): removed method. Now provided by
2019 UIxMailAccountActions.
2020 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
2021 ([UIxMailMainFrame -hideFolderTree]): removed method.
2022 ([UIxMailMainFrame -treeRootClassName]): removed method.
2023 ([UIxMailMainFrame +initialize]): removed method.
2024 SOGoMailTreeRootClass userdefaults will no longer have any effect.
2026 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
2027 -redirectToLocation:newLocation]): new method that implements the
2028 same functionality as WOComponent.
2030 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
2032 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
2033 method that returns whether the current mail is store in the
2034 drafts folder hierarchy.
2036 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
2037 ([-primaryEmail]): removed method.
2038 ([SOGoUser -primaryIMAP4AccountString]): removed method.
2039 ([SOGoUser -mailAccounts]): new method that returns an array
2040 containing description dictionaries for all the user mail
2041 accounts. Each account also contain the user's identities for that
2043 ([SOGoUser -allIdentities]): new utility method that returns all
2044 the user identities on all accounts.
2045 ([SOGoUser -primaryIdentity]): new method return the first
2046 identity of the first account.
2048 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
2050 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2051 -isInDraftsFolder]): returns NO.
2052 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
2054 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
2056 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2057 -isInDraftsFolder]): new method that detects if self is contained
2058 by the drafts folder by calling itself on the container object.
2060 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
2062 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
2063 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
2064 return the name of the mail accounts now available with the
2065 -[SOGoUser mailAccounts] method.
2067 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
2070 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
2073 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
2074 -keysWithFormat:format]): method that forward the method of the
2075 same name to each member of the array, considering they all are
2076 instances of NSDictionary.
2077 ([NSArray -objectsForKey:key]): same principle as above.
2078 ([NSArray -flattenedArray]): new method that transforms an array
2079 of arrays into a single array containing all the elements of the
2082 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
2083 -keysWithFormat:keyFormat]): new method inspired by the python
2084 string formatting system and which replaces occurences of "%{key}"
2085 by the corresponding keys.
2087 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2089 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
2090 sql script before the generic one when initializing mandatory
2093 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2095 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2096 -pureEMailAddress]): new utility method inspired by the
2097 "_rawSender" private method in SOGoDraftObject, which it now
2100 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
2101 provides a common API for sending emails, no matter what the
2104 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2106 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2107 -quotasAction]): invoke "relativeImap4Name" instead of
2108 "nameInContainer" since the latter also returns the "folder"
2111 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2112 -listMailboxesAction]): declare the output as text/plain in UTF-8.
2114 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2115 -deleteFolderAction]): fixed the url of the destination folder.
2117 * Main/SOGo.m ([SOGo +initialize]): show the build date and
2118 hostname at startup.
2120 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2122 * SoObjects/Appointments/SOGoCalendarComponent.m
2123 ([SOGoCalendarComponent
2124 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
2125 set the mail date to the current date string returned by our
2126 rfc822DateString extension method.
2128 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2129 -_gcsFoldersFromFolder:): ignore the personal folders who are
2130 returned but don't really exist.
2132 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
2134 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
2135 has to return only one element.
2137 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2139 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
2140 -content]): new method returning the decoded content of the
2141 corresponding attachment as an NSData instance.
2142 ([UIxMailPartViewer -filename]): if the "filename" parameter of
2143 the metadata parameterList is empty, try to find out the filename
2144 from the "disposition" metadata returned with the BODYSTRUCTURE
2147 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
2148 -composeAction]): prefix the INBOX folder with "folder".
2150 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
2151 -relativeImap4Name]): return nameInContainer stripped from its
2152 first 6 characters since all folder names are prefixed with
2155 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2156 -imap4URLString]): invoke -relativeImap4Name instead of
2157 "nameInContainer" since the former will return the fixed IMAP4
2158 foldername and the latter the SoObject name.
2160 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2161 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
2163 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
2164 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
2165 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
2166 ([SOGoMailAccount -sentFolderNameInContext:])
2167 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
2168 names with "folder".
2169 ([SOGoMailAccount -inboxFolderInContext:_ctx])
2170 ([SOGoMailAccount -sentFolderInContext:_ctx])
2171 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
2172 the folder names with "folder" since they are prefixed earlier.
2174 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2176 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
2177 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
2178 all starts with "folder".
2180 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
2181 longer declare security info from here.
2183 * SoObjects/Mailer/SOGoMailFolder.m
2184 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
2185 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
2186 folder names now always start with "folder".
2188 * SoObjects/Mailer/SOGoMailAccount.m
2189 ([-lookupName:inContext:acquire:]): folder names now always start
2192 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2194 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
2195 -forwardAction]): adapted to the new saveAttachment:withMetadata:
2198 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
2199 code to save the attached filenames with the filename returned by
2200 the web server as well as their mime types.
2202 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
2203 ([UIxMailPartMessageViewer -toAddresses])
2204 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
2205 the corresponding fields separated with a ", " (if needed).
2207 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
2208 -saveAttachment:_attachwithMetadata:metadata]): new method
2209 replacing -saveAttachment:withName: and which takes a dictionary
2210 as parameter with the filename and the mime type of the
2212 The mimetype is then saved in a hidden text file.
2213 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
2214 take the mime type from the hidden text file related to the
2217 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
2218 ([SOGoContactGCSFolder
2219 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2220 return records if the db records are > 0 and not just > 1...
2222 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2224 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
2226 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
2228 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2229 ([SOGoContactLDAPFolder
2230 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2231 translate the returned records to a normalized form.
2233 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2234 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2235 translate the returned records to a normalized form.
2237 * UI/Scheduler/UIxCalListingActions.m,
2238 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
2239 SoObjects/SOGo/AgenorUserDefaults.m,
2240 SoObjects/Contacts/SOGoContactGCSFolder.m,
2241 SoObjects/Appointments/SOGoAppointmentFolder.m,
2242 OGoContentStore/OCSiCalFieldExtractor.m,
2243 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
2244 table fields with "c_".
2246 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2248 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
2249 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
2250 the application settings. If set, both limit will influence the
2251 maximum size of the resultsets and the time taken to solve them.
2252 ([LDAPSource -_initLDAPConnection]): initialize the limits.
2254 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2256 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
2257 method that declares the DAV namespace related to CardDAV.
2258 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
2259 method that declares the "access-control" and "addressbook-access"
2260 classes to the list.
2262 * SoObjects/Appointments/SOGoAppointmentFolder.m
2263 ([-lookupActionForCalDAVMethod:]): removed method.
2264 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
2265 method that declares the DAV namespace related to CalDAV.
2267 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
2268 optional method for subclasses which handle specific extensions to
2269 the DAV protocol: CardDAV or CalDAV.
2271 -lookupName:lookupNameinContext:localContextacquire:acquire]):
2272 new overriden method that handles dav invocations for extensions
2273 to DAV by returning an appropriate SoSelectorInvocation.
2275 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2276 -asDavInvocation]): new method returning a dictionary with a "ns"
2277 key representing the dav namespace and a "method" key representing
2278 the dav method name of the request.
2280 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
2281 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
2283 ([UIxPreferences -shouldDisplayPasswordChange]): new template
2284 method that returns the value of SOGoUIxUserCanChangePassword.
2286 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
2287 scan the value of SOGoUIxDefaultModule. If not set, the default
2288 module defaults to "Calendar".
2289 ([SOGoUserHomePage -defaultAction]): redirect the user to the
2290 value of "SOGoUIxDefaultModule".
2292 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2294 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2295 -contactInfos]): cache the results to avoid multiple invocations.
2297 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2298 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
2299 really should return something or if we fake to return nil...
2301 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2303 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
2304 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
2305 default is set to "bypass".
2307 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2308 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
2309 when authMethod is set to "bypass" from now on. This would avoid a
2310 security concern with a default installation of SOGo.
2311 AuthentificationMethod is now prefixed with "SOGo" for better
2314 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2316 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2317 -quotasAction]): new method that returns a json representation of
2320 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2322 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2323 -imap4URL]): rewrote method to support accented mailbox names.
2324 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
2325 SOGoAuthenticator's passwordInContext:.
2327 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2328 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
2329 start and due dates to nil if hasStartDate and hasDueDate are
2332 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2333 -passwordInContext:context]): made method public.
2335 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2336 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
2337 to false to avoid a null violation.
2339 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2341 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2342 -contentAsString]): returns the message encoded in ISO Latin 1
2345 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
2346 SOGoSuperUsername user defaults.
2347 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
2349 ([SOGoUser -rolesForObject:objectinContext:context]): if the
2350 current user is the superuser, grant him/her the "owner" role.
2352 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
2353 the folder only if the current user is the owner of the future
2356 * SoObjects/Appointments/SOGoCalendarComponent.m
2357 ([SOGoCalendarComponent -contentAsString]): we return the content
2358 based on the permissions returned by the security manager instead
2359 of by looking at the user roles.
2361 * SoObjects/Appointments/SOGoAppointmentFolder.m
2362 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
2363 folders of the user to whom this folder belongs instead of the
2364 active user. This way, a delegate user will be able to have the
2365 same view that the original user has if he connects from his user
2368 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
2369 user exists before creating the SOGoUserFolder instance. If not,
2372 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
2373 return the message source code in plain text.
2375 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2376 -contentAsString]): returns the message encoded in UTF8.
2378 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2380 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
2381 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
2382 leading tagname into account when serializing the element values.
2384 * Main/SOGoProductLoader.m: only load bundle directories ending
2385 with the "SOGo" extension.
2387 * Main/SOGo.m ([SOGo
2388 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
2389 result set if the query has caused no exception. Otherwise we get
2390 an "evaluation is in progress exception".
2392 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2394 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2395 -generateSQLForInsert]): initialize error to nil before the
2396 serialization. Otherwise the method can get confused if it ever is
2397 initialized to something else.
2399 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
2400 -folderIsMandatory]): returns NO unconditionnally.
2402 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2403 -appendPersonalSources]): add the "personal" folder to the list of
2404 user folders even if it doesn't exist, so that it is created when
2405 the user accesses it.
2407 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2408 -folderIsMandatory]): returns YES if nameInContainer is set to
2409 "personal", which is the default address book.
2411 * SoObjects/Appointments/SOGoAppointmentFolder.m
2412 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
2413 users must have one Calendar folder (one and only one).
2414 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
2415 escaping '\' so make the carriage return a real one. This way,
2416 PgSQL 8 won't complain about escaping the string.
2418 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
2419 method that create the folder if considered mandatory.
2420 ([SOGoFolder -folderIsMandatory]): new method that determines
2421 whether the folder should be created automatically or not. To be
2422 overriden by subclasses.
2424 * Main/SOGo.m ([SOGo -run]): override method and create the
2425 missing system tables if needed.
2427 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2429 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
2430 -mailDateFormatter]): returns the user's date formatter.
2432 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
2433 applies the user timezone to the date object before returning it.
2435 * UI/Common/UIxSortButton.m: removed useless class module.
2437 * UI/Common/UIxSortableTableHeader.m: removed useless class
2440 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2441 -contactInfos]): use the "asc" url parameter instead of "desc" to
2442 determine the ordering.
2443 ([-sortOrdering]): removed method.
2444 ([UIxContactsListView -init]): removed the "searchText" ivar.
2445 (general): the template no longer use the UIxSortableTableHeader
2448 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
2449 -defaultSortKey]): default sort following the messages arrival
2450 instead of their date.
2451 ([-isSortedDescending]): removed method.
2452 ([-imap4SortOrdering]): use the "asc" url parameter instead of
2453 "desc" to determine the ordering.
2454 (general): the template no longer use the UIxSortableTableHeader
2457 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2459 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
2461 ([-setQualifier:_msg], [-qualifier]): removed methods.
2462 ([UIxMailListView -defaultAction]): added code to handle the
2463 search criteria and value passed as url parameters. Also, we now
2464 handle the same search criterias as Thunderbird/Icedove.
2466 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2468 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
2469 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
2470 the string instead of the string itself.
2471 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
2473 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
2474 bool var "acceptAnyUser" that is set when the AuthenticationMethod
2475 user default is nil.
2476 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
2477 unconditionnally returns an instance whenever acceptAnyUser is set.
2479 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2481 * Main/sogod.m (main): prevent SOGo from running as root.
2483 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2485 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2486 -setCurrentPassword:newPassword]): new stub method.
2487 ([SOGoUser -dateFormatterInContext:context]): new method that
2488 returns an instance of SOGoDateFormatter configured based on the
2491 * UI/Common/UIxPageFrame.m ([UIxPageFrame
2492 -relativePreferencesPath]): new method.
2494 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
2495 removed useless method.
2497 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
2498 different configurable formats (long and short date + time).
2500 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
2502 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2503 -isInternetRequest]): removed method.
2505 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2506 -jsonRepresentation]): new method with an explicit name.
2508 * UI/PreferencesUI/product.plist: new bundle that provides a web
2509 ui for handling user defaults.
2511 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
2513 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
2515 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
2517 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2519 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
2521 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2523 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
2524 -compareEventsAscending:otherEvent]): no longer use compare: on
2525 the time objects since one of them could be an NSNull, which
2526 crashes when comparing with anything.
2528 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2529 -eventsListAction]): sort events from here.
2530 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
2532 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
2533 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
2535 * SoObjects/Appointments/SOGoAppointmentFolder.m
2536 ([SOGoAppointmentFolder
2537 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
2538 no longer sort elements from here.
2540 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2542 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2543 -aclsForUser:uid]): implemented method by forwarding the request
2544 to the container. This fixes a bug where users could no longer
2545 read emails from shared folders.
2547 * SoObjects/Appointments/SOGoCalendarComponent.m
2548 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
2549 here, but rather in its parent class.
2551 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
2552 -stringForSecondsSinceThe70s:seconds]): new utility method.
2554 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2555 -eventsListAction]): no longer reduce the end day of one day for
2556 all day events since everything has been fixed in
2557 OCSiCalFieldExtractor.
2559 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2560 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
2561 the end date of all day events of 1 so that they stay on their
2564 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2566 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
2568 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
2570 ([-fetchCoreTasksInfos]): removed method.
2572 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2573 -init]): initialize an instance of SOGoDateFormatter.
2574 ([UIxCalListingActions -eventsListAction]): the display start and
2575 end dates are added to the listing for each event.
2577 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
2579 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2580 -isAllDay]): returns YES if the "hm" url parameter is set to
2582 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
2583 is displayed one day earlier.
2585 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2587 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2588 -_setupContext]): take the range of dates specified by the popup
2591 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
2592 WODirectAction that returns WOResponse objects with the events or
2593 todos satisfying the parameters passed in the url.
2595 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2596 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
2597 "isAllDay" into account and compute the amount of days to pass to
2600 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
2602 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
2603 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
2604 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
2605 new method that returns a json-formatted array of the visible tasks
2606 for the current user.
2608 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2610 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
2611 object must be present in the list of UIDs we delete the object
2612 from. Otherwise Calendar objects having no organizer and no
2613 attendees will remain in their owner's Calendar.
2615 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2616 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
2617 first 3 elements of the path array if the url returned by
2618 baseURLInContext: returns a hostname.
2620 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2621 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
2622 nil, in which case a crash happens when calling hasPrefix:.
2623 ([SOGoMailFolder -_sharesACLs]): same as above.
2624 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
2625 otherUsersFolderName is nil, we return nil.
2626 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
2627 nil from [self otherUsersPathToFolder], we return nil too.
2629 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2631 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2632 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
2633 the result of [self baseURLInContext:] to avoid a double escaping
2634 in the resulting string.
2636 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
2637 the user has the "ObjectReader" role on the parent container, then
2638 he is granted the "ObjectViewer" role on this object. Same for
2639 "ObjectEraser", although this might change later.
2641 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2642 -toolbar]): determine the toolbar filename based on the
2643 permissions declared by the securitymanager. The role mechanism
2644 has been adjusted on a lowerlevel so we can simplify the code.
2646 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2647 -initWithName:newNameinContainer:newContainer]): read the content
2648 directly from here. That way we can determine whether the object
2650 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
2651 the ObjectCreator role is enabled, we also grant the ObjectEditor
2652 role to the current user.
2654 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
2655 changed the method paradigm to only return HTTP code 204. Not test
2656 is done whatsoever since the security manager does it for us.
2658 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
2659 removed method because the same exists in UIxFolderActions.m
2661 * UI/Contacts/UIxContactsUserRightsEditor.m
2662 ([UIxContactsUserRightsEditor
2663 -setUserCanReadObjects:userCanReadObjects]): new method.
2665 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
2666 "FolderEraser" and special permission "Access Object". Removed
2667 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
2668 can be used instead. Removed "FolderReader" since it is useless.
2670 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2671 -vCard]): directly use the "content" ivar since it is initialized
2672 during object creation.
2674 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2675 ([SOGoContactLDAPFolder -init]): no longer handle the
2676 nameInContainer no the container ivars. They were removed because
2677 this class is a descendant of SOGoObject which already has them.
2678 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
2679 returning "displayName".
2680 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
2683 * SoObjects/Appointments/SOGoCalendarComponent.m
2684 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
2685 ([SOGoCalendarComponent -findParticipant:user]): new name for
2686 method "participant:".
2687 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
2688 findparticipant but taking a uid string as parameter.
2689 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
2690 iCalendar automatically. Instead, this is done only when the user
2691 is a "date and time viewer".
2692 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
2693 (modifier and responder) into account by compiling them with the
2696 * SoObjects/Contacts/SOGoContactFolder.h: removed
2697 "nameInContainer" from the list of required methods.
2699 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
2700 -davContentType]): returns "text/calendar".
2702 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2703 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
2704 groupdav resource-type.
2706 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2707 -davContentType]): same as below.
2709 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2710 -initWithName:newNameinContainer:newContainer]): new overriden
2711 method setting the custom owner directly.
2713 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2714 -davContentType]): same as below.
2716 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2717 -davContentType]): same as below.
2719 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
2720 declare "httpd/unix-directory".
2722 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
2723 "UTC" as fallback timezone instead of "Canada/Eastern".
2724 ([-hasEmail:email]): make use of the new NSArray's
2725 containsCaseInsensitiveString: method.
2727 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2728 -davContentType]): declare "message/rfc822" as content type.
2730 * SoObjects/Appointments/SOGoAppointmentFolder.m
2731 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
2733 ([SOGoAppointmentFolder
2734 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
2735 ([-fetchContentObjectNames]): commented out method since it was
2736 usefull only for testing Funambol.
2738 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
2739 -containsCaseInsensitiveString:match]): an enhanced version of
2742 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
2744 ([-showMarkDeletedButton]): removed useless method.
2745 ([-showTrashButton]): removed useless method.
2747 * SoObjects/Appointments/iCalEntityObject+SOGo.m
2748 ([iCalEntityObject -userIsParticipant:user]): new proxy method
2749 that invoked isParticipant on self for each possible email
2750 addresses of the user passed as parameter.
2751 ([iCalEntityObject -userIsOrganizer:user]): same as above.
2753 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
2756 * SoObjects/Appointments/SOGoAppointmentObject.m
2757 ([SOGoAppointmentObject
2758 -saveContentString:contentStringbaseVersion:baseVersion]): remove
2759 method since an event may not have an organizer.
2761 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2762 -GETAction:localContext]): clarified method. Added support for
2763 content-type (thanks to Helge Hess).
2764 ([SOGoObject -initWithName:_nameinContainer:_container]):
2765 initialize and retain the owner.
2766 ([SOGoObject -davContentType]): returns "text/plain".
2768 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2770 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2771 -addUserInAclsAction]): send an acl addition mail.
2772 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
2775 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2776 -_realActionWithFolderName:folderDict]): handle the possible
2777 presence of the "mail-invitation" url parameter. If present, the
2778 user will be redirected to the relevant folder.
2780 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
2781 ([SOGoUser -language]): new method that returns the user's
2782 preferred language, or the system's if none has been set yet.
2784 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
2785 that returns the full dav url to self.
2786 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
2787 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
2788 returns the full so url to the base of the SOGo module to which
2789 self belongs, and for the specified user.
2790 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
2791 but for the current user.
2792 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
2793 required by the acl advisory templates and which returns a link
2794 the target user can click to activate its new subscription.
2795 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
2796 but for inclusion of the application/x-sogo-notification part,
2797 which will be handled by the Lightning enhancer plugin.
2799 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
2800 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
2801 do nothing yet since imap folder subscription is not handled yet.
2803 * SoObjects/SOGo/SOGoContentObject.m
2804 ([-hasSupportForDefaultRoles]): removed method.
2806 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2807 -getFullEmailForUID:uid]): new method that returns the username +
2810 * SoObjects/Appointments/SOGoCalendarComponent.m
2811 ([SOGoCalendarComponent +initialize]): the default language for
2812 mail templates is now set to English.
2814 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
2815 SOGoACLAdvisory implementing the french template for user removal
2818 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
2819 SOGoACLAdvisory implementing the french template for user
2822 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
2823 SOGoACLAdvisory implementing the english template for user removal
2826 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
2827 SOGoACLAdvisory implementing the english template for user
2830 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
2831 supercall of all the acl advistory templates. The model is based
2832 on SOGoAptMailNotification except that the template encapsulates
2833 the message to be sent. Later, we might create a superclass common
2834 to all template-based emails.
2836 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2837 -addRange:newRange]): new method that store a string
2838 representation of the NSRange passed as parameter.
2839 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
2840 any range contained in self intersect with the one passed as parameter.
2842 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
2843 store ranges in an array to prevent them from intersecting with
2844 each other during the passes.
2846 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2848 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2849 -primaryFetchMailboxInfo]): useless method. Removed.
2851 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2853 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2854 -toManyRelationshipKeys]): invoke [self subfolders].
2855 ([SOGoMailFolder -subfolders]): new method containing what used to
2856 be in toManyRelationshipKeys.
2857 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
2860 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2861 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
2862 named and at the beginning of which we put the predefined folders.
2864 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2865 -emptyTrashAction]): new method inspired by a similar one from
2866 UIxMailListView, to which we added the ability to remove
2869 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
2870 method. Replaced with a similar one in UIxMailFolderActions.
2872 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2873 -renameFolderAction]): implemented method.
2874 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
2875 specified folder. Instead, we put it in the trash folder.
2877 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
2878 method, replaced with a similar method in the new
2879 UIxMailFolderAction class module.
2880 ([-deleteFolderAction]): idem.
2882 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2883 -createFolderAction]): new method implementing subfolder creation.
2884 ([UIxMailFolderActions -renameFolderAction]): new method
2885 implementing subfolder renaming (basic implementation to be
2887 ([UIxMailFolderActions -deleteFolderAction]): new method
2888 implementing folder deletion.
2890 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
2891 web actions related to the handling of imap folder.
2893 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2895 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2896 -ownerInContext:localContext]): overriden method because we are an
2897 IMAP4 client and we need a bit more intelligence to deduce the
2898 owner of the current folder.
2899 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
2900 return an NSException so we need to be careful here to avoid a
2902 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
2903 NSException so we need to be careful here to avoid a crash.
2905 * SoObjects/Mailer/SOGoMailAccounts.m
2906 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
2907 there is no longer any concept of Intranet or Internet connection
2910 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2911 -sharedFolderName]): new method.
2912 ([SOGoMailAccount -otherUsersFolderName]): new method.
2914 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
2915 new javascript code and the new UIxMailAccountActions class.
2917 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
2918 javascript code and the new UIxMailAccountActions class.
2920 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
2921 new javascript code and the new UIxMailAccountActions class.
2923 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2924 -listMailboxesAction]): new method that returns a json-formatted
2925 tree of all the mailboxes available to the current user.
2927 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
2928 web actions related to the handling of mail accounts.
2930 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
2933 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
2934 -jsonRepresentation]): new interface method meant to be overriden
2935 by the primitive classes.
2937 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2939 * UI/MailerUI/UIxMailSplashView.m: removed.
2941 * SoObjects/Appointments/SOGoCalendarComponent.m
2942 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
2943 the uid to the list only when the user email is recognized by the
2946 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2948 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2949 -isDeletionAllowed]): completed method with the new imap acl api.
2951 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
2954 * SoObjects/SOGo/SOGoPermissions.m: added the new role
2955 "SOGoMailRole_MessageEraser".
2957 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
2958 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
2959 "defaultUserID" method into account.
2961 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
2962 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
2963 "defaultUserID" method into account.
2965 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
2966 methods to support the IMAP acls mentionned in the RFC 4314,
2967 removed the ones specific to Cyrus.
2969 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
2970 mandatory method for subclasses. Removed the SOGoDefaultUserID
2973 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
2974 overriden method to return @"<default>".
2976 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2977 -defaultUserID]): overriden method to return @"<default>".
2979 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2980 -aclsForUser:uid]): overriden method.
2981 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
2982 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
2983 ([SOGoMailFolder -defaultUserID]): overriden method.
2984 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
2986 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2988 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2989 -aclUsersForObjectAtPath:objectPathArray]): new method that being
2990 forwarded the calles to aclUsers for the GCS-based subclasses of
2993 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
2994 methods that would have been used to support IMAP acls. Replaced
2995 them with the new protocol for them that has been implemented in
2996 SOGo during the last few weeks.
2998 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2999 -hasSupportForDefaultRoles]): override method by returning "YES".
3001 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
3002 -addObjectUniquely:object]): new method with an explicit name.
3004 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
3005 "acl" to "aclUsers". Now designed to return only the uid of the
3006 users involved in an ACL.
3007 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
3008 "NO" by default. To indicate to the acl editor that we don't want
3009 to handle a default user.
3011 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
3012 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
3015 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
3016 provides a view to the IMAP acls.
3018 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
3020 * UI/WebServerResources/MailerUI.js: replaced all invocations of
3021 addEventListener to the use of prototype's Event object. Also,
3022 configured all menus programmatically following descriptions lists
3023 containing their callbacks, or nulls, submenus id or separators.
3025 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3027 * UI/Common/UIxObjectActions.m ([UIxObjectActions
3028 -addUserInAclsAction]): save the previous roles of the user
3029 (unlikely) or the default roles, or None instead of saving the
3030 roles that should appear the first time in the role editor when no
3031 default has been set...
3033 * SoObjects/SOGo/SOGoObject.m: defined a new constant
3034 "SOGoDefaultUserID".
3036 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3037 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
3038 ignore the "AuthorizedSubscriber" role and add the "None" role
3039 when no other role is found.
3041 * UI/Common/UIxAclEditor.m: added a button for the new default
3044 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
3045 -_initRights]): don't take the "None" role into account when
3046 initializing the list of current roles.
3048 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
3051 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3053 * SoObjects/SOGo/NSString+Utilities.m ([NSString
3054 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
3055 There is no need to subscract the start from the length if a space
3056 is not found since the range has not changed either. Finally, the
3057 first character before the url might also be a tab or a cr, so we
3058 match it against the "urlAfterEndingChars" custom NSCharacterSet.
3059 ([NSString -stringByDetectingURLs]): modified to handle email
3060 addresses and add a correct "mailto:" link.
3062 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3064 * SoObjects/Appointments/SOGoAppointmentFolder.m
3065 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
3066 method to return the events in the range of 2 weeks ago up to 4
3069 * UI/MailPartViewers/UIxMailPartTextViewer.m
3070 ([UIxMailPartTextViewer -flatContentAsString]): use the new
3071 "stringByDetectingURLs" method to offer clickable urls.
3073 * SoObjects/SOGo/NSString+Utilities.m ([NSString
3074 -stringByDetectingURLs]): this new method replaces passive URLS
3075 with active ones for HTML resolution of the text.
3077 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3079 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3080 -asQPSubjectString:encoding]): simplified method.
3081 The headers indicates "utf-8" again thank to our fix in
3084 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
3087 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3089 * UI/Common/UIxObjectActions.m ([UIxObjectActions
3090 -removeUserFromAclsAction]): implemented this method which was
3091 missing and is required to remove users from ACLs.
3093 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3094 -subscribeAction]): folderDict was not autoreleased, resulting in
3097 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3098 -primaryFetchProfile]): when building with libFoundation, don't
3099 use the "propertyList" method from NSString. Rather, we convert
3100 the string to an NSData instance and passit as parameter to
3101 NSDeserializer. This way, we obtain a mutable dictionary rather
3102 than an immutable one.
3104 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
3105 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
3106 constant string "contentTypeValue".
3107 contentTypeValue is now set back to iso-8859-1 since NGMime
3108 converts extracts the data in that encoding.
3110 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3112 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
3113 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
3114 "bindFields" value is present in the user defaults, use the
3115 specified fields to find the dn of the user to bind.
3116 ([LDAPSource -allEntryIDs])
3117 ([LDAPSource -fetchContactsMatching:match])
3118 ([LDAPSource -lookupContactEntry:entryID])
3119 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
3120 bind and unbind the connection on each request.
3122 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
3124 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3125 -contactSearchAction]): simplified method to use the facilities
3126 provided by the LDAPUserManager. No longer takes care of the
3127 "ldap-only" url parameter since all requests are handled by the
3130 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3131 -primaryFetchProfile]): check that the value returned is not null
3132 before interpreting it.
3134 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
3135 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
3136 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
3137 system email is already present, remove it before adding it.
3139 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
3140 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
3141 loginToCheck is not empty.
3142 ([LDAPSource -fetchContactsMatching:match]): check that match is
3144 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
3146 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
3149 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3151 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
3153 ([SOGoUser -systemEmail]): returns the email formed from the
3154 username and the default mail domain.
3155 ([SOGoUser -hasEmail:email]): test whether the user has the
3156 specified email, in a case-insensitive way.
3158 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3159 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
3160 check login information.
3162 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3163 ([SOGoContactLDAPFolder
3164 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
3165 no longer manage LDAP connections. The requests are forwarded to
3166 the relevant LDAPSource instead.
3168 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3169 -appendSystemSources]): pass LDAPSource objects to
3170 SOGoContactLDAPFolder instances.
3172 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
3173 address of the "from" field before sending the message. Otherwise,
3174 sending the mail won't work.
3176 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
3177 rewrote this method to request all the available email identities
3178 for the current user. Also, the from field also contains the full
3179 name of the user, not just his/her email address.
3181 * SoObjects/Appointments/SOGoCalendarComponent.m
3182 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
3183 from the previous module iCalEntityObject+Agenor.
3184 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
3185 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
3188 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
3189 replacing the SOGoContactLDAPEntry module. It was renamed as such
3190 because it now receives a dictionary instead of an NGLdapEntry.
3191 It thus can now handle data from any source of LDIF data, not
3192 only coming from LDAP.
3194 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
3195 implementing most of what used to be the AgenorUserManager class.
3196 The difference is that users are cached in the forme of
3197 dictionaries and many sources are used. Also, it can be used to
3198 search LDAP contacts.
3200 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
3201 the concept of "ldap source", to be used by all the classes
3202 needing access to LDAP-provided information: addressbooks and the
3203 user manager. Most the method thereing are transcriptions of
3204 methods previously found in SOGoContactLDAPFolder. It also contain
3205 utility methods for user matching and authentification.
3207 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
3208 module, rendered useless by code refactoring.
3210 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
3211 with the freshly written "LDAPUserManager".
3213 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3215 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
3216 SOGOContactLDIFEntry.
3218 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
3219 module, obsoleted by code in SOGo/LDAPSource.[hm].
3221 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3223 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
3224 new method with an explicit name.
3226 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3228 * SoObjects/Appointments/SOGoCalendarComponent.m
3229 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
3230 replacing "isOrganizer:orOwner:" by taking only one instance of
3231 SOGoUser as parameter.
3232 ([SOGoCalendarComponent -participant:user]): new method replacing
3233 the previous "isParticipant" boolean method by returning the first
3234 participant matching the user passed as parameter. This method is
3235 used so that both the regular email address and the "system email
3236 address" of the user are matched against the participants emails.
3238 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3239 -getSystemEMailForUID:uid]): new method that returns the email
3240 formed with the user's uid and the default mail domain.
3242 * SoObjects/Appointments/SOGoCalendarComponent.m
3243 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
3244 was previously commented out.
3246 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
3247 forwared to [AgenorUserManager getSystemEmailForUID:].
3249 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3250 -toolbar]): method replacing the one with the same name in the
3251 task and appointment editor classes. This method makes also use of
3252 the new method "isOrganizerOrOwner:" and "participant:" in
3253 SOGoCalendarComponent.
3255 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3256 -toolbar]): removed method, replaced with a method with the same
3257 name in UIxComponentEditor.
3259 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
3260 method, replaced with a method with the same name in
3263 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3264 -primaryFetchProfile]): the values returned from the database are
3265 converted to a put dictionary first, since the dictionary returned
3266 is actually an immutable one, which can cause a crash afterwards.
3268 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3270 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
3271 and "SOGoRole_ObjectEditor".
3273 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
3274 -prepareRightsForm]): this method is no longer mandatory.
3276 * UI/Contacts/UIxContactsUserRightsEditor.m
3277 ([UIxContactsUserRightsEditor
3278 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
3279 module to handle acls related to the address books. Partial
3282 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3283 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
3286 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
3287 specified roles from cache.
3288 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
3289 put resulting roles in cache.
3291 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
3292 initWithName:inContainer:. Instead, directly initialize the ivars
3293 as it is supposed to be to avoid an infinite loop whenever one of
3294 those two methods are overriden.
3296 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
3299 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3300 -aclsForUser:uid]): override method so that SOGo won't crash when
3301 loading the contact card.
3303 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3305 * SoObjects/Appointments/SOGoAppointmentFolder.m
3306 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
3307 "freebusy" special user should only require opaque elements.
3309 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3311 * SoObjects/Appointments/SOGoAppointmentFolder.m
3312 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
3313 our double declaration where the resulting XML would be screwed.
3314 There is only one collection per namespace.
3316 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
3317 rfc822DateString]): new method that returns a string conform to
3318 rfc 822 and suitable for email headers.
3320 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
3321 "rfc822DateString" category method on the date we put in the
3324 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3326 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
3327 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
3328 which should never be overriden.
3329 ([UIxUserRightsEditor -appendRight:newRight])
3330 ([UIxUserRightsEditor -removeRight:right])
3331 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
3332 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
3333 methods that can be used by the subclasses.
3334 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
3335 mandatorily be overriden to prepare the elements of the subclassed
3337 ([UIxUserRightsEditor -updateRights]): new method that should
3338 mandatorily be overriden to update the user rights from the
3339 elements of the subclassed form.
3341 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
3342 check if the uid is already listed before adding it to our array.
3343 This is because the acl table can contain more than one record per
3344 user/object relationship.
3346 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3347 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
3348 "roles" parameter is now an NSArray instead of a string. Therefore
3349 we loop throughout the array to populate the table. All the
3350 relevant records are removed prior to the addition of the new
3353 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
3354 -aclsForUser:uid]): new override that returns nil until we add
3355 support for IMAP acls.
3357 * SoObjects/Mailer/SOGoMailAccounts.m
3358 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
3360 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3361 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
3363 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3364 -aclsForUser:uid]): override this method which will always return
3367 * SoObjects/SOGo/SOGoPermissions.[hm]: added
3368 [Public,Private,Confidential]
3369 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
3370 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
3371 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
3373 * SoObjects/Appointments/SOGoAppointmentFolder.m
3374 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
3375 that defines default roles for new elements in the acl.
3377 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
3378 module and subclass of UIxUserRightsEditor specific to the
3379 handling of user rights on calendar folders.
3381 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3383 * SoObjects/Appointments/SOGoAppointmentFolder.m
3384 ([SOGoAppointmentFolder -groupDavResourceType]): return both
3385 "vevent-collection" and "vtodo-collection".
3387 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
3388 that implements the detailed editor of user rights per-object.
3390 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3392 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3393 -rolesForObject:objectinContext:context]): no longer query objects
3394 for "roleForUser:". Instead, all objects should implement
3397 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
3398 new method to comply with the new acl "protocol" in SOGoObject.
3399 Uses SOGoFolder's new facilities for ACLS.
3400 ([SOGoContentObject -aclsForUser:uid]): idem.
3401 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
3402 ([SOGoContentObject -removeAclsForUsers:users]): idem.
3404 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3405 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
3406 based folders. This method is derived from the code that was in
3407 UIxAclFolder before its removal.
3408 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
3411 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
3413 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
3414 ([SOGoFolder -setRoleForUsers:uidsto:role])
3415 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
3417 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
3418 that requires overriding by subclasses.
3419 ([SOGoObject -aclsForUser:uid]): idem.
3420 ([SOGoObject -defaultAclRoles]): idem.
3421 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
3422 ([SOGoObject -removeAclsForUsers:users]): idem.
3424 * UI/Common/UIxObjectActions.m: new module implementing the web
3425 actions common to SOGoObject and all its subclasses.
3426 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
3427 user with the clientObject defaults user rights to the object's
3430 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
3431 to the point where it will only list the users (and their name)
3432 associated with an object acl.
3434 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
3435 methods have been moved into SOGoObject and SOGoFolder during a
3438 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3439 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
3440 method made useless by the programmatic handling of iCalendar
3442 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
3443 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
3444 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
3446 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
3447 drop on all folder nodes, not just on leaves.
3449 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3450 ([SOGoContactLDAPFolder
3451 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
3453 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3455 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
3456 debugging facilities when the SOGoDebugObjectAllocation user
3459 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3461 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
3462 method that SOGo will need with non-gnustep Foundation
3464 ([NSString -stringByAppendingPathComponent:component]): new method
3465 that SOGo will need when building with libFoundation. Method
3466 removed later since it is available from
3467 Foundation/NSPathUtilities.h.
3469 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
3472 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
3473 every subclass to access [WOApplication context] without having to
3474 invoke it more than once.
3476 * SoObjects/Appointments/SOGoCalendarComponent.m
3477 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
3478 moved method from SOGoTaskObject and SOGoAppointmentObject up to
3481 * UI/Scheduler/UIxCalSelectTab.m: removed module.
3483 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3485 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
3486 -vCard]): test the prefix of the card in a case-independent way.
3488 * OGoContentStore/OCSContactFieldExtractor.m
3489 ([OCSContactFieldExtractor
3490 -extractQuickFieldsFromContent:content]): we no longer accept
3491 records in a format other than versit vCard so we can get rid of a
3494 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3496 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3497 -selectorComponentClass]): restored method.
3499 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3501 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
3502 -shouldDisplayCurrentTask]): the current task is not displayed if
3503 it is NOT completed or if the "showCompletedTasks" flag is set.
3504 The logic was inverted in Lightning and is now in SOGo too.
3506 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3508 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
3509 want the "work" url instead of the "home".
3511 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3512 -_saveSnapshot]): save url values from snapshot.
3513 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
3515 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3516 -calendarList]): new method replacing "availableCalendars".
3518 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
3519 -calendarFolders]): we now take the list of subscribed calendar
3522 * SoObjects/Appointments/SOGoAppointmentFolder.m
3523 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
3524 method derived from and replacing [UIxCalView calendarFolders].
3526 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3528 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3529 -toManyRelationshipKeys]): don't put the predefined folders in the
3530 list if they are returned by the server.
3532 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
3533 longer store the "flattenedBlocks" in a dictionary since the
3534 object will be deleted anyway and we don't need to put the folders
3537 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3538 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
3539 attachment path into account when computing the part urls.
3541 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3543 * UI/Contacts/UIxContactsListViewContainer.m
3544 ([UIxContactsListViewContainer -additionalFolders]): take the list
3545 of subscribed folders from the new property list used for the user
3546 settings. The value of its key is SubscribedFolders for the
3547 dictionary entry named "Contacts".
3549 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3550 -canAccessContentAction]): new method to override the one from
3551 UIxFoldersActions by taking into account the fact that, this time,
3552 the clientObject is an ldap folder. Removed many method that used
3553 to be related to the handling of the user selector.
3555 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
3556 to make sure they can be removed.
3558 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
3559 populate the calendar entries based on the user settings plist.
3561 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3562 -selectForMailerAction]): restored method.
3564 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
3565 from a simplified version of the old UIxContactEditor (removed).
3567 * UI/Contacts/UIxContactsUserFolders.m: new template module for
3568 selecting users or user folders through an LDAP search of which
3569 the results are displayed as a tree.
3571 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
3572 method "onContactAdd" here since the Mailer is now the only module
3573 to use it when composing emails.
3575 * UI/WebServerResources/generic.js: added code for handling the
3576 new scheme used for describing SOGo folders, common code to handle
3577 folder addition or removal.
3579 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3580 -activateFolderAction]): new method that change the "active"
3581 settings in the folder-related fields in the user settings.
3582 ([UIxFolderActions -deactivateFolderAction]): see above.
3584 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3585 -checkRightsAction]): removed method.
3587 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3588 -updateAdditionalAddressBooksAction]): removed method.
3590 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3591 -updateCalendarsAction]): removed method.
3593 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3595 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3596 -checkRightsAction]): removed method.
3598 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3599 -canAccessContentAction]): new method designed to replace
3600 [UIxCalMainView checkRightsAction] in a more universal way.
3602 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3604 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3605 -roleOfUser:uidinContext:context]): take all the subkeys into
3606 account, not only the "personal" folder.
3608 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3609 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
3610 to the new components.
3612 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
3615 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3616 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
3617 field of the sogo_user_profile table, where the user-customizable
3618 changes will be saved.
3619 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
3620 similar to the one above, using the "settings" field where the
3621 automatic settings will be saved.
3623 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
3624 module to bind the userdefaults to a property list contained in a
3625 specified field of the sogo_user_profile table.
3626 ([AgenorUserDefaults
3627 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
3628 added a "fieldName" parameter.
3630 * UI/Common/UIxFolderActions.m: new module implementing web
3631 actions common to all GCS-based folders.
3633 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3635 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
3636 put a carriage return after the day name.
3638 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3639 -readFreeBusyAction]): restored method.
3641 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3643 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3644 -defaultAction]): remade module to redirect automatically to the
3647 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
3649 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3651 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3652 -deleteAction]): new web method to delete personal addressbook
3655 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3656 -delete]): override method to refuse the deletion of the folder if
3657 its nameInContainer is "personal".
3659 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
3660 that forwards the deletion request to the folder manager.
3662 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3664 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
3665 -zoomList]): new method that returns the list of available zoom factors.
3667 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3668 -changeStatusAction]): rewrote method.
3670 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3671 -_handleAttendeesEdition]): make sure "attendeesNames" has a
3672 length > 0 before computing the attendees. Otherwise there will be
3673 an invalid empty entry.
3674 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
3675 organizer when there are attendees and remove it when the
3676 attendees are removed.
3678 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3680 * UI/Scheduler/UIxAttendeesEditor.m): new component.
3682 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
3683 the task and appointment editors. Now a container component
3684 handling the common elements of tasks and events.
3686 * UI/Scheduler/UIxTaskEditor.m: same as below.
3688 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
3689 a subclass of UIxComponentEditor but a subcomponent of it.
3691 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
3692 toolbar can have the special value "none" to indicate there is
3693 none attached to the window.
3695 * SoObjects/Appointments/SOGoCalendarComponent.m
3696 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
3698 ([SOGoCalendarComponent -isParticipant:email]): new method.
3699 ([SOGoCalendarComponent -calendar:create]): takes one parameter
3700 "create" which is a boolean indicating whether we want to create
3701 the calendar if it does not exist.
3703 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3705 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
3706 of a table, the same way the dayly and weekly views have been for
3709 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
3711 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
3714 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
3715 property to point at the user folder
3717 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3719 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3720 -userInContext:]): returns "SOGoUser".
3722 * SoObjects/Appointments/SOGoCalendarComponent.m
3723 ([SOGoCalendarComponent -contentAsString]): overriden method that
3724 takes the privacy into account and discard the relevant fields if
3725 needed by generating a new content string and caching it.
3726 ([SOGoCalendarComponent
3727 -saveContentString:contentStringbaseVersion:baseVersion]): if the
3728 new method above has cached a content string, release it and set
3729 it to nil so that it will have to be regenerated in the case it is
3731 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
3732 discard the fields that have to be hidden when the card is
3735 * SoObjects/Appointments/SOGoAppointmentFolder.m
3736 ([SOGoAppointmentFolder
3737 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
3738 sure the cards are now handled as instances of
3739 SOGoCalendarComponent instead of SOGoContentObject so that their
3740 content string is taking the privacy classifiction into account.
3741 ([SOGoAppointmentFolder -_privacySqlString]): new method that
3742 generates a query to determine what information can be given and
3743 if the card itself has to be shown.
3745 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3746 -getICalPersonsFromValue:selectorValue]): removed useless
3747 "isAccessRestricted" method.
3749 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3750 -setStyle:_style]): test whether the values of orgmail and
3751 partmails are null before manipulating them, otherwise SOGo sends
3752 a "rangeOfString:" message to an NSNull, which makes it crashes.
3754 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3755 -extractQuickFieldsFromEvent:_event]): we now use the new
3756 "symbolicAccessClass" method from iCalEntity to determine the
3757 value of the "classifiction" field.
3758 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
3761 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3763 * SoObjects/Appointments/SOGoAppointmentFolder.m
3764 ([SOGoAppointmentFolder
3765 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
3766 see below, the query is adapted consequently.
3768 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3769 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
3770 renamed to "classification" and can any integer as value.
3771 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
3774 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3776 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3777 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
3778 don't prepend anything to the class and id named. Instead, we
3779 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
3782 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3784 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
3785 -rolesOfUser:logininContext:context]): if object does not exists
3786 (for example when it's being created), the current user has the
3787 same rights on it than he/she has on its parent container.
3789 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3790 -nameExistsInFolder:objectName]): methods that tests if a c_name
3791 corresponding to the name passed as parameter is present in the db
3794 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3796 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3797 -rolesForObject:objectinContext:context]): test for
3798 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
3800 * SoObjects/Appointments/SOGoCalendarComponent.m
3801 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
3802 returns the roles of the user on the container object if the event
3805 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3807 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
3808 alternativeViewer a multipart/related message is being handled.
3810 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
3813 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
3814 text/html component before text/plain.
3816 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3817 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
3818 fetching of HTML parts.
3820 * SoObjects/Appointments/SOGoCalendarComponent.m
3821 ([SOGoCalendarComponent -componentTag]): new template method that
3822 returns the vcalendar tag of the current object.
3823 ([SOGoCalendarComponent -component]): new method that returns the
3824 first object matching [self componentTag] within the current
3825 calendar object. This method replaces 'firstEventInCalendar:' as
3826 well as "firstTaskInCalendar:".
3827 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
3828 moved method from SOGoAppointmentObject.m.
3830 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3832 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
3833 module which shows each selected user's calendar in a different
3834 column instead of mixing their events together.
3836 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
3837 replaced use of [NSString stringByTrimmingWhiteSpaces] with
3838 [NSString stringByTrimmingSpaces].
3840 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
3841 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
3844 * UI/Scheduler/UIxCalDayOverview.m,
3845 UI/Scheduler/UIxCalDayChartview.m,
3846 UI/Scheduler/UIxCalDayListview.m,
3847 UI/Scheduler/UIxCalWeekOverview.m,
3848 UI/Scheduler/UIxCalWeekChartview.m,
3849 UI/Scheduler/UIxCalWeekListview.m,
3850 UI/Scheduler/UIxCalInlineMonthOverview.m,
3851 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
3853 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3855 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3856 -appendPersonalSourcesInContext:context]): release connectoin
3857 channel when everything is done.
3859 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3860 -newAbAction]): new action method to crate a new contact folder
3863 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
3864 that requests the folder manager to create a folder table with the
3865 specified type at the specified path. The type is taken from [self
3868 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3869 -folderType]): implemented.
3871 * SoObjects/Appointments/SOGoAppointmentFolder.m
3872 ([SOGoAppointmentFolder -folderType]): implemented.
3874 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3875 -appendPersonalSourcesInContext:context]): we now fetch all
3876 folders with type "Contact" that belong to the current user.
3877 ([SOGoContactFolders -newFolderWithName:name]): new method to
3878 create a new contact folder.
3880 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
3881 resulting url with [NSString+Utilities hostlessURL] instead of
3882 using NSURL. This is because the url in question sometimes has a
3883 hostname and sometimes not. "hostlessURL" ensure the hostname is
3885 ([UIxComponent -applicationPath]): same as above.
3887 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
3889 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
3890 folders before doing the one on messages.
3892 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3894 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
3895 makeObjectsPerform:withObject:withObject: for GNUstep
3898 * OGoContentStore/GNUmakefile, Protocols/common.make,
3899 SoObjects/common.make, UI/common.make: install in
3900 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
3902 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
3904 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
3907 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3909 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
3910 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
3913 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3914 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
3915 password would be accepted anyway as long as its length was > 0.
3916 This can be the case ONLY when LDAP is disabled otherwise we have
3917 a serious security issue...
3919 * SoObjects/Appointments/SOGoAppointmentObject.m
3920 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
3921 user is not an organizer nor a participant, he is declared as
3922 "Owner" if he owns the calendar the entry where the entry is
3923 contained. Other cases should not be possible.
3925 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3927 * UI/Contacts/UIxContactEditor.m: display and handle the new
3930 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3931 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
3934 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3935 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
3938 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3940 * SoObjects/Appointments/SOGoCalendarComponent.m
3941 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
3942 returns the value of ud "SOGoAppointmentSendEMailNotifications"
3944 ([SOGoCalendarComponent
3945 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
3947 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3949 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3950 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
3951 so that the mailbox cache is refreshed everytime the user presses
3952 on "get mail". I doubt a mailbox cache really is useful in general
3955 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3957 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3958 -userInContext:]): if the lookup is on "freebusy.ifb" and the
3959 username is "anonymous" the user is automatically set to
3962 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3964 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3965 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
3966 user with password "freebusy".
3968 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
3969 -contentAsString]): the default timerange is now 14 days before
3970 currentday and 1 month after.
3972 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3974 * SoObjects/Appointments/SOGoAppointmentFolder.m
3975 ([SOGoAppointmentFolder
3976 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
3977 escape the record string in a way suitable with XML encoding.
3979 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3981 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
3982 calendar view would not be updated properly.
3984 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3986 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3987 -newStartDate]): fix the handling of the component start date
3988 depending on the "hm" and the "day" parameters.
3990 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3991 -roleOfUser:uidinContext:context]): set role of current user to
3992 "Assistant" if the object that is accessed is "freebusy.ifb".
3994 * SoObjects/Appointments/SOGoAppointmentFolder.m
3995 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
3996 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
3997 ([SOGoAppointmentFolder
3998 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
3999 lookupCalendarFolderForUID: method, which doesn't do security
4002 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4004 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
4005 accessor that returns the comma-separated list of users with role
4007 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
4008 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
4009 "checkedUsers". Instead, each user is either classified in the
4010 list of assistants or the list of delegates.
4012 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4014 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
4015 -composeAction]): method imported from removed container modules.
4016 ([UIxMailMainFrame -mailFolderName]): method imported from removed
4019 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
4020 for wrapping UIxMailView with the "popupview" action.
4022 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
4023 since its the component that displays the same splash screen than
4024 the one in Thunderbird/Icedove.
4026 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
4027 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
4028 UI/MailerUI/UIxMailListViewContainer.[hm],
4029 UI/MailerUI/UIxMailViewContainer.[hm]: removed
4031 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4033 * UI/WebServerResources/HTMLElement.js: replaced the functional
4034 selectNode() and deselectNode() functions with select() and
4035 deselect() methods of HTMLElement.
4037 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
4038 events are initialized from here now instead of in the HTML code.
4040 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4041 -checkRightsAction]): new method similar to the one with the same
4042 name in UIxCalMainView.m.
4044 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
4045 code to handle the publishing of freebusy information.
4047 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4049 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4050 -checkRightsAction]): new action method that returns a
4051 comma-separated list of boolean values matching the right of the
4052 current user to "view" (as a permission) each foreign calendar
4053 stored in his preferences.
4055 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
4056 new method that sets a customOwner, which can be returned with
4057 ownerInContext it set.
4059 * SoObjects/Appointments/SOGoAppointmentFolder.m
4060 ([SOGoAppointmentFolder
4061 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
4063 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4065 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
4066 below, but for the Contacts and Calendar collections.
4068 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
4069 new acl facilities method from sope-gdl/GCSFolder.m.
4071 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
4072 -roleOfUser:uidinContext:context]): new method that returns
4073 SOGoRole_Assistant when the user is an assistant or a delegate on
4074 the "personal" ab object. This is so that setting roles on the
4075 SOGoContactFolders object is not required.
4077 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4079 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
4081 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
4082 to the handling of the user selection for the acls.
4084 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
4085 values from SoPermissions with ones specific to SOGo.
4087 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
4088 handles the storage for the acls.
4090 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
4091 class for SOGoAppointmentObject and SOGoTaskObject.
4093 * UI/Common/UIxAclEditor.[hm]: new component that provides a
4094 general editor for folder acls.
4096 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
4098 ([NSString -davMethodToObjC]): method that returns the method name
4099 for a DAV property implementation.
4101 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
4103 ([NSArray -stringsWithFormat:format]): new method that returns
4104 formatted occurences of the strings stored in the array.
4106 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
4107 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
4108 subclass module of SoWebDAVValue that supports collections of
4109 properties of the same type.
4111 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4113 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
4114 -lookupFolder:ofClassNamed:inContext:]): added the ability to
4115 configure the name of the SOGoDraftFolders with the ud var
4116 "SOGoDraftsFolderName".
4118 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4120 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
4121 -userTimeZone:username]): new method that returns the timezone for
4122 the specified user depending on his preferences and the server
4125 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
4126 -stringForData:partInfo:]): take the encoding into account and
4127 translate the text to "normal" before processing the charset data.
4129 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4131 * UI/WebServerResources/generic.js: the progress indicator is on
4132 when loading the page so we turn it off, and we turn it back on
4133 whenever we switch to another module...
4135 * UI/WebServerResources/SchedulerUI.js: make sure the day view
4136 synchronization mechanism works everywhere.
4138 * UI/WebServerResources/generic.js: the log window is not only
4139 visible when UIxDebugEnabled is set.
4141 * UI/WebServerResources/SchedulerUI.js: the month overview's day
4142 cells are now initialized with the DOM event interface methods
4143 instead of with html attributes.
4145 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
4146 headers (should be made configurable at some point)...
4148 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
4149 "not null" constraint on startdate, enddate, isopaque,
4150 participants and partmails.
4152 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4154 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
4155 -hoursToDisplay]): prevent a crash by retaining the
4156 "hoursToDisplay" array after it's created.
4157 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
4158 clickable hours DIV.
4160 * UI/WebServerResources/SchedulerUI.js: made the event
4161 participation status modification asynchronous, which also fixes a
4162 bug where the window would sometimes close before the accept or
4163 decline action was completed. Also, adapted the event handling
4164 related to the days or weeks view with the new DIV-based layout.
4166 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
4168 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
4169 DIV-based presentation of the days and weeks.
4171 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
4173 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
4174 might return an exception so we have to handle it if we don't
4177 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4179 * UI/WebServerResources/SchedulerUI.js: updated the list
4180 initialization code to use the new event management scheme, adding
4181 what was missing to be able to delete events and tasks again.
4183 * UI/WebServerResources/MailerUI.js: added code to activate the
4184 "Get mails" button. Fixed a bug which prevented messages to be
4187 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
4188 navigation and focus handling of INPUTs.
4190 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4192 * UI/WebServerResources/MailerUI.js: added code to handle the
4193 possible drag and drop events to manager in the mail module.
4194 Moving messages, opening parent folders, ...
4196 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
4197 the drag and drop manager as well as the interface to HTMLElement
4198 to trigger drag and drop events.
4200 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
4201 action to move the current message to the mailbox named after the
4202 value of parameter "tofolder".
4204 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
4205 -moveToFolderNamed:folderNameinContext:]): new method base on
4208 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4210 * UI/WebServerResources/generic.js: added and activated many
4211 "load" handlers to configure generic widgets used across the
4212 modules. More events are now handled in a DOM-fashion way instead
4213 of by setting the relative attributes in the templates.
4215 * UI/Templates/UIxSortableTableHeader.wox: all the events are
4216 declared from the javascript DOM onload handlers.
4218 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
4221 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
4222 declared from the javascript DOM onload handlers.
4224 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
4225 we want everything to be separated from each other, as much as
4228 * UI/WebServerResources/SOGoDragHandles.js: new module containing
4229 the "SOGoDragHandlesInterface", implementing methods that can be
4230 attributed to DIV so that they can be used as drag handles.
4232 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
4233 -asQPSubjectString]): initialize the tmp strings with '0' to make
4234 sure they don't contain garbage.
4236 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4238 * UI/WebServerResources/MailerUI.js: register the messageList
4239 table as a dragging source and the leaf of the navigation tree as
4240 dnd destinations to the DNDManager.
4242 * UI/WebServerResources/generic.js: initialize tabs from the
4243 "unload" event listener that is added programmatically instead of
4244 from the template... Also, added the new DNDManager object.
4246 * UI/WebServerResources/HTMLTableElement.js: added code to
4247 simulate XUL drag n drop events. This code will possibly be moved
4248 to HTMLElement.js instead later...
4250 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4251 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
4254 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4255 -_qualifierForFilter:filter]): only search records which starts
4256 with the specified pattern.
4258 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4260 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
4261 -asQPSubjectString]): new method that returns the special QP
4262 string with its qp declaration for email subjects.
4263 ([SOGoDraftObject -bodyPartForText])
4264 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
4265 double-encode data in UTF-8.
4267 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4268 -newStartDate]): new method to determine the start date depending
4269 on the URL parameters, the current day and the current time.
4270 ([UIxComponentEditor -toolbar]): new method to determine the
4271 filename of the toolbar that should be drawn depending on the
4272 ownership and the list of attendees of the task/event wrt to the
4275 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4276 -setDayStartHour:aStartHour]): adjust the minutes to the next
4277 quarter of hour, if not already set to a quarter.
4279 * UI/WebServerResources/UIxAppointmentEditor.js,
4280 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
4283 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4285 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4286 -loadValuesFromComponent:component]): handles access class
4287 (privacy) and status.
4289 * UI/Contacts/UIxContactsListViewContainer.m
4290 ([UIxContactsListViewContainer -additionalFolders]): return nil if
4291 [self additionalAddressBooks] returns an empty string.
4293 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4295 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
4296 rangesOf7Days]): enhanced and debugged algorithm to feed the array
4297 with slices where the first day is still in the requested month.
4299 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
4302 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
4303 of events in the day boxes of the calendar's monthly view.
4305 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
4306 -davContentType]): declare "text/calendar".
4308 * SoObjects/Appointments/SOGoAppointmentObject.m
4309 ([SOGoAppointmentObject -davContentType]): declare
4312 * SoObjects/Appointments/SOGoAppointmentFolder.m
4313 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
4314 HTTP methods are handled by SOPE and requires nil to be returned,
4315 this method now invokes the new
4316 "requestNamedIsHandledLater:inContext:" method to check that.
4317 ([SOGoAppointmentFolder
4318 -requestNamedIsHandledLater:nameinContext:context]): new methods
4319 that returns "YES" only for the "OPTIONS" http method (for now...).
4320 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
4321 overloaded method to append the "access-control" and
4322 "calendar-access" DAV abilities to the initial declaration.
4324 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
4325 imitate the look of Sunbird/Lightning's monthly view.
4327 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
4328 UIxCalMonthViewOld.[hm].
4330 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4332 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
4333 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
4335 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
4336 returns an image name based on the participation status of the
4339 * UI/WebServerResources/SchedulerUI.js: same strip down as for
4342 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
4343 ([UIxContactsListViewContainer -additionalFolders])
4344 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
4345 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
4346 methods to handle the external addressbooks a user has subscribed
4347 too, by retriving them from his preferences.
4349 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4350 -updateAdditionalAddressBooksAction]): new method that updates the
4351 user settings with the list of addressbook he has subscribed to.
4353 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
4354 module for the address book selector.
4356 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
4357 a toolbar with two buttons ("add" and "remove") to manage the
4358 additional addressbooks a user might subscribe to.
4360 * UI/WebServerResources/ContactsUI.js: added code to handle
4361 "external addressbooks" from the Javascript point-of-view, by
4362 extending existing methods and adding code for the "add ab" and
4363 "remove ab" buttons.
4365 * UI/WebServerResources/generic.js: moved extensions methods to
4366 DOM elements to separate files for better clarity.
4368 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
4369 new method that returns "pageContent" as class, but also "popup"
4370 for the DIV where the page content lies, so that we can manipulate
4371 the content of popup's with CSS identifiers.
4373 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4375 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4376 -displayStyle]): new method that returns a string containing the
4377 css style relative to the current appointment cell. This code is
4378 currently inactive but might be reused later.
4380 * UI/WebServerResources/SchedulerUI.js: added code to handle the
4381 display of the selected day (the day pointed by the mouse, or the
4382 current day when changing the view).
4384 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
4385 -dayCellClasses]): new method that returns a string containing the
4386 css classes applicable to the current cell, depending on the
4387 position of the day in the week, the day of today and the
4390 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
4391 -currentContactAptBorder]): new method that returns the
4392 appropriate border color for the specified user.
4394 * SoObjects/Appointments/SOGoAppointmentObject.m
4395 ([SOGoAppointmentObject
4396 -saveContentString:contentStringbaseVersion:baseVersion]):
4397 overloaded method that parse new events and detects if they have
4398 an organizer or not. If they are new and have no organizer set
4399 (Sunbird/Lightning...), the owner of the event is set as
4402 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
4403 category that provides facility methods and interfaces to the
4406 * SoObjects/Contacts/product.plist: give full access to ANY
4407 authenticated user, not just the owner (to every objects...).
4409 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4411 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
4412 every replica widgets are declared as such to their master
4413 counterpart. Take the days into account when displaying the time
4414 range taken by the appointment.
4416 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
4417 -getICalPersonsFromValue:selectorValue]): method taken from
4418 UIxFreeBusyUserSelector, that is shared both by
4419 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
4421 * SoObjects/Appointments/SOGoAppointmentFolder.m
4422 ([SOGoAppointmentFolder
4423 -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.
4425 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
4426 derived and taken as a subset of UIxFreeBusyUserSelector that
4427 implements the table part of the FreeBusy view. Most of the
4428 methods of UIxFreeBusyUserSelector relative to that table were
4429 moved into UIxFreeBusyUserSelectorTable, which can also be used as
4430 a standalone view for AJAX operations.
4432 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4434 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4435 -vCard]): change reverted.
4437 * UI/Contacts/UIxContactEditor.m: check whether the client contact
4438 folder has selector "globallyUniqueObjectId" before calling that
4441 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4442 -vCard]): the "setVClass" NGVCard method really is "setClass"
4445 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4446 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
4447 request the "streetAddress" instead of the "streetaddress".
4448 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
4449 mails that *contain*, and not just *start with* the search
4452 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4453 -vCard]): mark address returned from LDAP as the work address.
4455 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
4456 span covered with the anchor, not only the textual information
4459 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
4460 argument (event or task) to newEvent in the appointmentListMenu.
4461 Make the appointmentsListView display the appointmentsListMenu.
4463 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
4464 12 to 50 before displaying "...".
4465 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
4466 if its length > 0, whether location itself is nil or not...
4467 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
4468 of which the length > 0.
4470 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4472 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
4473 french and ISO dates.
4475 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
4476 from UIxContactSelector to handle contact lists (current and
4477 additional contacts).
4479 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4480 -_freeBusyAsText]): added handling of an "additional"-named query
4481 parameter that describe the number of additional days after
4482 enddate that should be returned.
4484 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4485 -_responseForResults:results]): give priority to results with
4486 "c_uid" fields. If none returned, use the first contact received.
4488 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4489 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
4490 2 and "CANCELLED" to 0.
4492 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4494 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
4495 of start and end dates to short string dates.
4497 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4498 -readFreeBusyAction]): new method that returns an array of numbers
4499 corresponding to the state in the freebusy of each "quarter of an
4500 hour" between the "sday" and "eday" date parameters passed in the
4501 url. This permits to handle the display of the freebusy with Ajax
4503 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
4504 since the free busy displays 2 days ahead.
4506 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4507 -contactSearchAction]): new action that returns the uid and the
4508 username + email of the user whose name contain the value of the
4509 "search" url parameter.
4511 * SoObjects/Appointments/SOGoAppointmentFolder.m
4512 ([SOGoAppointmentFolder
4513 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
4514 useful for the computing of the status of the freebusy.
4516 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
4517 -init]): new component that incarnates a user selector for events
4518 inspired by the new one found in Thunderbird Lightning.
4520 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4522 * UI/WebServerResources/generic.js: added code to enable or
4523 disable anchor visually (following our internal algorithm).
4525 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
4526 added new "url" ivar with its classic accessors.
4527 ([UIxComponentEditor -urlButtonClasses]): new method that returns
4528 the class strings for the url button on the appointment/task
4529 editor (depending on the validity of the url).
4531 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
4532 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
4533 the template to match the Lightning's new task/appointment editor.
4535 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
4537 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
4539 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4541 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4542 ([SOGoContactLDAPFolder
4543 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
4545 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
4546 iCalEntityObject instances instead of just iCalEvent's.
4548 * SoObjects/Appointments/SOGoAppointmentFolder.m
4549 ([SOGoAppointmentFolder
4550 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
4552 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
4553 bad way of handling ownership that way.
4555 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4556 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
4557 on "cn", just like Mozilla.
4559 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4561 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
4562 "to" should be retained, otherwise it will be autoreleased and a
4565 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4566 -writeAction]): updated method to fetch the card before initing
4569 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4570 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
4573 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
4574 -iCalStringTemplate]): start and due date are now optional.
4576 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4577 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
4578 appropriate accessors to be settable through the templates.
4580 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
4581 new "isDisabled" ivar with appropriate accessors to be
4582 settable through the templates.
4584 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4585 -availableCalendars]): new method that list the calendars to which
4586 the user has subscribed.
4587 ([UIxComponentEditor -componentOwner]): returns the owner of the
4590 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4591 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
4592 quickentries to null whenever each or all of them are null, by
4593 providing an impossible timestamp from with NSNotFound as value.
4595 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4597 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
4598 that handles the creation of new fields with the new APIs and the
4599 new node structure on the page.
4601 * UI/Scheduler/UIxAppointmentEditor.m,
4602 UI/Scheduler/UIxTaskEditor.m:
4603 refactored to user UIxComponentEditor as parent class.
4605 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
4606 containing the methods common to the UIxTaskEditor and the
4607 UIxAppointmentEditor.
4609 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4611 * SoObjects/Appointments/SOGoAppointmentFolder.m
4612 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
4613 the handling of time-ranges.
4615 * UI/WebServerResources/ContactsUI.js: specify a notification type as
4616 parameters when onConfirmContactSelection in invoked.
4618 * UI/WebServerResources/generic.js: specify a notification type as
4619 parameters when onContactRemove in invoked.
4621 * UI/WebServerResources/SchedulerUI.js: when the user deselects
4622 all calendars, select his entry.
4624 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4626 * UI/WebServerResources/SchedulerUI.js: edit and delete events
4627 with their owner-relative urls. Generate a correct entry in the
4628 css color table when a user is added to the calendars list. Put
4629 the same color next to the user id.
4631 * UI/WebServerResources/generic.js: implemented some new helper
4634 * SoObjects/Appointments/SOGoAppointmentFolder.m
4635 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
4636 entries if their owner is not the current user.
4638 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4639 -displayClasses]): return the correct class for the current event
4640 representation depending on its owner.
4642 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
4643 and associate a color for each user login depending on its
4644 position in the list.
4646 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
4647 -currentRowCSSClass]): return the correct class for the current
4648 row depending on the owner of the event.
4650 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4651 -setColors:colors]): new method to associate a color table with
4652 each user in the list.
4654 * SoObjects/Appointments/SOGoAppointmentFolder.m
4655 ([SOGoAppointmentFolder
4656 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
4658 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
4659 NSObject to associate an instance with a user.
4661 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4663 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
4666 * UI/WebServerResources/ContactsUI.js: added handling of
4667 notification of changes to contact selectors.
4669 * UI/WebServerResources/generic.js: added handling of notification
4670 of changes to contact selectors.
4672 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4673 -updateCalendarsAction]): proxy method to update the user
4674 preference table with the new selected calendar uids.
4676 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
4677 -calendarsContactsAction]): new method.
4679 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
4680 ([UIxContactSelector -setHasCheckBoxes:aBool])
4681 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
4682 permit the drawing of checkboxes instead of card icons.
4684 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
4685 wrap a selector the the "Calendars" tab.
4687 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
4688 new user calendar selector.
4690 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4692 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
4693 may cover hour 0 to hour 23.
4695 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4696 -iCalStringFromQueryParameter:format:]): dates explicitly set to
4699 * UI/WebServerResources/SchedulerUI.js: manage both lists of
4700 objects wrt to the toolbar actions.
4702 * UI/WebServerResources/generic.js: added code to the "String"
4703 class to decode number-encoded char entities.
4705 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4706 -batchDeleteAction]): new method to delete selected entries in the
4709 * SoObjects/Appointments/SOGoAppointmentFolder.m
4710 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
4711 that delete identified entries in batch.
4713 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4714 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
4716 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
4717 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4718 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
4719 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4721 return a UIxJSClose component if everything went fine.
4723 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
4726 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
4727 UIxAppointmentEditor.m.
4729 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
4730 a very light page with javascript code to close a window, by
4731 calling a method on the opener if specified. This component is
4732 designed to work as a response to form postings.
4734 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4736 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
4737 SOGoAppointmentObject adapted for the handling of tasks.
4739 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
4740 extracted from SOGoAppointmentObject.
4742 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4743 -saveUrl]): returns the url needed to POST the new form to.
4744 redirect the user to <aptid>/editAsAppointment instead of /edit,
4745 so that SOGoAppointmentFolder can return the correct object type.
4747 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
4748 -compareAptsAscending:_other]): accept empty start or end dates.
4750 * SoObjects/Appointments/SOGoAppointmentFolder.m
4751 ([SOGoAppointmentFolder
4752 -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.
4753 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
4754 components of type "vtodo" as well as "vevent".
4755 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
4756 url specified ends with AsTask or AsAppointment, returns the
4757 an object of the appropriate class, otherwise deduce it from its
4758 content if the HTTP method is "PUT", otherwise read its type from
4761 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4762 -extractQuickFieldsFromTodo:_task]): extract quick fields from
4765 * UI/Scheduler/UIxCalView.m ([UIxCalView
4766 -fetchCoreAppointmentsInfos]): replacement methods for
4767 fetchCoreInfos but by retrieving object with component "vevent".
4768 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
4771 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
4772 UIxCalAptListView adapted for the handling of tasks.
4774 * UI/Scheduler/UIxTaskProposal.[hm],
4775 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
4776 clones of the UIxAppointment* classes for the handling of tasks.
4778 * UI/WebServerResources/UIxTaskEditor.js: clone of
4779 UIxAppointmentEditor adapted for the handling of tasks.
4781 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
4782 Scroll the daily view to the appropriate hour when an appointment
4783 is selected in the appointments list.
4785 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4787 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4788 -setDayStartHour:aStartHour]): specifies the user timezone on the
4791 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
4794 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
4795 ([NSCalendarDate -driftedDate]): methods made useless by a better
4796 comprehension of the NSTimeZone API...
4798 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4800 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
4801 new methods from the NSCalendarDate methods.
4803 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
4804 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
4806 +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).
4807 ([NSCalendarDate -adjustedDate]): this method returns another
4808 instance set to the correct hour after the original date was set
4809 from a non-GMT timezone. This date can be used for storage.
4810 ([NSCalendarDate -driftedDate]): this method does exactly the
4811 opposite of -adjutedDate, that is, it enables the method
4812 hourOfDay, minuteOfHour etc... to return the values according to
4813 the original date's timezone. This date CANNOT be used for storage.
4815 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
4816 -shortDateString]): new method that will return a "short date
4817 string" (yyyymmdd) from a calendar date object.
4819 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4820 -_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.
4822 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
4823 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
4825 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4827 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
4828 view of the day at the height of hour 8:00.
4830 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
4831 ([UIxCalView -dayEndHour]): returns 24.
4833 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
4834 ([UIxContactFoldersView -newAction]): invoke
4835 _selectActionForApplication: on self with the proper attribute too.
4837 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
4838 we now use the action mechanism in UIxContactsListView to keep the
4839 same view for the contact selectors and the regular contact view.
4841 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
4842 UIxContactsListViewContainerBase.[hm]
4844 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
4846 * UI/WebServerResources/generic.js: generalized emailstring
4847 handling functions. Generalized address book access functions.
4849 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4850 -isPopup]): return YES if the "popup" query parameter is set.
4852 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4853 -defaultAction]): keep the url parameters when redirecting.
4854 ([UIxContactFoldersView -selectForSchedulerAction])
4855 ([UIxContactFoldersView -selectForMailerAction]): new action
4856 methods for the /scheduler-contacts and /mailer-contacts invocations.
4858 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
4859 newly available NSString+URL category.
4861 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
4862 -asURLParameters]): handle dictionary entries which could be
4863 instances of NSArray rather than NSString.
4865 * SoObjects/SOGo/NSString+URL.m ([NSString
4866 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
4867 ([NSString -urlWithoutParameters]): new method that returns the
4868 url without its parameters.
4870 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
4872 * SoObjects/SOGo/NSDictionary+URL.[hm],
4873 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
4875 * UI/WebServerResources/UIxMailEditor.js: add support for
4876 additions of different types (to, cc, bcc) of recipients from the
4879 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
4882 * UI/Contacts/UIxContactsMailerSelection.m,
4883 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
4884 UI/Contacts/UIxContactsSelectionView.m to provide a different set
4885 of widgets depending on the application invoking the contact list.
4887 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4889 * UI/WebServerResources/ContactsUI.js: hide the current contact
4890 whenever the user changes of contact folder.
4892 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
4893 now provided by the template when loading the page.
4895 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4896 -iCalPersonWithUid:uid]): new method taken from removed module
4899 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4901 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
4902 -categoriesAsString]): same as below.
4904 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
4905 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
4907 * SoObjects/Appointments/SOGoAppointmentObject.m
4908 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
4909 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
4912 * SoObjects/Appointments/SOGoAppointmentFolder.m
4913 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
4914 hackish test to detect whether the request concernes VEVENT's or
4915 anything else. Return events only in the former case.
4916 ([SOGoAppointmentFolder
4917 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
4918 c_name quickfield so that the calendar list can identify the
4919 appointments with their complete "filename".
4921 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
4922 groupsOfClass:fromSource: to parse the given vcalendar.
4924 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
4926 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
4928 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
4931 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
4933 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4935 * SoObjects/Appointments/SOGoAppointmentFolder.m
4936 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
4937 sensitive to the CalDAV method names.
4938 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
4939 "calendar-query" CalDAV method name.
4941 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
4942 code coming originally from MailerUI.js.
4944 * UI/WebServerResources/UIxContactEditor.js: imitate the
4945 Thunderbird address book by completing the display name with the
4946 content of the first and last name fields, until the display name
4947 is modified manually.
4949 * UI/WebServerResources/generic.js: added a "trim" method to the
4952 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4953 -displayName]): new method that returns the display name from "cn"
4954 or from the "displayName" key if found.
4956 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4957 -initSnapshot]): check if "[card n]" returns anything to avoid a
4960 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
4961 that returns an unparsed doctype definition for the pages.
4963 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4964 -vCard]): set the card's fn to attribute "displayName" if found
4967 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4969 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4970 -vCard]): handle the "streetAddress" and "l" fields.
4972 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
4973 header fields by converting the tables to DIVs and SPANs.
4975 * UI/WebServerResources/generic.css: attempted unification of font
4976 families and size across all the elements. changed the
4977 logConsole's "position" from "fixed" to "absolute" to avoid
4980 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4982 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
4983 empty the contact view when the current contact is being deleted.
4985 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
4986 parse the email field and provide the address full name if found
4987 as the "contactFN" parameter.
4989 * UI/WebServerResources/generic.js (openMailTo): do not give a
4990 name to the opened window so that serveral ones can be opened at
4993 * UI/MailPartViewers/UIxMailPartTextViewer.m
4994 ([UIxMailPartTextViewer -flatContentAsString]): override method by
4995 replacing carriage returns with "<br />" in the result string from
4996 super's implementation.
4998 * UI/Contacts/UIxContactView.m ([UIxContactView
4999 -_urlOfType:aType]): don't manage non-mailto urls through
5000 javascript, let the user decide what's best for him.
5002 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
5003 -newAction]): transfer all the query parameters by using the
5004 "asURLParameters"'s result string from [self queryParameters].
5006 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
5007 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
5008 query parameters and put their values (if any) into the snapshot.
5010 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
5011 carriage-returns to "<br />".
5012 ([UIxContactView -workCompany]): explicitly initialize company to
5013 nil if org is nil or empty.
5015 * UI/WebServerResources/UIxContactEditor.js: updated validation
5016 code after we added and renamed some fields.
5018 * UI/WebServerResources/ContactsUI.js: added code to cache contact
5019 cards and to handle card updates.
5021 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5023 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
5024 test the length of the returned string since they will never be
5027 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
5028 return self if the process went successful, returns an exception
5029 otherwise (and only otherwise...).
5031 * OGoContentStore/OCSContactFieldExtractor.m
5032 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
5033 adapted method to the new VCard api. Since the cards are stored in
5034 vcard format, we no longer deal with a dictionary but with a
5037 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5039 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
5040 return a string with a "mailto" url.
5041 ([UIxContactView -_urlOfType:aType]): generic method to return a
5042 url string with a html anchor pointing to it.
5044 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
5045 since subclass "UIxContactEditor" did nothing. Implemented code to
5046 display and modify the values parsed from the vcards, displayed in
5047 a way similar to the Thunderbird addressbook.
5049 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
5050 -save]): new dummy method.
5052 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
5053 -save]): made method void.
5055 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5057 * UI/Contacts/UIxContactView.m: added many wrapper methods to
5058 display blocks of data à la Thunderbird Addressbook. If data is
5059 available, those wrappers (around the NGVCard methods) will
5060 enclose the results in a proper HTML output with the correct label
5061 (if present), otherwise it will return an empty string.
5062 ([UIxContactView -vcardAction]): new action to return the contact
5063 as text/vcard (for exporting).
5065 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
5066 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
5068 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
5069 -vCard]): create a new NGVCard instance when no data is available
5071 ([SOGoContactGCSEntry -save]): save the vCard using the new
5072 "versitString" API method/message.
5074 * UI/Contacts/UIxContactView.h: separated interface from
5077 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
5078 views and display them beneath the list.
5080 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5082 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
5083 the timezone even when it's the server timezone.
5085 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5086 -privateContacts:inContext:]): no long configure the calendar
5087 object with the user's timezone since it's now accessible
5088 application-wide throught the SOGoObject methods.
5090 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
5091 method. Removed the "backendTimeZone" method.
5093 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
5094 instead of SoComponent.
5096 * SoObjects/Appointments/SOGoAppointmentObject.m:
5097 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
5098 [self serverTimeZone] instead of "EST" (which was removed).
5100 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
5101 "timeZone" ivar and its accessors.
5103 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
5104 centralized method returing the timezone configured in the
5105 userdefaults db or "Canada/Eastern" if missing.
5106 ([SOGoObject -userTimeZone]): new centralized method returing the
5107 timezone of the current user or the server timezone if missing
5108 from the user configuration table.
5110 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5112 * UI/WebServerResources/SchedulerUI.js: implemented caching of
5115 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
5116 return a path based on the object's context instead of the first
5117 level in SOGo's object hierarchy...
5119 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5121 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
5124 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
5125 timezone ([self viewTimeZone]) to the WEMonthOverview component to
5126 avoid a confusion with the days.
5128 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
5131 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
5132 imitate Sunbird's synchronization between the 3 visible views.
5134 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
5135 sure the numbers in dateString are formatted so as to take 4 chars
5136 for the year and 2 for the day and the month, otherwise
5137 NSCalendarDate will return a nil date.
5138 ([UIxComponent -applicationPath]): return a path based on the
5139 object's context instead of the second level in SOGo's object
5142 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5144 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
5145 user's timezone abbreviation to the date string passed as parameter to
5146 NSCalendarDate to generate an accurate date instance. Do the same
5147 when no date is specified and today is chosen.
5149 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
5150 form's time values to integers before comparing them.
5152 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
5153 ([UIxCalAptListView -currentEndTime]): initialize the resulting
5154 dates timezone with [self viewTimeZone].
5156 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
5157 "viewTimeZone" ivar destined to hold an instance of the user's
5159 ([UIxComponent -viewTimeZone]): take the timezone from the user's
5162 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5164 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
5165 rearranged the layout.
5167 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
5168 manage showing and hiding appointment details.
5170 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5171 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
5172 timezone by taking the current user's timezone setting.
5174 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
5176 * SoObjects/Appointments/SOGoAppointmentObject.m
5177 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
5178 set default timezone to EST, although this code should be
5179 rewritten to handle a system and a user default value.
5181 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
5182 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
5183 take the values from the hour and minute INPUTs when data is
5184 POSTed since we no longer use the UIxTimeSelector component.
5185 ([UIxTimeDateControl -selectableHours])
5186 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
5187 template SELECTs to display reasonable and acceptable values
5188 instead of all the possibilities.
5190 * UI/WebServerResources/generic.js: adapted code for the new
5191 implementation of the UIxContactSelector component (added a
5192 "remove" button, removed the previous INPUT and replaced them with
5193 links of class "button").
5195 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
5196 UIxTimeDateControl.m.
5198 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
5199 ([UIxCalDayTable -currentAppointmentHour]): new methods that
5200 returns correctly formatted values used as attributes for JS code.
5202 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
5203 -initialContactsAsString]): renamed implementation of
5204 initialParticipants.
5205 ([UIxContactSelector -currentContactId])
5206 ([UIxContactSelector -currentContactName]): new methods used when
5207 listing the initial contacts in the widget. Currently, both return
5208 the person's cn but the latter should ultimately return a user
5211 * UI/Contacts/UIxContactSelector.h: separated interface from
5212 UIxContactSelector.m.
5214 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
5215 all javascript code is now put in Scheduler.js/generic.js.
5217 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
5218 moved into NSCalendarDate+Scheduler instead.
5220 * SoObjects/Appointments/SOGoAppointmentFolder.m
5221 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
5222 configure the timezone from SOGoUserFolder when the instance is
5224 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
5225 the value of the new "timezone" ivar.
5227 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5229 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
5230 the date selector in the first page and the container of the
5231 future calendar selector in the second page.
5233 * UI/WebServerResources/generic.js: added code for handling tabbed
5236 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
5237 returns the bundle name associated to the current running product.
5239 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5241 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
5242 exception by invoking a timeout on the opener rather than invoking
5243 the list refresh method.
5245 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
5248 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
5249 ([UIxCalWeekView -prevWeekQueryParameters])
5250 ([UIxCalWeekView -nextWeekQueryParameters])
5251 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
5252 that return the dates relatively to the current day.
5253 ([UIxCalWeekView -lastWeekName])
5254 ([UIxCalWeekView -currentWeekName])
5255 ([UIxCalWeekView -nextWeekName])
5256 ([UIxCalWeekView -weekAfterNextWeekName])
5257 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
5258 methods that returns the label for the corresponding weeks.
5260 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
5261 used by UIxCalDayView and UIxCalWeekView to display the events
5262 occuring in one or more days.
5264 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5266 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
5267 entries in the new "monthMenu" and "yearMenu".
5269 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
5270 method to return the current day as a string formatted depending
5271 on the current locale.
5273 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
5274 ([UIxCalAptListView -endDate]): "today" is now the default filter
5275 for displayed events.
5276 ([UIxCalAptListView -currentSerialDay]): new method returning the
5277 date of the current enumerated appointment in serial form
5280 * UI/WebServerResources/SchedulerUI.js: added code to select the
5281 relevant day when an appointment is selected. Added code to popup
5282 a month and a year menu whenever the header entries are clicked in
5283 the calendar widget.
5285 * UI/WebServerResources/generic.js: made addClassName and
5286 removeClassName methods of HTMLElement.
5288 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5290 * UI/WebServerResources/MailerUI.js: fixed the contact creation
5291 from email addresses.
5293 * UI/WebServerResources/generic.js: centralized the search-related
5294 functions here since the same code was used across the 3
5297 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
5298 ([UIxCalAptListView -endDate]): return the required dates needed
5299 depending on the value given to the "filterpopup" url parameter.
5301 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
5302 code by invoking UIxComponent's labelForKey:.
5304 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
5305 [self pageResourceManager] instead of [self resourceManager].
5307 * UI/Contacts/UIxContactEditorBase.m: invokes
5308 globallyUniqueObjectId on the clientobject's class instead of the
5309 hardcoded "SOGoFolder".
5311 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
5312 -newAction]): redirect the "new" action to the personal (default)
5315 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
5316 +objectWithName:inContainer:]): new constructor.
5318 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
5319 -lookupContactWithId:recordId]): always create a contact object,
5320 even if it does not exist.
5322 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5324 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
5325 component that lays out the different components of SOGoCalendar.
5326 Only serves as an Objective-C counterpart to its xml template.
5328 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
5331 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
5332 display a widget to handle the information displayed in the
5333 appointments list. Not currently used, lacks implementation.
5335 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
5336 display a calendar as a dynamic widget from where one can select
5337 the current visible day.
5339 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
5340 extracted from UIxCalInlineMonthOverview.m.
5342 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
5343 calendarPageURL methods. The javascript code is handled by .js
5344 files as much as possible...
5346 * UI/WebServerResources/ContactsUI.js,
5347 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
5350 * UI/WebServerResources/SchedulerUI.js: implemented functions to
5351 handle the new widgets. XmlHTTPRequest code taken from
5354 * UI/WebServerResources/generic.js: put some functions related to
5355 element selections as methods to HTMLElement and HTMLTableElement.
5357 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
5358 display the list of appointments (embodies the code-size of
5359 UIxCalAptListView; answers to the "aptlist" method).
5361 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5363 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
5364 -correctURLAction]): new short action method replacing the method
5365 below by taking far less code.
5367 * SoObjects/Appointments/SOGoAppointmentFolder.m
5368 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
5369 with an action in the view-related code.
5371 * UI/Scheduler/UIxAppointmentEditor.m: invoke
5372 "stringByEscapingHTMLString" on the resulting value to avoid
5373 issues with accented characters.
5374 ([-jsCode]): removed method since the javascript code was merged
5375 into SchedulerUI.js.
5377 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5379 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
5380 new class method that returns an iCalPerson based on the UID given
5383 * UI/Contacts/UIxContactsListViewContainerBase.m:
5384 UIxContactsListViewContainer renamed to serve as a base class for
5385 the contact lists in both the contact editor and the contact
5388 * SoObjects/Contacts/SOGoContactLDAPFolder.m
5389 ([SOGoContactLDAPFolder
5390 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
5391 setUserIdentifier:setRootDN:]): an LDAP field specifying the
5392 loginname of the users can now be specified.
5394 * UI/WebServerResources/generic.js: added code to manage contact
5395 lists through the new implementation of the UIxContactSelector.
5397 * UI/Templates: put the templates related to SchedulerUI in its
5400 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
5401 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
5402 entry for "uid" with the field name representing the login name of
5403 the user in the corresponding LDAP branch.
5405 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5407 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
5408 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
5409 request is a PUT, always create an entry, even if we're not sure
5412 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5414 * UI/WebServerResources/ContactsUI.js: implemented live-search.
5416 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
5417 -appendSystemSourcesInContext:context]): populated method with
5418 code that creates entries mapped to instances SOGoContactFolder,
5419 based on the configuration found in the NSUserDefaults under the
5420 key "SOGoLDAPAddressBooks".
5421 ([SOGoContactFolders
5422 -lookupName:nameinContext:contextacquire:acquire]):
5423 "contactsources" do not exist anymore, SOGoContactFolder was split
5424 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
5425 and one protocol: SOGOContactFolder, instead.
5426 ([SOGoContactFolders -contactFolders]): new accessor used by the
5427 views of SOGoContactXXXFolder to list the possible sources.
5429 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
5430 defines the methods that UIxContactsView, ..Editor and so on...
5433 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
5434 defines the methods that UIxContactsListViewBase expects as well
5435 as the data fields returned in the contact lists.
5437 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
5438 returns entries an LDAP server. Conforms to the new
5439 SOGOContactFolder protocol.
5441 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
5442 returns a vCard based on contact entries from an LDAP server.
5443 Conforms to the new SOGOContactObject protocol.
5445 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
5446 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
5447 entry for the textual representation of the vCard.
5449 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
5452 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
5453 "SOGoContactObject".
5455 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
5456 method that generates a textual representation of the vcard.
5458 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
5460 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
5461 "SOGoContactFolder".
5463 * SoObjects/Contacts/SOGoContactSource.h,
5464 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
5467 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
5468 -singleAttributeWithName:key]): new method that returns the first
5469 object associated with an ldap key (where generally one value is
5472 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
5473 map the entry into an NSDictionary for processing by
5474 UIxContactsListViewBase.m with the least possible overhead.
5476 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
5479 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5481 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5482 -privateContacts:inContext:]): now returns an instance of
5485 * UI/Contacts/UIxContactsListViewContainer.m
5486 ([UIxContactsListViewContainer -contactFolderName]): new method to
5487 return the absolute path to the current contact folder, called
5488 from within the template.
5490 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
5491 JS code to initialize the 'currentContactFolder' generic var.
5493 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
5494 +contactFolderWithSource:inContainer:andName:]): new class
5495 method meant to return an instance connected to the specified
5496 source. Currently useless but won't be anymore in the next few
5499 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
5500 the "lookupFreeBusyObject" method since it does not exist.
5502 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
5503 as a "view" for the SOGoContactFolders object. Does nothing but
5504 redirect the browser to the URL of the personal address book of
5505 the user. It does not even have a template.
5507 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
5508 implementing the SOGoContactSource protocol. Does nothing
5509 currently but will be used to implement access to the personal
5510 address book of the user stored in the SOGo database.
5512 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
5513 protocol defining an API common to all possible types of contact
5516 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
5517 serving as the root of the contact folders available to the
5518 current user. Correctly lists the contact sources in webdav.
5520 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5522 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
5523 -composeAction]): new action method that permits external object
5524 to write a message from the default (primary) account.
5526 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5527 -initSnapshot]): new method with code taken from "defaultAction"
5528 but needed for others.
5529 ([UIxContactEditorBase -writeAction]): new action designed to
5530 compose the correct URL needed to obtain the MailerUI's email
5531 editor with the correct "mailto" parameter.
5533 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
5534 Common so that other modules can use it.
5536 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
5537 easier to manage both ajax and non-ajax requests.
5539 * UI/Contacts/UIxContactsFilterPanel.m: clone of
5540 UIxMailFilterPanel, but applicable to contact lists.
5542 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
5543 -vcardContentFromSOGoContactRecord]): use the new standard methods
5544 created for each type of entry. If a line is determined to not
5545 contain information, it will be skipped.
5547 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
5548 +initialize]): init defaultMailDomain with the user default
5549 "SOGoDefaultMailDomain".
5551 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5553 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5554 -saveAction]): reorganized methods to only have ONE return point.
5555 Invoke saveRecord: directly on the clientObject instead of
5556 saveContentString, which does the same thing anyway.
5558 * SoObjects/Contacts/NSDictionary+Contact.m
5559 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
5560 method to convert the dictionary returned with the user submission
5561 to a record in VCARD format to be stored in the database.
5563 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5565 * UI/WebServerResources/MailerUI.js: when opening the context menu
5566 of the message list, select the message below the mouse cursor and
5567 deselect the other selected messages temporarily. This mimics the
5568 behaviour of Thunderbird for that matter and was already
5569 implemented for the entries of the folder tree.
5571 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
5572 -iconForMenuItem]): new method that returns the fully qualified
5573 relative URL to the icon representing the mailbox, or the default
5574 mailbox icon if needed.
5576 * UI/SOGoUI/UIxComponent.m ([UIxComponent
5577 -urlForResourceFilename:filename]): automatically return an empty
5578 string whenever the filename passed as argument is nil.
5580 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
5581 "desc" parameter set to 1 so that they are sorted in descending
5582 order by default. Also, added "onHeaderClick()", triggered by
5583 clicking on the message list header elements.
5585 * UI/MailerUI/UIxMailSortableTableHeader.m
5586 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
5588 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5589 -isSortedDescending]): defaults to "YES" when the sort order is
5592 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5594 * UI/WebServerResources/MailerUI.js:
5595 - message cache: set the max num of cached messages to 20. Limit
5596 the cached message size to 30000 bytes.
5597 - ajax: when a message request is called while one is already
5598 being performed, the latter will be cancelled. Idem when
5599 retrieving the content of a mailbox.
5600 - folder tree: when a mailbox is selected because of the URL
5601 requested (initMailboxSelection), the dtree is expanded throughout
5602 the mailbox entry's parent hierarchy to ensure it is made visible
5603 when the page is being displayed. (new function: expandUpperTree).
5604 - mailbox loading: when loading a mailbox where a message was
5605 previously selected, we invoke its url with the "pageforuid"
5606 parameter correctly specified. During callback processing, we scan
5607 the table for the related row and reselect it.
5608 Also, the message area is set blank before loading any mailbox.
5610 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5611 -defaultAction]): if the "pageforuid" parameter is passed in the
5612 url, take its value and invoke [self firstMessageOfPageFor:]
5613 consequently to deduce the first message to display. Otherwise,
5614 set it to "idx", otherwise set it to 0.
5615 ([UIxMailListView -firstMessageOfPageFor:]): new method
5616 that determines the first message of the page where the message
5617 passed as parameter is contained.
5619 * UI/WebServerResources/UIxMailListView.js: removed this module,
5620 its code was put in MailerUI.js instead.
5622 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5624 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
5625 which returns the nodes for the parent specified in "parentMenu".
5626 Used to generate the javascript code for the folder dtree.
5628 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
5629 using that container-template are now using UIxMailMainFrame
5630 since UIxMailPanelFrame had no real interest. File removed.
5632 * UI/WebServerResources/dtree.{css,js}: new files to handle
5633 javascript-generated mailbox tree. Modified from original version
5634 by integrating the previous code with the one we are using for
5635 selections and mailbox handling. Minor visual enhancements too...
5637 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5639 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
5640 returned, put it in an NSArray before returning it (fixes
5643 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5645 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
5646 that returns a url string stripped from its "http://hostname"
5649 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
5651 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
5653 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5655 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
5656 -mailDateFormatter]): retrieve the timezone from the user settings
5657 and pass it to the returned dateFormatter. Also, the dateFormatter
5658 is kept in a static variable to avoid useless
5659 creations/destructions.
5661 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
5662 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
5664 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
5665 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
5666 s/Criteria/Text/ to handle the "criteria" form parameter.
5668 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5670 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
5671 to integrate better with the firefox look&feel. Added entries for
5672 the new "menu" DIV class (popup menus).
5674 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
5675 takes any chunk of text as param, detects the user email and the
5676 optional first and last names and return them in a well-formatted
5677 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
5678 namespace conflict. Added "onMenuClick(node, event, menuId)" to
5679 handle popup menus through "onclick" element attributes (node =
5680 this, event = event and menuId = name of the menu DIV id to
5683 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5684 -snapshot]): add an entry for "email" into the snapshot
5685 dictionary if a "contactEmail" URL parameter was detected and if
5686 the entry for "email" is empty.
5688 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
5689 button now invokes the newContact() js function in ContactsUI.js
5690 instead of opening "new" directly. newContact() pops up a window
5691 stripped from its navigation bar.
5693 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
5694 bundle (AddressBook).
5696 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
5697 "menu" and id "addressMenu" have the header email addresses
5698 display it with the new menu code in generic.js.
5700 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
5701 replaced the body tables with a div of class "pageContent"
5702 (standardization across the page templates).
5704 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
5705 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
5706 those are now inherited from UIxPageFrame.
5708 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
5710 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
5711 a "mailto" URL parameter is detected and the "to" array is empty,
5712 initialize "to" with the value of "mailto" before returning it.
5714 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
5715 -composeAction]): rewrote method in a cleaner way and with usage
5716 of the URL extensions to NSString and NSDictionary (see below).
5717 Also, if a "mailto" url parameter is detected, pass it to the
5720 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
5723 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
5724 returns a parameter string to add to a base URL.
5726 * UI/Common/NSString+URL.m ([NSString
5727 -composeURLWithAction:parameters:andHash:useHash]): new method to
5728 compose a complete URL from an object URL with parameters and an
5729 optional '#' character.
5731 * UI/Common/UIxPageFrame.h: separated interface from
5734 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
5736 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
5738 * UI/WebServerResources/generic.js: added code to manage
5739 selections within HTML containers.
5741 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
5742 added method to determine the possible URL for a product-specific
5743 javascript filename of the forme <productname>.js.
5744 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
5745 ([UIxPageFrame -isPopup]): new method to determine whether the
5746 application navigator bar should be displayed (main page) or not
5749 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
5750 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
5751 the user through LDAP.
5753 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5755 * The toolbar code from the MailerUI product was taken, renamed as
5756 "UIxToolBar" and put into UI/Common. Toolbar plists were created
5757 for the Contacts and Scheduler products and put in their respectir
5758 Toolbars/ subdirectories. Finally,
5759 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
5760 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
5761 and an invocation to the UIxToolbar component was put at the top
5762 of UI/Templaces/UIxPageFrame.wox.
5764 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
5765 within the templates whether a separator should be displayed.
5767 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
5768 that returns NO if the toolbar is empty.
5770 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5772 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
5774 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
5775 new toolbar objects.
5777 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
5779 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
5780 linkbanner as a DIV instead of a TABLE.
5782 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
5784 returns 'YES' to request the display of the navigation bar between
5787 2006-06-15 ludovic@inverse.ca
5789 * It's now possible to set the default
5790 domain using for email using the
5791 SOGoDefaultMailDomain preference key.
5793 2006-06-15 ludovic@inverse.ca
5795 * Initial import of SOGo from trunk.