1 2007-12-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3 * SoObjects/SOGo/NSString+Utilities.m ([NSString
4 -stringByDetectingURLs]): we now go back until the real start of
7 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
8 -fetchAttachmentIds]): new method that wanders through the mail
9 structure to collect the attachment content ids and to associate
12 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
13 ([_UIxHTMLMailContentHandler
14 -startElement:_localNamenamespace:_nsrawName:_rawNameattributes:_attributes]):
15 the content-ids are now enclosed between "<>" before retrieval
16 from the attachment dictionary.
17 ([UIxMailPartHTMLViewer -cssContent])
18 ([UIxMailPartHTMLViewer -flatContentAsString]): the content-ids
19 are now fetch from the clientobject (an instance of
20 SOGoMailObject) with the new "fetchAttachmentIds" method.
22 2007-12-12 Francis Lachapelle <flachapelle@inverse.ca>
24 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
25 -eventsListAction]): added the state of the calendar's owner with
26 respect to the current event.
28 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
29 -_loadAttendees]): added the retrieval of attendees state on
32 2007-12-12 Ludovic Marcotte <ludovic@inverse.ca>
34 * UI/MailPartViewers/UIxMailRenderingContext.{h,m}
35 Removed template caching which added very little
36 and created re-entrant issues.
38 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
39 Added a hack (and stated so in the source file)
40 to avoid what seems to be a bug in libxml.
42 2007-12-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
44 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
46 ([SOGoContentObject -davLastModified])
47 ([SOGoContentObject -davContentLength]): implemented dav methods.
49 2007-12-10 Francis Lachapelle <flachapelle@inverse.ca>
51 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
52 -GETAction:]): when asAttachment is set to true, the header
53 "content-disposition" is set to "attachment" so browsers like IE
54 and Safari properly asks the user to save the file.
56 2007-12-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
58 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
59 ([UIxMailPartHTMLViewer -flatContentAsString]): when in
60 UIxMailPartAlternative, scan the filenames of potential cid at the
61 same level as our parent.
63 2007-12-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
65 * Main/SOGo.m ([SOGo -run]): the table creation script now have a
66 @{tableName} substitution variable to be substitued with the real
67 table name obtained from the configuration variables.
69 2007-12-07 Ludovic Marcotte <ludovic@inverse.ca>
71 * UI/MailPartViewers/UIxMailRenderingContext.m
72 We treat multipart/appledouble like multipart/mixed
73 for now. That allows the user to save both parts.
75 * Corrected typos in Localizable.string files.
77 2007-12-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
79 * UI/Common/UIxAclEditor.m ([-currentUserIsOwner]): replaced
80 method with -canModifyAcls that invokes the security manager
81 instead for the permission "SaveAcls" on the client object.
83 * SoObjects/Appointments/SOGoCalendarComponent.m
84 ([SOGoCalendarComponent -contentAsString]): securize the returned content.
85 ([SOGoCalendarComponent -aclsForUser:uid]): check whether the user
86 is an organizer or a participant as well.
88 * SoObjects/Appointments/SOGoAppointmentObject.m
89 ([SOGoAppointmentObject -changeParticipationStatus:_status]): the
90 user we should change the status of is not the active user but the
91 owner of the object. This is for delegation.
93 * SoObjects/Appointments/SOGoAppointmentFolder.m
94 ([SOGoAppointmentFolder -fetchContentObjectNames]): fetch the
95 elements through the fetchFields:from:to:title:component: method
96 method, so that the result is already filtered depending on the
99 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
100 -toolbar]): if the current user is a delegate, take the permission
101 "ModifyComponent" into account. Also, do not let him/her modify an
102 event for which he/she is the organizer.
104 * SoObjects/Contacts/SOGoContactLDAPFolder.m
105 ([SOGoContactLDAPFolder -davResourceType]): declared as a carddav
106 addressbook collection.
108 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
109 -davResourceType]): declared as a carddav addressbook collection.
111 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davLastModified]):
112 override SoObject's implementation. Otherwise a localized date is returned.
114 * UI/Common/UIxPageFrame.m ([UIxPageFrame -isCalendar])
115 ([UIxPageFrame -isContacts], [UIxPageFrame -isMail]): getters to
116 determine which module is the current one.
118 2007-12-06 Francis Lachapelle <flachapelle@inverse.ca>
120 * UI/Scheduler/NSArray+Scheduler.m ([NSArray -compareEventsTitleAscending:otherEvent])
121 ([NSArray -compareEventsLocationAscending:otherEvent])
122 ([NSArray -compareEventsEndDateAscending:otherEvent])
123 ([NSArray -reversedArray]): new methods that sort an array of
124 events depending of various parameters.
126 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
127 -eventsListAction]): added support for sorting events.
129 2007-12-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
131 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction])
132 ([UIxMailEditor -sendAction]): make sure that the attachments
133 having the same filename are correctly sequenced (ex: base.ext,
134 base-1.ext, base-2.ext).
136 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
137 -fetchBLOB]): added support for quoted-printable decoding. Also,
138 we return nil if the type is not supported.
140 2007-12-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
142 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -newAction]):
143 create task obejcts with the .ics extension.
145 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
146 -newAction]): create appointment objects with the .ics extension.
148 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -newAction]):
149 create objects with the .vcf extension.
151 * Main/NSException+Stacktrace.m: added missing symbols from
152 NSException.m and NSDebug.m (GNUstep).
154 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
155 -foldersSearchAction]): make use of the new search methods in
156 SOGoUserFolder (see below).
158 * UI/Contacts/UIxContactFoldersView.m ([-foldersSearchAction]):
159 moved method into ../MainUI/SOGoUserHomePage.m.
161 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
162 -foldersOfType:folderTypeforUID:uid]): only return folders owned
163 by the specified user.
165 2007-12-05 Francis Lachapelle <flachapelle@inverse.ca>
167 * SoObjects/Mailer/SOGoDraftObject.m: the condition for replyToAll
168 has to be done later to avoid duplicated to and cc addresses.
170 2007-12-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
172 * SoObjects/Appointments/SOGoAppointmentFolder.m
173 ([SOGoAppointmentFolder -davCalendarQuery:queryContext]): fixed a leak.
175 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder -davSubscribe:localContext])
176 ([SOGoGCSFolder -davUnsubscribe:localContext]): subscribe an
177 unsubscribe from DAV-based accesses. We could be compatible with
178 Microsoft's extensions but we have no need for a "subcription id",
179 so we implement our own.
181 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
182 -POSTAction:localContext]): new method to intercept DAV POSTs,
183 which we now use to implement certain custom commands such as
184 "subscribe" and "unsubscribe".
186 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
187 -davNamespaces]): declare the
188 "urn:inverse:params:xml:ns:inverse-dav" xml ns.
189 ([SOGoUserFolder -foldersOfType:folderTypeforUID:uid]): new method
190 designed to replace the UIxContactFoldersView.m mechanism for
191 displaying folders to subcribe to, as a common code base for both
192 Web and DAV-based subscriptions.
193 ([SOGoUserFolder -foldersOfType:typematchingUID:uid]): same as
195 ([SOGoUserFolder -davCollectionQuery:queryContext]): new method
196 that implement a custom DAV-based protocol query for querying
197 folder based on specified attributes.
199 2007-12-03 Ludovic Marcotte <ludovic@inverse.ca>
201 * Main/NSException+Stacktrace.{h,m} - new files
202 to handle automatic stack trace generation
203 upon an uncaught exception.
205 * Updated the templates and Localizable.string files
206 to fix typos and add new strings.
208 * SoObjects/Mailer/SOGoMailBodyPart.m
209 Fixed attachment retreival when the first character
212 * SoObjects/SOGo/SOGoGCSFolder.m
213 Fixed the sending of emails when folders are created/removed.
214 Notifications are sent if the defaults SOGoFoldersSendEMailNotifications
217 * UI/Common/UIxUserRightsEditor.m
218 * UI/Templates/SOGoACLEnglishModificationAdvisory.wox
219 * UI/Templates/SOGoACLFrenchModificationAdvisory.wox
220 * UI/Templates/SOGoACLGermanModificationAdvisory.wox
221 Added the capabilities to email notifications when ACLs have
222 changed on a DAV collection or an IMAP mailbox. Also added
223 new templates (3 .wox) to deal with this.
225 * UI/WebServerResources/ContactsUI.js
226 UI/WebServerResources/SchedulerUI.js
227 Added warnings on operations w/o selection.
229 2007-11-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
231 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
232 -appendSubscribedSources]): don't include sources for which we
233 don't have the SOGoPerm_AccessObject permission.
235 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
236 -rfc822DateString]): we want positive timezones to be specified
237 with a leading "+" too.
239 2007-11-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
241 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
242 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
243 return nil if the subscribed folder has no display name (meaning
244 it no longer exists).
246 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
247 -appendPersonalSources]): don't include sources which are no
250 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
251 -ocsPathOfContainer]): return the intended value, not that of
254 * SoObjects/Appointments/SOGoCalendarComponent.m
255 ([SOGoCalendarComponent -sendResponseToOrganizer]): send the
256 message only of sendEMailNotifications is set.
258 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -subscriptionRoles]):
259 new method that returns the roles that qualifies for adding the
260 special "authorized subscribed" sogo role.
262 2007-11-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
264 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
265 -aclsForUser:uid]): copy all the roles from the container. If the
266 object is new, make sure the roles contain "ObjectEditor" if and
267 only if "ObjectCreator" is present.
269 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
270 -aclsForUser:uid]): no longer take the "ObjectReader" role into
273 * UI/Common/UIxFolderActions.m ([UIxFolderActions
274 -canAccessContentAction]): always return HTTP status 204. We want
275 this because we are relying on the SOPE access control manager to
276 grant access to this method. This requires a fine-tuned access
277 control in SOGo itself...
279 * UI/Contacts/UIxContactsUserRightsEditor.m ([-userCanReadObjects])
280 ([-setUserCanReadObjects:userCanReadObjects]): removed methods.
282 * UI/MailerUI/UIxMailUserRightsEditor.m ([UIxMailUserRightsEditor
283 -updateRights]): no longer take the "ObjectReader" role into account.
284 ([-userCanReadMails], [-setUserCanReadMails:userCanReadMails]):
287 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
288 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): specify context
289 when looking up the Calendar folder.
291 2007-11-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
293 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): same as below.
295 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
296 -event]): create the event if it doesn't exist.
298 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -userHasCalendarAccess])
299 ([UIxPreferences -userHasMailAccess]): same as below, for
300 displaying preference tabs.
302 * UI/Common/UIxPageFrame.m ([UIxPageFrame
303 -userHasCalendarAccess]): new accessor for the link banner.
304 ([UIxPageFrame -userHasMailAccess]): same as above.
306 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
307 -toManyRelationshipKeys]): do not report the path to modules to
308 which the user has no access. No longer cache this information
309 statically, the array will be generated at each call.
310 ([SOGoUserFolder -lookupName:_keyinContext:_ctxacquire:_flag]):
311 ignore the path to modules to which the user has no access.
313 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -canAccessModule:module]):
314 new method that returns whether the user has access to the
317 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
318 -initFromUDSource:udSource]): take a new parameter named
319 'ModulesContraints' that defines a set of constraints for
320 accessing specified named modules. This is an optout, meaning the
321 modules will be present unless a constraint is specified.
323 * SoObjects/Appointments/SOGoAppointmentFolder.m
324 ([SOGoAppointmentFolder
325 -roleForComponentsWithAccessClass:accessClassforUser:uid]): cache
326 acl to reduce method calls.
327 ([SOGoAppointmentFolder
328 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
329 if the user is not the current user, we strip the useless info
332 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
333 -labelForKey:key]): new category method.
335 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
336 -event]): same as below.
338 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): request a
339 secured version of the component.
341 * UI/MailPartViewers/UIxMailPartViewer.m
342 ([-fallbackStringEncoding]): removed method.
343 ([UIxMailPartViewer -flatContentAsString]): we no longer use [self
344 fallbackStringEncoding]. Instead we directly specify
345 NSISOLatin1StringEncoding if UTF-8 has failed.
347 * UI/MailPartViewers/UIxMailPartICalViewer.m
348 ([-fallbackStringEncoding]): removed method.
350 2007-11-25 Ludovic Marcotte <ludovic@inverse.ca>
352 * SoObjects/Mailer/SOGoMailForward.m
353 Use [sourceMail decodedSubject] instead of [sourceMail subject]
354 Signature fix in -signature - see the comment
357 * SoObjects/Mailer/SOGoMailObject.m
358 Improved -stringFromData: to try UTF-8 then fallback to Latin1
360 * SoObjects/Mailer/SOGoMailReply.m
361 Modified -messageBody to strip the signature from the reply.
362 Also modified -signature to add "-- \n%@" instead of the
363 broken ""--\r\n%@" pattern.
365 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m
366 We now favor text/calendar parts over text/html and
367 text/plain parts when viewing a multipart/alternative mail.
368 This allows us to show the email invitations coming from
371 * UI/MailerUI/UIxMailAccountActions.m
372 Signature fix in -composeAction - see the comment
375 * UI/MailPartViewers/UIxMailPartViewer.m
376 Modified -flatContentAsString to use UTF-8 as the
377 default fallback encoding for 8-bit content.
379 * SoObjects/Mailer/SOGoDraftObject.m
380 Modified _fillInReplyAddresses:replyToAll:envelope:
381 so that if there's no recipient, we add at least
383 Fixed a mem leak in the same method.
385 2007-11-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
387 * UI/MailPartViewers/UIxMailRenderingContext.m
388 ([UIxMailRenderingContext -viewerForBodyInfo:_info]): same as below.
390 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
391 -plainTextContentFetchKeys]): same as below.
393 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
394 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): accept the
395 application/ics type from Google Calendar.
397 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
398 +distantFuture]): rewrote method to return an object that is
399 compatible with NSCalendarDate, unlike the implementation in
401 ([NSCalendarDate +distantPast]): same as above.
403 2007-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
405 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: fixed infinite loop
406 when charset is us-ascii, match it to ascii rather than none.
408 * SoObjects/Appointments/SOGoAppointmentFolder.m
409 ([SOGoAppointmentFolder
410 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
411 added search on the c_title column too.
413 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
414 -eventsListAction]): take the "search" url parameter into account.
415 ([UIxCalListingActions -eventsListAction]): fetch events matching
416 the title filter too.
418 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -connectAction]): the
419 user infos are now posted as "application/x-www-form-urlencoded".
420 So we have to have like a form has been posted.
422 2007-11-21 Francis Lachapelle <flachapelle@inverse.ca>
424 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
425 -calendarList]): also returns the calendar of the current
426 event. This is required so the proper calender is selected when
427 you view an event to which you don't have write access.
429 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
430 also returns true for super users.
432 2007-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
434 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
435 -lookupImap4BodyPartKey:inContext:]): return a correct body part
436 when "0" is requested, taking its mime-type into account.
438 * UI/MailPartViewers/UIxMailRenderingContext.m
439 ([UIxMailRenderingContext -flatContentForPartPath:_partPath]):
440 return content for part "0", which would be the message body.
442 2007-11-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
444 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
445 ([_UIxHTMLMailContentHandler
446 -setContentEncoding:newContentEncoding]): new method that
447 specifies an xml charset to return to the parser.
448 ([UIxMailPartHTMLViewer -flatContentAsString]): specifies the
449 charset to the content handler before parsing.
451 * SoObjects/Appointments/SOGoAppointmentObject.m: don't take an
452 empty c_name as a valid response when looking up an event. Create
453 one in that case instead.
455 2007-11-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
457 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -signature]):
458 returns the signature for the default identity of the default
460 ([UIxPreferences -setSignature:newSignature]): accessor that sets
461 the default signature.
463 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
464 -composeAction]): append the message signature to the new draft.
466 * SoObjects/Mailer/SOGoMailReply.m ([SOGoMailReply -signature]):
469 * SoObjects/Mailer/SOGoMailForward.m ([SOGoMailForward
470 -signature]): new method that takes the user's signature and put
471 it at the end of the message, if exists.
473 * UI/Common/UIxPageFrame.m ([UIxPageFrame -isSuperUser]): new
474 accessor that forwards the call to the active user.
476 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -signature]): returns the
477 user default signature.
478 ([SOGoUser -isSuperUser]): declares whether the user is listed
479 among the super users.
481 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
482 -setComponent:newComponent]): retain the component object.
483 ([UIxComponentEditor -organizerIdentity]): new accessor method to
484 handle list of possible organizers.
486 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
487 -event]): retain the returned event object.
489 * SoObjects/Appointments/SOGoAppointmentObject.m
490 ([SOGoAppointmentObject -saveComponent:newEvent]): reset the
491 organizer only if there are no attendees AND the owner of the
492 component is not the organizer him-/herself.
494 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
495 -toolbar]): rewrote in a way that ensures that each case is
498 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -isEqual:otherUser]): new
501 * UI/Scheduler/UIxTaskEditor.m ([-acceptAction])
502 ([-declineAction]): commented out unused methods.
504 * UI/MailPartViewers/UIxMailPartICalActions.m
505 ([UIxMailPartICalActions -deleteFromCalendarAction]): actually
506 delete the found object.
508 2007-11-18 Ludovic Marcotte <ludovic@inverse.ca>
510 * SoObjects/Mailer/SOGoMailBodyPart.m
511 SoObjects/Mailer/SOGoMailObject.m
512 UI/MailPartViewers/UIxMailPartViewer.m
513 Added support of messages containing non-textual
514 content and no parts.
516 * UI/MailerUI/UIxMailView.m
517 SoObjects/Mailer/SOGoMailObject.m
518 UI/Templates/MailerUI/UIxMailView.wox
519 Added support for the Reply-To header upon
522 2007-11-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
524 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]):
525 invoke saveComponent:.
527 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -hasOrganizer])
528 ([UIxComponentEditor -organizerName]): new template accessor
529 related to displaying the event's organizer.
530 ([-containsConflict:_component]): removed method.
531 ([UIxComponentEditor -takeValuesFromRequest:_rqinContext:_ctx]):
532 set RSVP to "TRUE" on each attendee.
534 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
535 -saveAction]): invoke saveComponent:.
537 * UI/MailPartViewers/UIxMailPartICalViewer.m
538 ([UIxMailPartICalViewer -isLoggedInUserTheOrganizer]): make use of
539 the -userIsOrganizer: category method.
540 ([-isLoggedInUserAnAttendee]): make use of -userIsParticipant:.
541 ([UIxMailPartICalViewer -hasSenderStatusChanged]): new template
542 accessor that determines whether the "Update" button should be
545 * UI/MailPartViewers/UIxMailPartICalActions.m
546 ([UIxMailPartICalActions -deleteFromCalendarAction]): implemented
548 ([UIxMailPartICalActions -updateUserStatusAction]): implemented
551 * UI/Common/UIxPageFrame.m ([UIxPageFrame
552 -setCssFiles:newCSSFiles]): new accessor that enables the
553 sub-templates to specify extra CSS files to load.
555 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
556 -homeFolderInContext:context]): cache the home folder of the user
557 object instead of the current user.
559 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
560 -deleteEntriesWithIds:ids]): invokes the "prepareDelete" optional
561 method if the child object implements it.
563 * SoObjects/SOGo/SOGoContentObject.m ([-setContentString:])
566 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
567 -setBaseDN:newBaseDNIDField:newIDFieldCNField:newCNFieldUIDField:newUIDFieldmailFields:newMailFieldsandBindFields:newBindFields]):
568 take a new "mailFields" parameter defining an array of fields
569 where to look at when searching the user's emails. It defaults to
570 the standard "mail" LDAP field.
572 * SoObjects/Appointments/SOGoAptMailICalReply.[hm]: new
573 SoComponent implementing a template for ITIP replies.
575 * SoObjects/Appointments/iCalPerson+SOGo.m ([iCalPerson
576 -mailAddress]): new method that returns a properly formatted email
577 address for the specified person entry.
578 ([iCalPerson -uid]): new method that tests whether the user is
579 known to the system and if so, returns its user id.
581 * SoObjects/Appointments/iCalPerson+SOGo.[hm]: new category module.
583 * SoObjects/Appointments/iCalEventChanges+SOGo.m
584 ([iCalEventChanges -sequenceShouldBeIncreased]): determine whether
585 the changes involved need a sequence inscrease, based on the
588 * SoObjects/Appointments/iCalEventChanges+SOGo.[hm]: new category
591 * SoObjects/Appointments/iCalEvent+SOGo.m ([iCalEvent
592 -isStillRelevant]): new overriden method determining the relevance
593 of the current event based on its end date.
595 * SoObjects/Appointments/iCalEvent+SOGo.[hm]: new category module.
597 * SoObjects/Appointments/iCalEntityObject+SOGo.m
598 ([iCalEntityObject -attendeeUIDs]): new category methods that
599 returns an array containing the uids of the system-know attendees.
600 ([iCalEntityObject -isStillRelevant]): new template method.
601 ([iCalEntityObject -itipEntryWithMethod:method]): clone the
602 current entry calendar with the specified ITIP method.
603 ([iCalEntityObject -attendeesWithoutUser:user]): returns an array
604 of attendees while making sure the specified user is not listed.
606 * SoObjects/Appointments/SOGoCalendarComponent.m
607 ([SOGoCalendarComponent -calendar:create:secure]): new name for
608 -calendar:. Added a "secure" parameter that specifies whether a
609 stripped calendar instance is needed or not. Also, we no longer
610 cache the content to simplify handling of new data.
611 ([SOGoCalendarComponent -component:create:secure]): same as above.
612 ([SOGoCalendarComponent
613 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
614 test whether the component is "still relevant" before sending an
616 ([SOGoCalendarComponent -sendResponseToOrganizer]): new method for
617 sending ITIP replies.
618 ([SOGoCalendarComponent -getUIDsForICalPerson:iCalPerson]):
619 removed method. Replaced with -[iCalPerson uid] category method.
621 * SoObjects/Appointments/SOGoAppointmentObject.[hm]: rewrote
622 class. No longer override saveContentString:,
623 saveContentString:baseSequence:, .... Implemented the
624 saveComponent: and the prepareDelete methods instead. Those
625 methods are called only from the web methods. This avoids the
626 risks related to email sending and changes propagation.
628 * UI/Common/UIxTabItem.m: removed useless class module.
630 * UI/Common/UIxTabView.[hm]: removed useless class module.
632 * UI/Common/UIxPrintPageFrame.m: removed useless class module.
634 * UI/Common/UIxAppNavView.m: removed useless class module.
636 2007-11-16 Ludovic Marcotte <ludovic@inverse.ca>
638 * SoObjects/Mailer/SOGoMailBaseObject.m
641 * SoObjects/Mailer/SOGoMailBodyPart.m
642 We also grok image/jpeg and return the SOGoMailBodyPart
643 for attachments fetching.
645 * SoObjects/Mailer/SOGoMailObject+Draft.m
646 Prevent a crash in case body decoding failed during
649 * SoObjects/Mailer/SOGoMailObject.m
650 Improved body decoding during a reply to also try
651 latin1 as an encoding.
653 * UI/MailPartViewers/UIxMailRenderingContext.m
654 Greatly improved the display mechanisms for emails.
655 Also properly consider the content disposition for
658 * UI/MailerUI/UIxMailToSelection.m
659 Removed worthless code.
661 * UI/WebServerResources/MailerUI.css
662 CSS fix for table views.
664 2007-11-15 Ludovic Marcotte <ludovic@inverse.ca>
666 * UI/WebServerResources/MailerUI.js
667 We now check for empty selection and warn the
668 user about it when deleting messages
670 * SoObjects/Mailer/SOGoDraftObject.m
671 Correctly check for the presence of a subject
672 before attempting to forward a message from
675 * SoObjects/Mailer/SOGoMailObject+Draft.m
676 We no longer use "[Fwd: ]" but simply "Fwd:"
677 when forwarding email messages.
679 * SoObjects/SOGo/SOGoUser.m
680 Modified the default forwarding format to be
681 inline instead of "attachment".
683 * SoObjects/Mailer/SOGoDraftObject.m
684 We now create and use a NGMimeContentDispositionHeaderField
685 in order to avoid encoding the whole Content-Disposition
686 header in case a non-ASCII char is present!
688 2007-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
690 * SoObjects/SOGo/iCalEntityObject+Utilities.m ([iCalEntityObject
691 -findParticipant:user]): new method based on the one removed from
692 SOGoCalendarComponent below.
694 * SoObjects/SOGo/iCalEntityObject+Utilities.[hm]: new category
695 module for iCalEntityObject.
697 * SoObjects/Appointments/SOGoCalendarComponent.m
698 ([-findParticipant:user]): removed method.
700 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
701 -setContentString:newContent]): new accessor method.
703 -saveContentString:newContentbaseVersion:newBaseVersion]): invoke
704 -[self setContentString:].
706 * UI/MailPartViewers/UIxMailPartICalViewer.m
707 ([UIxMailPartICalViewer -authorativeEvent]): returns the most
709 ([-isLoggedInUserTheOrganizer]): make use of -[SOGoUser
712 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
713 -stringByConvertingCRLNToHTML]): fixed crashes due to overflows in
714 temporary buffer we are handing.
716 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
717 -setComponent:newComponent]): check that newComponent is non-nil
718 before replacing the default values.
719 ([UIxComponentEditor -calendarList]): privacy is already an ivar.
720 We don't need to refetch it.
722 2007-11-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
724 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
725 -fetchMailForReplying:sourceMailtoAll:toAll]): remove the current
726 user from the list of recipients and make sure no other address is
729 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
730 -stringByConvertingCRLNToHTML]): build the returned NSString
731 without the ending \0.
733 2007-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
735 * UI/MailPartViewers/UIxMailPartICalViewer.m
736 ([UIxMailPartICalViewer -acceptLink])
737 ([UIxMailPartICalViewer -declineLink])
738 ([UIxMailPartICalViewer -tentativeLink]): removed useless methods.
740 * UI/MailPartViewers/UIxMailPartICalAction.m
741 ([UIxMailPartICalAction -addToCalendarAction])
742 ([UIxMailPartICalAction -deleteFromCalendarAction]): new stub
745 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
746 -lookupImap4BodyPartKey:]): make use of the new method below.
748 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
749 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): new method
750 that returns an appropriate Class depending on a given mime type.
752 * UI/SOGoUI/UIxComponent.m ([UIxComponent -canCreateOrModify]):
753 new boolean accessor that determines whether someone can create
754 (i.e. modify a new entry) or modify an existing entry.
756 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
757 -lookupName:lookupNameinContext:localContextacquire:acquire]):
758 overriden method to bind looked up keys to So methods but by
759 avoiding a call to toOneRelationshipKeys. This will be the top
760 method of the chain, meant to override SoObject's behaviour.
762 * SoObjects/Contacts/SOGoContactLDAPFolder.m
763 ([SOGoContactLDAPFolder
764 -lookupName:objectNameinContext:lookupContextacquire:acquire]):
765 removed hack to prevent [super lookupName...] to read the entire
766 LDAP directory when looking up a record.
768 2007-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
770 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
771 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
774 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
775 ([UIxMailPartHTMLViewer -_attachmentIds]): the reference was one
776 character too short, which cause the images not to be displayed
777 sometimes and crashes to happen whenever the references on a
778 message were wrong (due to bugs in SOPE).
780 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
781 -hasMessageAttachment]): consider an attachment any content that
782 has a non-nil disposition.
784 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
785 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
786 fixed method to make use of the parameters instead of the useless
787 remains that weren't even initialized.
789 * SoObjects/Appointments/SOGoAppointmentObject.m
790 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
791 don't propagate the event among the attendees if this is not an
793 ([SOGoAppointmentObject -deleteWithBaseSequence:]): same as above.
795 * Main/SOGo.m ([SOGo -authenticatorInContext:context]): make use
796 of the new category method below.
798 * SoObjects/SOGo/WORequest+SOGo.m ([WORequest
799 -handledByDefaultHandler]): new method that returns whether this
800 is an "so" or alike request.
802 * SoObjects/SOGo/WORequest+SOGo.[hm]: new category module.
804 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
805 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
806 write the new folder's name in the folder cache.
808 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
809 -calendars]): same as below.
811 * UI/Contacts/UIxContactsListViewContainer.m
812 ([UIxContactsListViewContainer -currentContactFolderName]):
813 translate the display name if its the default one.
815 * SoObjects/Appointments/SOGoAppointmentFolder.m
816 ([SOGoAppointmentFolder -create]): overriden method that invokes
817 its ancestor and then activate itself within the user settings.
819 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
820 -appendPersonalSources]): when the user is the owner of the
821 current folder, we create the "personal" folder if it doesn't
822 exist by invoking "create".
824 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
825 -primaryFetchProfile]): when no row is returned, we initialize
826 "values" to a new dictionary. This solves a bug where the defaults
827 would not be initialized properly.
829 2007-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
831 * SoObjects/SOGo/SOGoGCSFolder.m ([-compare:otherFolder]): method
832 moved into the SOGoFolder class.
834 * SoObjects/Appointments/SOGoAppointmentObject.m
835 ([SOGoAppointmentObject -saveContentString:_iCalinUIDs:_uids]):
836 simplified method by directly building a similar appointment
837 object with the current folder as container.
839 * SoObjects/Contacts/SOGoContactLDAPFolder.m
840 ([SOGoContactLDAPFolder
841 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
842 take the content of an object returned by
843 lookupName:inContext:acquire: instead of the dictionary passed as
844 parameter since it represents a flattened entry return by
845 lookupContactsWithFilter...
847 * SoObjects/Contacts/SOGoFolder+CardDAV.m: NSObject+CardDAV
848 category renamed to SOGoFolder+CardDAV.
850 * SoObjects/SOGo/SOGoParentFolder.m: no longer a subclass of
851 SOGoObject, but of SOGoFolder instead.
853 * SoObjects/SOGo/SOGoUserFolder.m: no longer a subclass of
854 SOGoGCSFolder, but of SOGoFolder instead.
856 * SoObjects/Appointments/SOGoAppointmentFolder.m
857 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): fixed
858 to take the new SOGoParentFolder class into account. Also, create
859 the personal folder if it doesn't exist.
861 * SoObjects/SOGo/SOGoFolder.[hm]: new class module implementing
862 the parent of all SOGo containers.
864 * SoObjects/SOGo/SOGoGCSFolder.[hm]: SOGoFolder class renamed to
867 2007-11-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
869 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection
870 -getAddressesFromFormValues:_dict]): take NSString and NSArray
871 values. Ignore addresses with a length of 0.
873 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -mailAccounts]): we now
874 fetch the accounts from the user defaults and create default
877 2007-11-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
879 * UI/MailPartViewers/UIxMailPartTextViewer.m
880 ([UIxMailPartTextViewer -flatContentAsString]): re-added
881 conversion of line-break to sequences of HTML "BR", with a fast
884 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
885 -flatContentAsString]): simplified method now that we know
886 -[NSString stringWithData:usingEncodingNamed:] has a more robust
889 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
890 -showToAddress]): the answer is cached.
892 * UI/Common/UIxObjectActions.m ([UIxObjectActions +initialize]):
893 read "SOGoACLsSendEMailNotifications" from the user defaults to
894 determiner whether to send an email when a user is added or
895 removed from an object's acl.
897 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
898 -contentForEditing]): make sure the htmlContent flag is set to NO
899 when we select the textual part. Also we select only the relevant
902 * UI/MailerUI/WOContext+UIxMailer.m ([-mailSubjectFormatter]):
905 * UI/MailerUI/UIxMailView.m ([UIxMailView -messageSubject]): new
906 method replacing -objectTitle, written like the ones below.
908 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
909 -messageSubject]): rewrote method to act the one below.
911 * UI/MailPartViewers/UIxMailPartMessageViewer.m
912 ([UIxMailPartMessageViewer -messageSubject]): new method that
913 returns the decoded mail subject or "Untitled" if the subject is
916 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
917 -decodedSubject]): new method that invoke -decodedSubject from the
918 NSString and NSData class, depending on the identity of the
919 subject obtained from the envelope.
921 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
922 -subjectForReply]): take the value of -[SOGoMail decodedSubject]
923 instead of the subject of the envelope.
924 ([SOGoMailObject -filenameForForward]): same as above.
925 ([SOGoMailObject -subjectForForward]): same as above.
927 * SoObjects/Mailer/NSString+Mail.m ([NSString -decodedSubject]):
928 same as below for NSString.
930 * SoObjects/Mailer/NSData+Mail.m ([NSData -decodedSubject]): new
931 method that decodes the subject of a mail taken as an NSData
932 instance. Handling the exceptions and the badly formatted headers.
934 * UI/MailerUI/UIxSubjectFormatter.[hm]: dropped class module.
936 2007-11-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
938 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
939 -deleteEntriesWithIds:ids]): make sure the objects returned by
940 lookupName:... are not instances of NSException.
942 2007-11-03 Ludovic Marcotte <ludovic@inverse.ca>
944 * UI/Scheduler/UIxAppointmentEditor.m
945 Fixed monthly recurrences support.
947 2007-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
949 * SoObjects/Appointments/SOGoAppointmentObject.m
950 ([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
951 sent when modifying an event, when the event was considered
952 relevant. The same thing is now implemented for event deletion.
954 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
955 -primaryFetchProfile]): make sure that the deserialized "values"
956 is an instance of NSMutableDictionary, otherwise we override it
959 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
960 -contentForReply]): make use of the SOGoMailReply WO page.
962 * SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
963 from SOGoMailForward to handle mail replies instead. Only three
964 methods remaining: date, from and messageBody. The latter is
967 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
968 -fetchMailForForwarding:sourceMail]): fetch attachments for
971 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
972 -hasMessageAttachment]): initialize hasAttachment with "NO" to
973 avoid false positives.
975 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
976 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
977 set title to an empty string where the event/task summary is null.
979 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
980 -setHeaders:newHeaders]): make sure there is a message id in the
981 headers dictionary, if not, generate one.
982 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
983 message id from the existing draft.
984 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
985 message id in the header map.
987 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
988 -deleteFolderAction]): no longer prefix the target folder with
991 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
992 -listMailboxesAction]): base the folder type on the folder
995 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
996 -lookupName:_keyinContext:acquire:_acquire]): compare the full
997 traversal to the potential looked up folder with the special
998 folder names and return an object with the appropriate
999 SOGoMailFolder subclass.
1001 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1002 -traversalFromMailAccount]): don't prepend the whole string with
1005 * SoObjects/Mailer/SOGoMailAccount.m
1006 ([-lookupSentFolder:_keyinContext:_ctx])
1007 ([-lookupDraftsFolder:_keyinContext:_ctx])
1008 ([-lookupTrashFolder:_keyinContext:_ctx])
1009 ([-lookupFiltersFolder:_key:_ctx]): removed methods.
1010 ([SOGoMailAccount -inboxFolderNameInContext:])
1011 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1012 ([SOGoMailAccount -sentFolderNameInContext:])
1013 ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
1014 the resulting name with "prefix" since we might return a nested
1016 ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
1017 names with "/". Sorts the resulting folder list with
1018 localizedCaseInsensitiveCompare: instead of
1019 caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
1020 that were removed, instead, we choose the appropriate class
1021 depending on the folder name. And since we are in SOGoMailAccount,
1022 we don't have to compute a traversal path to match the key with
1025 -folderWithTraversal:traversalandClassName:className]): new method
1026 that returns an instance of the specified SOGoMailFolder subclass,
1027 based on the traversal path passed as parameter.
1028 ([SOGoMailAccount -inboxFolderInContext:_ctx])
1029 ([SOGoMailAccount -draftsFolderInContext:_ctx])
1030 ([-sentFolderInContext:_ctx])
1031 ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
1032 -folderWithTraversal:andClassName: method described above.
1034 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1035 -primaryFetchProfile]): make use of -[NSPropertyListSerialization
1036 propertyListFromData:mutabilityOption:format:errorDescription:] to
1037 deserialize the plist. Removed variant for libFoundation since it
1038 should support the above.
1039 ([AgenorUserDefaults -generateSQLForInsert])
1040 ([AgenorUserDefaults -generateSQLForUpdate]): make use of
1041 -[NSPropertyListSerialization
1042 dataFromPropertyList:format:errorDescription:] to serialize the
1043 plist. Removed variant for libFoundation since it should support
1044 the above. Escape the backslashes from the resulting string.
1046 2007-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1048 * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
1049 SOGoMailFolder: SOGoMailSpecialFolder.
1051 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1052 -traversalFromMailAccount]): overridden method that returns the
1053 initialized mutable string.
1054 ([SOGoMailAccount -allFolderPaths]): take the special folder paths
1055 with -traversalFromMailAccount and reposition them at the
1056 beginning of the list. By creating the special folders during that
1057 request, we also make sure that the folder exists thanks to the
1058 new initialisation method of the new "SOGoSpecialMailFolder"
1060 ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
1062 ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
1064 ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
1065 longer use lookupImap4Folder.
1066 ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
1069 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1070 -traversalFromMailAccount]): new method that returns the full
1071 IMAP4 path to the object.
1073 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
1074 "superUsernames" after fetching it from the ud.
1076 2007-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1078 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1079 -eventsListAction]): substitude the start and end date with their
1080 UTC counterpart, taking into account the offset from UTC related
1081 to those dates instead of the current one. This renders
1082 -[UIxCalMainView -userUTCOffset] obsolete because the computings
1083 that occured in javascript are now done server-side.
1085 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
1086 removed obsolete method.
1088 * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
1089 method converting html content to plain text.
1091 * SoObjects/Mailer/NSString+Mail.[hm]: new category module
1092 enhancing NSString with utility methods pertaining to mail handling.
1094 * SoObjects/Mailer/SOGoMailObject.m
1095 ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
1097 -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
1098 modified method to be always recursive and to take an array of the
1099 accepted mime-types as parameter. The returned array now contains
1100 the mime-type as well as the part keys.
1102 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1103 -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
1104 ([SOGoMailObject -contentForEditing]): rewrote method to take into
1105 account the first text/plain part or the first text/html part
1106 converted to text/plain with our new -[NSString htmlToText]
1109 * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
1110 "replyToAll:" with YES as parameter instead of NO.
1112 2007-10-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1114 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1115 -davContentType]): ignore any possible parameter taken from the
1116 mime-info of the body part.
1118 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1119 -lastFirstMessageNumber]): new accessor that returns the first
1120 message number of the last series of messages.
1121 ([UIxMailListView -fetchKeys]): request the bodystructure for each
1123 ([UIxMailListView -hasMessageAttachment]): extract the attachment
1124 information from the message bodystructure.
1126 2007-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1128 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1129 -GETAction:]): use the "application/octet-stream" mime type for
1130 elements of type "application/x-xpinstall" to avoid confusing
1133 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
1134 ([UIxPreferences -itemMessageCheckText])
1135 ([UIxPreferences -userMessageCheck])
1136 ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
1137 methods for handling the retrieval of new messages automatically.
1139 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
1140 that returns the interval of time between automatic message
1143 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1144 -defaultAction]): now expunges the last folder marked for expunge.
1146 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1147 -trashInContext:_ctx]): now marks the container folder for
1150 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1151 -markForExpunge]): new method that marks the folder for the next
1152 automatic expunge operation in the user settings.
1153 ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
1154 takes the last folder marked for expunge, expunges it and removes
1155 it from the user settings, if it exists.
1157 2007-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1159 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1160 -messageSubjectCellStyleClass]): added support for replied,
1161 forwarded, forwarded and replied mails.
1163 * SoObjects/Mailer/NSData+Mail.m ([NSData
1164 -bodyDataFromEncoding:encoding]): new utility method that decodes
1165 the NSData instance properly depending on the encoding string
1166 passed as parameter.
1168 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1169 -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
1171 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1172 -stringForData:_datapartInfo:_info]): simplified by invoking
1173 -bodyDataFromEncoding: from our new NSData category methods.
1175 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1176 -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
1177 where only the body part of the first of the keys fetched was
1178 returned. Also decodes the body parts properly following their
1181 * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
1182 extends the NSData class with utility methods useful for handling
1185 2007-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1187 * SoObjects/SOGo/NSArray+Utilities.m
1188 ([NSArray -stringsWithFormat:format]): replace instances of NSNull
1191 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1192 -keysWithFormat:keyFormat]): replace instances of NSNull with
1195 * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
1196 empty, use "c_cn" instead.
1198 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1199 ([SOGoMailAccount -draftsFolderInContext:_ctx])
1200 ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
1201 of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
1202 no always be specified from the root instead of sometimes from the
1205 2007-10-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1207 * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
1208 ([UIxPageFrame -productLocalizableStrings]): invoke the new
1209 +[SOGoUser language] method if the user is nil.
1211 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
1212 that returns any generically-found language.
1213 ([SoUser -language]): modified to call the above.
1214 ([SOGoUser -language]): modified to call the above if the user
1215 language has a null length.
1217 * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
1218 -davEntityTag]): modified to return the "hash" of the vCard string.
1220 * UI/MailerUI/UIxMailActions.m ([UIxMailActions
1221 -removeAllLabelsAction]): new method that removes all label flags
1222 from the associated message.
1223 ([UIxMailActions -addLabel1Action]
1224 [UIxMailActions -addLabel2Action]
1225 [UIxMailActions -addLabel3Action
1226 [UIxMailActions -addLabel4Action]
1227 [UIxMailActions -addLabel5Action]): new methods that adds label
1228 flags to the associated message.
1229 ([UIxMailActions -removeLabel1Action]
1230 [UIxMailActions -removeLabel2Action]
1231 [UIxMailActions -removeLabel3Action
1232 [UIxMailActions -removeLabel4Action]
1233 [UIxMailActions -removeLabel5Action]): new methods that removes
1234 label flags from the associated message.
1236 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
1237 new accessor that returns the labels associated with the message.
1239 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1240 -allFolderPaths]): new method that returns all the paths of all
1241 the subfolders of the folder object.
1242 ([SOGoMailFolder -allFolderURLs]): new method replacing
1245 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1246 -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
1247 role from its parent folder.
1249 2007-10-19 Francis Lachapelle <flachapelle@inverse.ca>
1251 * SoObjects/SOGo/SOGoUser.m
1252 ([SOGoUser -rolesForObject:objectinContext:context]): allow
1253 multiple super usernames to be defined. The user default
1254 SOGoSuperUsername is renamed SOGoSuperUsernames and must be
1257 2007-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1259 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1260 -userInContext:]): override the super method by returning
1261 anonymous if the super returns nil.
1263 * UI/Common/UIxPageFrame.m ([UIxPageFrame
1264 -productLocalizableStrings]): new method that returns the
1265 product-specific translation dictionary as a JSON hash.
1266 ([UIxPageFrame -commonLocalizableStrings]): same as above but for
1267 the "Common" framework.
1268 ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
1269 the requestor components to require additional Javascript files.
1270 This is useful now that all the scripts are loaded at the end of
1272 ([UIxPageFrame -additionalJSFiles]): new getter related to the
1275 2007-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1277 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
1278 implemented new web method.
1280 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1281 -copyToFolderNamed:folderNameinContext:]): new method with the
1282 code cut/pasted from -moveToFolderNamed:inContext:.
1283 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
1284 modified to use the code from -copyToFolderNamed:inContext:, which
1285 is common between the two actions.
1287 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1288 ([SOGoMailAccount -sentFolderNameInContext:])
1289 ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
1290 the user settings into account.
1292 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
1293 ([UIxMailFolderActions -setAsSentFolderAction])
1294 ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
1295 that change the purpose of the active folder to "Sent", "Drafts"
1298 * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
1299 returns the subject as quoted-printable.
1301 * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
1302 SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
1303 the "aclMethod" method for the subsequent language-dependent
1306 * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
1307 returns the subject as quoted-printable.
1309 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1310 -dealloc]): release item, aptStartDate and aptEndDate.
1312 2007-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1314 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1315 -initWithName:newNameinContainer:newContainer]): the owner of a
1316 shared folder is set to "nobody" by default.
1318 * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
1319 that returns whether the object has an owner or not.
1321 2007-10-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1323 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1324 the folder even if the current user is not its owner.
1326 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
1328 * We now send advisory emails when folders
1329 are created / deleted.
1331 * Fixed the sending of advisory emails upon
1332 ACL changes on folders.
1334 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
1336 * UI/Scheduler/UIxComponentEditor.m
1337 Implemented event/task priority support.
1339 * SoObjects/Contacts/SOGoContactGCSFolder.m
1340 Added CardDAV support.
1342 * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
1343 Implemented From: based on LDAP results based on
1344 the MailFieldNames attribute (an array) specified
1345 in every LDAP-based authentication sources.
1347 * UI/MailPartViewers/UIxMailPartTextViewer.m and
1348 UI/WebServerResources/MailerUI.css
1349 We avoid replacing "\r\n" and "\n" with <br /> and
1350 rather use CSS capabilities for proper formatting.
1351 This is _WAY_ faster on very large mails.
1353 2007-10-10 Francis Lachapelle <flachapelle@inverse.ca>
1355 * UI/Scheduler/UIxComponentEditor.m
1356 ([UIxComponentEditor -componentCalendar]): returns the calendar
1357 object of the current event.
1359 2007-10-05 Ludovic Marcotte <ludovic@inverse.ca>
1361 * UI/WebServerResources/MailerUI.js
1362 We check if at least one message is selected
1363 before performing a Reply/Reply All/Forward
1365 * SoObjects/Appointments/SOGoAppointmentFolder.m
1366 and others - implemented support for recurring
1367 events (with some known limitations right now,
1368 all soon to be fixed).
1370 2007-10-04 Francis Lachapelle <flachapelle@inverse.ca>
1372 * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
1373 the constraint that a username can't start with a digit.
1375 2007-10-02 Francis Lachapelle <flachapelle@inverse.ca>
1377 * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
1378 repository to Inverse's branch.
1380 2007-09-28 Francis Lachapelle <flachapelle@inverse.ca>
1382 * SoObjects/Mailer/SOGoDraftObject.m
1383 ([SOGoDraftObject -isValidAttachmentName:_name]): removed
1384 constraint on space in file name.
1385 ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
1386 now removes from file name all characters preceding a backslash.
1387 This happens with IE7 because the complete attachment file path
1390 2007-09-25 Francis Lachapelle <flachapelle@inverse.ca>
1392 * SoObjects/Appointments/SOGoAptMailNotification.m
1393 ([SOGoAptMailNotification -appointmentURL]): set personal as the
1394 default calendar where to add the event.
1396 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1397 activate the SOGoUIxDefaultModule user defaults.
1399 2007-09-21 Francis Lachapelle <flachapelle@inverse.ca>
1401 * UI/SOGoUI/UIxComponent.m
1402 ([UIxComponent -shortUserNameForDisplay]): returns the string
1403 "wrongusernamepassword" when authentication failed.
1405 2007-09-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1407 * UI/MailPartViewers/UIxMailPartICalViewer.m
1408 ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
1409 entry of the Calendars parent folder.
1411 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1412 -messageSubject]): new accessor method to work-around a problem
1413 within SOPE where a subject could be returned as an NSData.
1415 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1416 -appendPersonalSources]): make sure the value of the "c_path4" of
1417 the returned rows are not NSNull, otherwise, discard them.
1419 2007-09-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1421 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1422 -compare:otherFolder]): new overriden method that compares two
1423 contact foldes based on their class and then transfer the control
1424 to the super method in SOGoFolder.
1426 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1427 ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
1428 compare two contact folders based on their class and then their
1431 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
1432 new method for sorting folders. The folders are compared based on
1433 their ownership, whether they are a main folder and finally
1434 depending on their display name.
1436 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1437 -pathArrayToSOGoObject]): do not reorder the paths if the third
1438 element is an instance of NSNull.
1440 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1441 -subFolders]): returns a sorted array using the "compare:"
1444 2007-09-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1446 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1447 -calendars]): also returns the owner of the listed folders.
1449 * SoObjects/Appointments/SOGoAppointmentFolder.m
1450 ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
1452 * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
1453 method into UIxFolderActions.
1455 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1456 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
1457 freebusy info from the "personal" calendar.
1459 * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
1460 -createFolderAction]): new standardized method for requesting
1461 folder creations among gcs-based modules.
1463 * UI/Common/UIxParentFolderActions.[hm]: new action class module.
1465 * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
1466 module, equivalent to the SOGoParentFolder's child
1467 SOGoContactFolders, but for calendars.
1469 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
1470 method that returns translated strings for controller bundles
1471 (same as what UIxComponent does for view bundles).
1472 ([SOGoObject -pathArrayToSOGoObject]): new method that returns
1473 the real path to a subscribed folder (if subscribed).
1474 ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
1475 ([SOGoObject -globallyUniqueObjectId]): new instance method
1476 calling its class equivalent.
1478 2007-09-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1480 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
1481 whether the user is logged in and if so, redirect to his/her
1483 ([SOGoRootPage -appendToResponse:inContext:]): removed useless
1486 2007-09-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1488 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1489 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1491 ([SOGoFolder -displayName]): new method.
1492 ([SOGoFolder -delete]): accept to proceed only if nameInContainer
1495 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1496 ([SOGoContactLDAPFolder
1497 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1498 renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
1500 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1501 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1502 removed method, reimplemented in SOGoFolder.
1503 ([SOGoContactGCSFolder -displayName]): removed method,
1504 reimplemented in SOGoFolder.
1505 ([-delete]): removed method, modified in SOGoFolder.
1507 * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
1508 a subclass of SOGoParentFolder.
1510 * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
1511 from SOGoContactFolders and modified to be more content-independent.
1513 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
1514 ([UIxMailActions -markMessageReadAction]): new methods moved from
1515 UIxMailListView and adapted to invoke the client object directly,
1516 since the previous versions had to to a lookup from the parent
1519 * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
1520 method into UIxMailActions.
1521 ([-markMessageReadAction]): same as above.
1522 ([-viewAction]): removed useless method.
1523 ([-javaScriptOK]): removed useless method.
1524 ([-isJavaScriptRequest]): removed useless method.
1525 ([-lookupActiveMessage]): removed useless method.
1527 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1528 -responseWithStatus:status]): new method that returns a WOResponse
1529 initialized with the specified status code.
1530 ([WODirectAction -responseWith204]): new method that invokes the
1531 above one with "204" as parameter.
1532 ([WODirectAction -redirectToLocation:newLocation]): rewrote method
1533 to make use of -responseWithStatus:.
1535 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
1536 method that returns a WOResponse initialized with the 204 status
1539 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
1540 always use a "not deleted" search qualifier along with the user
1541 qualifier (if present).
1543 2007-09-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1545 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1546 -contactSearchAction]): only return the records which have an
1549 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1550 -trashInContext:_ctx]): no longer expunge the mailbox after
1551 marking a message deleted.
1552 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
1555 * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
1556 ([-trashAction]): moved method into UIxMailActions.
1557 ([-moveAction]): moved method into UIxMailActions.
1559 2007-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1561 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1562 ([_UIxHTMLMailContentHandler
1563 -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
1564 comments from the CSS code, do not add the CSS code to the body
1565 content and remove references of body from the CSS declarations.
1566 ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
1567 ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
1568 common with cssContent in a different method and invoke it only
1571 * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
1572 instead of UIxPageFrame.
1574 2007-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1576 * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
1577 ([-appendToResponse:responseinContext:ctx]): commented out.
1578 ([SOGoRootPage -connectURL]): new accessor that returns the full
1579 url the the "connect" method.
1580 ([-connectAction]): rewrote method to return a properly formatted
1581 auth. cookie based on the username and password passed as
1584 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1585 set the value of the cookie to "discard" and set its expiration
1588 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1589 -preprocessCredentialsInContext:context]): consider the user
1590 anonymous if the cookie value is "discard".
1591 ([SOGoWebAuthenticator
1592 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1593 set the expiration date of the cookie to yesterday.
1595 * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
1596 returns the path to the application if the clientObject is not a
1599 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
1600 moved the requirement of authentication from the SOGo application
1603 * SoObjects/Appointments/SOGoAppointmentObject.m
1604 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
1605 check whether the new appointment object is still relevant before
1606 sending a notification.
1608 2007-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1610 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1611 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1612 render the login page through the SoDefaultRenderer.
1614 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
1615 -isPublicInContext:localContext]): new overriden method that
1618 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1619 -currentCalendarLogin]): replace css-unsafe characters with _.
1621 * UI/SOGoUI/UIxComponent.m ([UIxComponent
1622 -shortUserNameForDisplay]): simplified method.
1623 ([-user]): removed method since [context activeUser] is as useful.
1625 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1627 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1628 set the cookie path to "/".
1630 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
1631 authenticator based on the request handler key. "dav" returns the
1632 SOGoDAVAuthenticator, anything else returns the Web authenticator.
1634 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
1635 "SOGoAuthenticator".
1637 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
1638 implementing a subclass of SoCookieAuthenticator, designed for
1639 web-based cookie authentication of users.m
1641 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1642 new method that resets the authentification cookie.
1644 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1646 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
1647 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
1648 didBind to NO to make sure no false authentication is returned if
1649 the bind operation is not executed.
1651 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1653 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
1654 "In-Reply-To" header field when replying.
1656 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
1657 table field names that are queried.
1659 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1660 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
1661 add the "c_" prefix to the quick table field names that are
1664 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1666 * SoObjects/Appointments/SOGoAppointmentFolder.m
1667 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
1668 "personal" to the ocs path of the appointment folder.
1670 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1671 -flatContentAsString]): use latin1 when the encoding is not
1672 specified, and to reencode data chunk which were not correctly
1673 decoded with the original charset.
1675 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
1676 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
1677 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
1678 ([SOGoAppointmentFolder
1679 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
1680 override those methods to use the "personal" additional directory.
1682 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
1683 append "/personal" to the calendar path to simulate a single
1684 calendar in a choice of many.
1686 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1687 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
1688 methods back here. Moved the folder existence check here, and do
1689 it on self only when the lookup happens for a non-folder object.
1690 This permits to accept entries for folders with parents who
1693 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1695 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1696 -shouldTakeValuesFromRequest:requestinContext:context]): same as
1699 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1700 -shouldTakeValuesFromRequest:requestinContext:context]):
1701 redesigned method since any method called can be received from a
1702 POST or a GET. Instead we check the method call itself and we
1703 accept only if it has the "save" prefix.
1705 * SoObjects/Appointments/SOGoAptMailNotification.m
1706 ([SOGoAptMailNotification -getSubject]): returns the subject an a
1707 quoted-printable encoded string, if needed.
1709 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1710 -asQPSubjectString:encoding]): moved method into
1711 NSString+Utilities.m.
1713 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1715 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1716 -messageForwardingList])
1717 ([UIxPreferences -itemMessageForwardingText])D
1718 ([UIxPreferences -userMessageForwarding])
1719 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
1720 new template methods for manage the user preference regarding
1723 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
1724 algorithm to return, in order, the user's defined language or the
1725 first browser language or, finally, the default language.
1726 ([SOGoUser -messageForwarding]): new method that returns the user
1727 preference for message forwarding: "inline" or "attached",
1728 defaulting to "attached".
1730 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1731 -contentForInlineForward]): new method that returns the content of
1732 the message for inline forwarding based on the SOGoMailForward
1735 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1736 -fetchMailForForwarding:sourceMail]): check the user preference
1737 for message forwarding and compose inline forwarded messages if required.
1739 * SoObjects/Appointments/SOGoCalendarComponent.m
1740 ([SOGoCalendarComponent
1741 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1742 now use a template based on the language returned from the
1745 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
1746 a subclass of SOGoMailForward for English locale.
1748 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
1749 a subclass of SOGoMailForward for French locale.
1751 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
1752 helps build template for inline forwarded messages.
1754 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1756 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
1757 to handle "<var:if-ie>" template tags.
1759 * UI/SOGoElements: new extension bundle containing sogo-specific
1762 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1763 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
1764 selected in the dialog.
1765 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
1766 first category, if ever, of the calendar entity.
1768 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1769 -composeAction]): restored method since it is needed by the
1772 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1773 -composeAction]): the address fields should be arrays and not
1776 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
1777 that returns the build date of SOGo in the template.
1779 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1781 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1782 -_flattenedRecords:records]): when the c_cn field is empty,
1783 returns set a formatted string with the concatenation of
1784 c_givenname and c_sn as the displayName.
1786 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1787 -isValidMailAccountName:_key]): prevent unknown accounts from
1790 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1791 -pathToAttachmentObject]): we no longer need the filename
1792 extension for SoLookup...
1794 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1795 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
1796 filename to have an extension, and thus accept any filename.
1798 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1799 -currentCName]): new method that returns the c_name of the
1800 contact, correctly escaped to be passed by url afterwards.
1802 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1803 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
1804 instance of [self decodedFlatContent] instead of the buggy
1805 NSString from [super flatContentAsString] to the parser.
1807 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1809 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
1810 new category method to reponds to the "delete" web command on
1812 ([UIxMailActions -deleteAttachmentAction]): new category method to
1813 reponds to the "deleteAttachment" web command on drafts, taking
1814 the "filename" url parameter into account.
1816 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1817 -contentForEditing]): new method that retrieve the editable mail
1819 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
1820 returns the body keys for attached files (parts with a "filename"
1823 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1824 -asQPSubjectString:encoding]): do not change the string if the
1825 encoded string has the same length (which means it is already
1827 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
1828 that retrieve a draft along with its attachments for editing.
1829 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
1830 choke if the "to" header field is empty.
1831 ([SOGoDraftObject -delete]): new method to delete the draft folder
1832 whenever operations are done.
1834 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1836 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
1837 useless stub method, of which the intention was implemented in
1839 ([-lookupSentFolderUsingAccount]): removed obsolete method.
1840 ([-selectedMailIdentity]): removed obsolete method.
1841 ([-lookupSentFolderUsingFrom]): removed obsolete method.
1842 ([-storeMailInSentFolder:_path]): removed obsolete method, of
1843 which the mechanism has been put in -[SOGoDraftObject sendMail]
1845 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
1846 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
1847 adapted algorithms to the new SOGoDraftObject methods.
1848 ([-deleteAction]): removed method since local draft objects cannot
1849 be removed by the user.
1851 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1852 -expungeAction]): new method replacing the one previously found in
1854 ([UIxMailFolderActions -createFolderAction])
1855 ([UIxMailFolderActions -renameFolderAction])
1856 ([UIxMailFolderActions -deleteFolderAction])
1857 ([UIxMailFolderActions -emptyTrashAction])
1858 ([UIxMailFolderActions -subscribeAction])
1859 ([UIxMailFolderActions -unsubscribeAction]): error situations
1860 should have http return code 500 instead of 403.
1862 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1863 -composeAction]): new method replacing the one previously in
1866 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1867 -imap4URLString]): removed overriden method (see below).
1869 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
1870 cache the mailbox acl.
1871 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
1872 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
1874 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
1875 the new method of determining the users mail accounts.
1877 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
1878 longer adds a "/" at the end of the string (the default for
1879 folders), therefore this will be overriden in SOGoMailFolder
1880 rather than in SOGoMailObject.
1882 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
1883 method, moved into the new UIxMailActions module class.
1885 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
1886 -newDraft]): new method that returns a new SOGoDraftObject
1887 instance with a unique filename based on the current timestamp and
1888 the "newDraft" prefix.
1890 -lookupName:nameinContext:localContextacquire:acquire]): overriden
1891 method by detecting local drafts with their "newDraft" prefix.
1892 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
1894 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
1895 from scratch by making it a subclass of SOGoMailFolder.
1897 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
1900 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
1903 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
1906 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
1907 new method, initializing the new ivars: IMAP4ID, headers, text,
1908 sourceURL and sourceFlag.
1909 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
1910 ([-_ensureUserSpoolFolderPath])
1911 ([-saveMimeMessageToTemporaryFileWithHeaders:])
1912 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
1913 ([-deleteTemporaryMessageFile:], [-delete], [-content])
1914 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
1915 ([-uid], [-flags], [-size], [-envelope]): removed methods.
1916 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
1918 ([SOGoDraftObject -setSourceURL:newSourceURL])
1919 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
1920 methods to store the url of the original message between accesses
1921 so that, depending on the action taken (forward or reply), the
1922 correct flag can be given.
1923 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
1924 the imap4 id that is returned for the message whenever it is saved
1925 into the drafts folder.
1926 ([SOGoDraftObject -save]): new method that takes in charge the
1927 saving of the message in the IMAP drafts folder.
1928 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
1929 new method that fills the original data of the new message with
1930 the reply content of the original message.
1931 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
1932 above for message forwarding.
1933 ([-spoolFileManager]): removed useless method (only returned the
1934 default filemanager...)
1935 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
1936 the resulting message as an NSData chunk.
1938 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
1939 containing a rewrite of the mail action methods found in
1940 UI/Mailer/, that needed to be put in the SOGoMailObject class.
1941 ([SOGoMailObject -subjectForReply]): new method that returns a
1942 subject suitable for replies.
1943 ([SOGoMailObject -contentForReply]): new method that returns the
1944 textual content of an email, quoted for replying.
1945 ([SOGoMailObject -filenameForForward]): new method that returns
1946 the name of the filename that should contain the forwarded
1947 message, based on its subject.
1948 ([SOGoMailObject -subjectForForward]): explicit.
1950 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1952 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1953 -mailAccounts]): rewrote method to return the name of the mail
1954 accounts now available with the -[SOGoUser mailAccounts] method.
1955 ([UIxMailMainFrame -showLinkBanner]): removed method.
1956 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
1957 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
1958 ([UIxMailMainFrame -rootURL]): removed method.
1959 ([UIxMailMainFrame -userRootURL]): removed method.
1960 ([UIxMailMainFrame -calendarRootURL]): removed method.
1961 ([UIxMailMainFrame -contactsRootURL]): removed method.
1962 ([UIxMailMainFrame -hasErrorText])
1963 ([UIxMailMainFrame -errorText])
1964 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
1965 ([-composeAction]): removed method. Now provided by
1966 UIxMailAccountActions.
1967 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
1968 ([UIxMailMainFrame -hideFolderTree]): removed method.
1969 ([UIxMailMainFrame -treeRootClassName]): removed method.
1970 ([UIxMailMainFrame +initialize]): removed method.
1971 SOGoMailTreeRootClass userdefaults will no longer have any effect.
1973 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1974 -redirectToLocation:newLocation]): new method that implements the
1975 same functionality as WOComponent.
1977 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
1979 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
1980 method that returns whether the current mail is store in the
1981 drafts folder hierarchy.
1983 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
1984 ([-primaryEmail]): removed method.
1985 ([SOGoUser -primaryIMAP4AccountString]): removed method.
1986 ([SOGoUser -mailAccounts]): new method that returns an array
1987 containing description dictionaries for all the user mail
1988 accounts. Each account also contain the user's identities for that
1990 ([SOGoUser -allIdentities]): new utility method that returns all
1991 the user identities on all accounts.
1992 ([SOGoUser -primaryIdentity]): new method return the first
1993 identity of the first account.
1995 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
1997 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1998 -isInDraftsFolder]): returns NO.
1999 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
2001 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
2003 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2004 -isInDraftsFolder]): new method that detects if self is contained
2005 by the drafts folder by calling itself on the container object.
2007 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
2009 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
2010 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
2011 return the name of the mail accounts now available with the
2012 -[SOGoUser mailAccounts] method.
2014 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
2017 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
2020 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
2021 -keysWithFormat:format]): method that forward the method of the
2022 same name to each member of the array, considering they all are
2023 instances of NSDictionary.
2024 ([NSArray -objectsForKey:key]): same principle as above.
2025 ([NSArray -flattenedArray]): new method that transforms an array
2026 of arrays into a single array containing all the elements of the
2029 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
2030 -keysWithFormat:keyFormat]): new method inspired by the python
2031 string formatting system and which replaces occurences of "%{key}"
2032 by the corresponding keys.
2034 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2036 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
2037 sql script before the generic one when initializing mandatory
2040 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2042 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2043 -pureEMailAddress]): new utility method inspired by the
2044 "_rawSender" private method in SOGoDraftObject, which it now
2047 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
2048 provides a common API for sending emails, no matter what the
2051 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2053 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2054 -quotasAction]): invoke "relativeImap4Name" instead of
2055 "nameInContainer" since the latter also returns the "folder"
2058 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2059 -listMailboxesAction]): declare the output as text/plain in UTF-8.
2061 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2062 -deleteFolderAction]): fixed the url of the destination folder.
2064 * Main/SOGo.m ([SOGo +initialize]): show the build date and
2065 hostname at startup.
2067 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2069 * SoObjects/Appointments/SOGoCalendarComponent.m
2070 ([SOGoCalendarComponent
2071 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
2072 set the mail date to the current date string returned by our
2073 rfc822DateString extension method.
2075 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2076 -_gcsFoldersFromFolder:): ignore the personal folders who are
2077 returned but don't really exist.
2079 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
2081 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
2082 has to return only one element.
2084 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2086 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
2087 -content]): new method returning the decoded content of the
2088 corresponding attachment as an NSData instance.
2089 ([UIxMailPartViewer -filename]): if the "filename" parameter of
2090 the metadata parameterList is empty, try to find out the filename
2091 from the "disposition" metadata returned with the BODYSTRUCTURE
2094 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
2095 -composeAction]): prefix the INBOX folder with "folder".
2097 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
2098 -relativeImap4Name]): return nameInContainer stripped from its
2099 first 6 characters since all folder names are prefixed with
2102 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2103 -imap4URLString]): invoke -relativeImap4Name instead of
2104 "nameInContainer" since the former will return the fixed IMAP4
2105 foldername and the latter the SoObject name.
2107 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2108 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
2110 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
2111 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
2112 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
2113 ([SOGoMailAccount -sentFolderNameInContext:])
2114 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
2115 names with "folder".
2116 ([SOGoMailAccount -inboxFolderInContext:_ctx])
2117 ([SOGoMailAccount -sentFolderInContext:_ctx])
2118 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
2119 the folder names with "folder" since they are prefixed earlier.
2121 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2123 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
2124 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
2125 all starts with "folder".
2127 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
2128 longer declare security info from here.
2130 * SoObjects/Mailer/SOGoMailFolder.m
2131 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
2132 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
2133 folder names now always start with "folder".
2135 * SoObjects/Mailer/SOGoMailAccount.m
2136 ([-lookupName:inContext:acquire:]): folder names now always start
2139 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2141 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
2142 -forwardAction]): adapted to the new saveAttachment:withMetadata:
2145 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
2146 code to save the attached filenames with the filename returned by
2147 the web server as well as their mime types.
2149 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
2150 ([UIxMailPartMessageViewer -toAddresses])
2151 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
2152 the corresponding fields separated with a ", " (if needed).
2154 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
2155 -saveAttachment:_attachwithMetadata:metadata]): new method
2156 replacing -saveAttachment:withName: and which takes a dictionary
2157 as parameter with the filename and the mime type of the
2159 The mimetype is then saved in a hidden text file.
2160 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
2161 take the mime type from the hidden text file related to the
2164 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
2165 ([SOGoContactGCSFolder
2166 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2167 return records if the db records are > 0 and not just > 1...
2169 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2171 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
2173 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
2175 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2176 ([SOGoContactLDAPFolder
2177 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2178 translate the returned records to a normalized form.
2180 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2181 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2182 translate the returned records to a normalized form.
2184 * UI/Scheduler/UIxCalListingActions.m,
2185 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
2186 SoObjects/SOGo/AgenorUserDefaults.m,
2187 SoObjects/Contacts/SOGoContactGCSFolder.m,
2188 SoObjects/Appointments/SOGoAppointmentFolder.m,
2189 OGoContentStore/OCSiCalFieldExtractor.m,
2190 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
2191 table fields with "c_".
2193 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2195 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
2196 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
2197 the application settings. If set, both limit will influence the
2198 maximum size of the resultsets and the time taken to solve them.
2199 ([LDAPSource -_initLDAPConnection]): initialize the limits.
2201 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2203 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
2204 method that declares the DAV namespace related to CardDAV.
2205 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
2206 method that declares the "access-control" and "addressbook-access"
2207 classes to the list.
2209 * SoObjects/Appointments/SOGoAppointmentFolder.m
2210 ([-lookupActionForCalDAVMethod:]): removed method.
2211 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
2212 method that declares the DAV namespace related to CalDAV.
2214 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
2215 optional method for subclasses which handle specific extensions to
2216 the DAV protocol: CardDAV or CalDAV.
2218 -lookupName:lookupNameinContext:localContextacquire:acquire]):
2219 new overriden method that handles dav invocations for extensions
2220 to DAV by returning an appropriate SoSelectorInvocation.
2222 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2223 -asDavInvocation]): new method returning a dictionary with a "ns"
2224 key representing the dav namespace and a "method" key representing
2225 the dav method name of the request.
2227 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
2228 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
2230 ([UIxPreferences -shouldDisplayPasswordChange]): new template
2231 method that returns the value of SOGoUIxUserCanChangePassword.
2233 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
2234 scan the value of SOGoUIxDefaultModule. If not set, the default
2235 module defaults to "Calendar".
2236 ([SOGoUserHomePage -defaultAction]): redirect the user to the
2237 value of "SOGoUIxDefaultModule".
2239 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2241 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2242 -contactInfos]): cache the results to avoid multiple invocations.
2244 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2245 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
2246 really should return something or if we fake to return nil...
2248 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2250 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
2251 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
2252 default is set to "bypass".
2254 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2255 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
2256 when authMethod is set to "bypass" from now on. This would avoid a
2257 security concern with a default installation of SOGo.
2258 AuthentificationMethod is now prefixed with "SOGo" for better
2261 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2263 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2264 -quotasAction]): new method that returns a json representation of
2267 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2269 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2270 -imap4URL]): rewrote method to support accented mailbox names.
2271 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
2272 SOGoAuthenticator's passwordInContext:.
2274 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2275 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
2276 start and due dates to nil if hasStartDate and hasDueDate are
2279 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2280 -passwordInContext:context]): made method public.
2282 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2283 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
2284 to false to avoid a null violation.
2286 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2288 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2289 -contentAsString]): returns the message encoded in ISO Latin 1
2292 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
2293 SOGoSuperUsername user defaults.
2294 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
2296 ([SOGoUser -rolesForObject:objectinContext:context]): if the
2297 current user is the superuser, grant him/her the "owner" role.
2299 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
2300 the folder only if the current user is the owner of the future
2303 * SoObjects/Appointments/SOGoCalendarComponent.m
2304 ([SOGoCalendarComponent -contentAsString]): we return the content
2305 based on the permissions returned by the security manager instead
2306 of by looking at the user roles.
2308 * SoObjects/Appointments/SOGoAppointmentFolder.m
2309 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
2310 folders of the user to whom this folder belongs instead of the
2311 active user. This way, a delegate user will be able to have the
2312 same view that the original user has if he connects from his user
2315 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
2316 user exists before creating the SOGoUserFolder instance. If not,
2319 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
2320 return the message source code in plain text.
2322 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2323 -contentAsString]): returns the message encoded in UTF8.
2325 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2327 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
2328 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
2329 leading tagname into account when serializing the element values.
2331 * Main/SOGoProductLoader.m: only load bundle directories ending
2332 with the "SOGo" extension.
2334 * Main/SOGo.m ([SOGo
2335 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
2336 result set if the query has caused no exception. Otherwise we get
2337 an "evaluation is in progress exception".
2339 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2341 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2342 -generateSQLForInsert]): initialize error to nil before the
2343 serialization. Otherwise the method can get confused if it ever is
2344 initialized to something else.
2346 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
2347 -folderIsMandatory]): returns NO unconditionnally.
2349 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2350 -appendPersonalSources]): add the "personal" folder to the list of
2351 user folders even if it doesn't exist, so that it is created when
2352 the user accesses it.
2354 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2355 -folderIsMandatory]): returns YES if nameInContainer is set to
2356 "personal", which is the default address book.
2358 * SoObjects/Appointments/SOGoAppointmentFolder.m
2359 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
2360 users must have one Calendar folder (one and only one).
2361 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
2362 escaping '\' so make the carriage return a real one. This way,
2363 PgSQL 8 won't complain about escaping the string.
2365 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
2366 method that create the folder if considered mandatory.
2367 ([SOGoFolder -folderIsMandatory]): new method that determines
2368 whether the folder should be created automatically or not. To be
2369 overriden by subclasses.
2371 * Main/SOGo.m ([SOGo -run]): override method and create the
2372 missing system tables if needed.
2374 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2376 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
2377 -mailDateFormatter]): returns the user's date formatter.
2379 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
2380 applies the user timezone to the date object before returning it.
2382 * UI/Common/UIxSortButton.m: removed useless class module.
2384 * UI/Common/UIxSortableTableHeader.m: removed useless class
2387 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2388 -contactInfos]): use the "asc" url parameter instead of "desc" to
2389 determine the ordering.
2390 ([-sortOrdering]): removed method.
2391 ([UIxContactsListView -init]): removed the "searchText" ivar.
2392 (general): the template no longer use the UIxSortableTableHeader
2395 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
2396 -defaultSortKey]): default sort following the messages arrival
2397 instead of their date.
2398 ([-isSortedDescending]): removed method.
2399 ([-imap4SortOrdering]): use the "asc" url parameter instead of
2400 "desc" to determine the ordering.
2401 (general): the template no longer use the UIxSortableTableHeader
2404 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2406 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
2408 ([-setQualifier:_msg], [-qualifier]): removed methods.
2409 ([UIxMailListView -defaultAction]): added code to handle the
2410 search criteria and value passed as url parameters. Also, we now
2411 handle the same search criterias as Thunderbird/Icedove.
2413 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2415 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
2416 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
2417 the string instead of the string itself.
2418 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
2420 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
2421 bool var "acceptAnyUser" that is set when the AuthenticationMethod
2422 user default is nil.
2423 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
2424 unconditionnally returns an instance whenever acceptAnyUser is set.
2426 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2428 * Main/sogod.m (main): prevent SOGo from running as root.
2430 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2432 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2433 -setCurrentPassword:newPassword]): new stub method.
2434 ([SOGoUser -dateFormatterInContext:context]): new method that
2435 returns an instance of SOGoDateFormatter configured based on the
2438 * UI/Common/UIxPageFrame.m ([UIxPageFrame
2439 -relativePreferencesPath]): new method.
2441 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
2442 removed useless method.
2444 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
2445 different configurable formats (long and short date + time).
2447 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
2449 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2450 -isInternetRequest]): removed method.
2452 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2453 -jsonRepresentation]): new method with an explicit name.
2455 * UI/PreferencesUI/product.plist: new bundle that provides a web
2456 ui for handling user defaults.
2458 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
2460 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
2462 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
2464 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2466 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
2468 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2470 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
2471 -compareEventsAscending:otherEvent]): no longer use compare: on
2472 the time objects since one of them could be an NSNull, which
2473 crashes when comparing with anything.
2475 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2476 -eventsListAction]): sort events from here.
2477 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
2479 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
2480 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
2482 * SoObjects/Appointments/SOGoAppointmentFolder.m
2483 ([SOGoAppointmentFolder
2484 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
2485 no longer sort elements from here.
2487 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2489 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2490 -aclsForUser:uid]): implemented method by forwarding the request
2491 to the container. This fixes a bug where users could no longer
2492 read emails from shared folders.
2494 * SoObjects/Appointments/SOGoCalendarComponent.m
2495 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
2496 here, but rather in its parent class.
2498 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
2499 -stringForSecondsSinceThe70s:seconds]): new utility method.
2501 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2502 -eventsListAction]): no longer reduce the end day of one day for
2503 all day events since everything has been fixed in
2504 OCSiCalFieldExtractor.
2506 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2507 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
2508 the end date of all day events of 1 so that they stay on their
2511 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2513 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
2515 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
2517 ([-fetchCoreTasksInfos]): removed method.
2519 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2520 -init]): initialize an instance of SOGoDateFormatter.
2521 ([UIxCalListingActions -eventsListAction]): the display start and
2522 end dates are added to the listing for each event.
2524 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
2526 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2527 -isAllDay]): returns YES if the "hm" url parameter is set to
2529 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
2530 is displayed one day earlier.
2532 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2534 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2535 -_setupContext]): take the range of dates specified by the popup
2538 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
2539 WODirectAction that returns WOResponse objects with the events or
2540 todos satisfying the parameters passed in the url.
2542 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2543 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
2544 "isAllDay" into account and compute the amount of days to pass to
2547 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
2549 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
2550 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
2551 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
2552 new method that returns a json-formatted array of the visible tasks
2553 for the current user.
2555 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2557 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
2558 object must be present in the list of UIDs we delete the object
2559 from. Otherwise Calendar objects having no organizer and no
2560 attendees will remain in their owner's Calendar.
2562 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2563 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
2564 first 3 elements of the path array if the url returned by
2565 baseURLInContext: returns a hostname.
2567 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2568 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
2569 nil, in which case a crash happens when calling hasPrefix:.
2570 ([SOGoMailFolder -_sharesACLs]): same as above.
2571 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
2572 otherUsersFolderName is nil, we return nil.
2573 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
2574 nil from [self otherUsersPathToFolder], we return nil too.
2576 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2578 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2579 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
2580 the result of [self baseURLInContext:] to avoid a double escaping
2581 in the resulting string.
2583 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
2584 the user has the "ObjectReader" role on the parent container, then
2585 he is granted the "ObjectViewer" role on this object. Same for
2586 "ObjectEraser", although this might change later.
2588 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2589 -toolbar]): determine the toolbar filename based on the
2590 permissions declared by the securitymanager. The role mechanism
2591 has been adjusted on a lowerlevel so we can simplify the code.
2593 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2594 -initWithName:newNameinContainer:newContainer]): read the content
2595 directly from here. That way we can determine whether the object
2597 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
2598 the ObjectCreator role is enabled, we also grant the ObjectEditor
2599 role to the current user.
2601 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
2602 changed the method paradigm to only return HTTP code 204. Not test
2603 is done whatsoever since the security manager does it for us.
2605 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
2606 removed method because the same exists in UIxFolderActions.m
2608 * UI/Contacts/UIxContactsUserRightsEditor.m
2609 ([UIxContactsUserRightsEditor
2610 -setUserCanReadObjects:userCanReadObjects]): new method.
2612 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
2613 "FolderEraser" and special permission "Access Object". Removed
2614 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
2615 can be used instead. Removed "FolderReader" since it is useless.
2617 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2618 -vCard]): directly use the "content" ivar since it is initialized
2619 during object creation.
2621 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2622 ([SOGoContactLDAPFolder -init]): no longer handle the
2623 nameInContainer no the container ivars. They were removed because
2624 this class is a descendant of SOGoObject which already has them.
2625 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
2626 returning "displayName".
2627 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
2630 * SoObjects/Appointments/SOGoCalendarComponent.m
2631 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
2632 ([SOGoCalendarComponent -findParticipant:user]): new name for
2633 method "participant:".
2634 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
2635 findparticipant but taking a uid string as parameter.
2636 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
2637 iCalendar automatically. Instead, this is done only when the user
2638 is a "date and time viewer".
2639 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
2640 (modifier and responder) into account by compiling them with the
2643 * SoObjects/Contacts/SOGoContactFolder.h: removed
2644 "nameInContainer" from the list of required methods.
2646 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
2647 -davContentType]): returns "text/calendar".
2649 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2650 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
2651 groupdav resource-type.
2653 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2654 -davContentType]): same as below.
2656 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2657 -initWithName:newNameinContainer:newContainer]): new overriden
2658 method setting the custom owner directly.
2660 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2661 -davContentType]): same as below.
2663 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2664 -davContentType]): same as below.
2666 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
2667 declare "httpd/unix-directory".
2669 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
2670 "UTC" as fallback timezone instead of "Canada/Eastern".
2671 ([-hasEmail:email]): make use of the new NSArray's
2672 containsCaseInsensitiveString: method.
2674 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2675 -davContentType]): declare "message/rfc822" as content type.
2677 * SoObjects/Appointments/SOGoAppointmentFolder.m
2678 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
2680 ([SOGoAppointmentFolder
2681 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
2682 ([-fetchContentObjectNames]): commented out method since it was
2683 usefull only for testing Funambol.
2685 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
2686 -containsCaseInsensitiveString:match]): an enhanced version of
2689 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
2691 ([-showMarkDeletedButton]): removed useless method.
2692 ([-showTrashButton]): removed useless method.
2694 * SoObjects/Appointments/iCalEntityObject+SOGo.m
2695 ([iCalEntityObject -userIsParticipant:user]): new proxy method
2696 that invoked isParticipant on self for each possible email
2697 addresses of the user passed as parameter.
2698 ([iCalEntityObject -userIsOrganizer:user]): same as above.
2700 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
2703 * SoObjects/Appointments/SOGoAppointmentObject.m
2704 ([SOGoAppointmentObject
2705 -saveContentString:contentStringbaseVersion:baseVersion]): remove
2706 method since an event may not have an organizer.
2708 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2709 -GETAction:localContext]): clarified method. Added support for
2710 content-type (thanks to Helge Hess).
2711 ([SOGoObject -initWithName:_nameinContainer:_container]):
2712 initialize and retain the owner.
2713 ([SOGoObject -davContentType]): returns "text/plain".
2715 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2717 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2718 -addUserInAclsAction]): send an acl addition mail.
2719 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
2722 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2723 -_realActionWithFolderName:folderDict]): handle the possible
2724 presence of the "mail-invitation" url parameter. If present, the
2725 user will be redirected to the relevant folder.
2727 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
2728 ([SOGoUser -language]): new method that returns the user's
2729 preferred language, or the system's if none has been set yet.
2731 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
2732 that returns the full dav url to self.
2733 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
2734 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
2735 returns the full so url to the base of the SOGo module to which
2736 self belongs, and for the specified user.
2737 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
2738 but for the current user.
2739 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
2740 required by the acl advisory templates and which returns a link
2741 the target user can click to activate its new subscription.
2742 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
2743 but for inclusion of the application/x-sogo-notification part,
2744 which will be handled by the Lightning enhancer plugin.
2746 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
2747 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
2748 do nothing yet since imap folder subscription is not handled yet.
2750 * SoObjects/SOGo/SOGoContentObject.m
2751 ([-hasSupportForDefaultRoles]): removed method.
2753 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2754 -getFullEmailForUID:uid]): new method that returns the username +
2757 * SoObjects/Appointments/SOGoCalendarComponent.m
2758 ([SOGoCalendarComponent +initialize]): the default language for
2759 mail templates is now set to English.
2761 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
2762 SOGoACLAdvisory implementing the french template for user removal
2765 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
2766 SOGoACLAdvisory implementing the french template for user
2769 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
2770 SOGoACLAdvisory implementing the english template for user removal
2773 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
2774 SOGoACLAdvisory implementing the english template for user
2777 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
2778 supercall of all the acl advistory templates. The model is based
2779 on SOGoAptMailNotification except that the template encapsulates
2780 the message to be sent. Later, we might create a superclass common
2781 to all template-based emails.
2783 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2784 -addRange:newRange]): new method that store a string
2785 representation of the NSRange passed as parameter.
2786 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
2787 any range contained in self intersect with the one passed as parameter.
2789 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
2790 store ranges in an array to prevent them from intersecting with
2791 each other during the passes.
2793 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2795 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2796 -primaryFetchMailboxInfo]): useless method. Removed.
2798 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2800 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2801 -toManyRelationshipKeys]): invoke [self subfolders].
2802 ([SOGoMailFolder -subfolders]): new method containing what used to
2803 be in toManyRelationshipKeys.
2804 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
2807 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2808 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
2809 named and at the beginning of which we put the predefined folders.
2811 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2812 -emptyTrashAction]): new method inspired by a similar one from
2813 UIxMailListView, to which we added the ability to remove
2816 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
2817 method. Replaced with a similar one in UIxMailFolderActions.
2819 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2820 -renameFolderAction]): implemented method.
2821 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
2822 specified folder. Instead, we put it in the trash folder.
2824 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
2825 method, replaced with a similar method in the new
2826 UIxMailFolderAction class module.
2827 ([-deleteFolderAction]): idem.
2829 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2830 -createFolderAction]): new method implementing subfolder creation.
2831 ([UIxMailFolderActions -renameFolderAction]): new method
2832 implementing subfolder renaming (basic implementation to be
2834 ([UIxMailFolderActions -deleteFolderAction]): new method
2835 implementing folder deletion.
2837 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
2838 web actions related to the handling of imap folder.
2840 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2842 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2843 -ownerInContext:localContext]): overriden method because we are an
2844 IMAP4 client and we need a bit more intelligence to deduce the
2845 owner of the current folder.
2846 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
2847 return an NSException so we need to be careful here to avoid a
2849 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
2850 NSException so we need to be careful here to avoid a crash.
2852 * SoObjects/Mailer/SOGoMailAccounts.m
2853 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
2854 there is no longer any concept of Intranet or Internet connection
2857 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2858 -sharedFolderName]): new method.
2859 ([SOGoMailAccount -otherUsersFolderName]): new method.
2861 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
2862 new javascript code and the new UIxMailAccountActions class.
2864 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
2865 javascript code and the new UIxMailAccountActions class.
2867 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
2868 new javascript code and the new UIxMailAccountActions class.
2870 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2871 -listMailboxesAction]): new method that returns a json-formatted
2872 tree of all the mailboxes available to the current user.
2874 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
2875 web actions related to the handling of mail accounts.
2877 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
2880 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
2881 -jsonRepresentation]): new interface method meant to be overriden
2882 by the primitive classes.
2884 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2886 * UI/MailerUI/UIxMailSplashView.m: removed.
2888 * SoObjects/Appointments/SOGoCalendarComponent.m
2889 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
2890 the uid to the list only when the user email is recognized by the
2893 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2895 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2896 -isDeletionAllowed]): completed method with the new imap acl api.
2898 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
2901 * SoObjects/SOGo/SOGoPermissions.m: added the new role
2902 "SOGoMailRole_MessageEraser".
2904 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
2905 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
2906 "defaultUserID" method into account.
2908 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
2909 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
2910 "defaultUserID" method into account.
2912 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
2913 methods to support the IMAP acls mentionned in the RFC 4314,
2914 removed the ones specific to Cyrus.
2916 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
2917 mandatory method for subclasses. Removed the SOGoDefaultUserID
2920 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
2921 overriden method to return @"<default>".
2923 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2924 -defaultUserID]): overriden method to return @"<default>".
2926 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2927 -aclsForUser:uid]): overriden method.
2928 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
2929 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
2930 ([SOGoMailFolder -defaultUserID]): overriden method.
2931 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
2933 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2935 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2936 -aclUsersForObjectAtPath:objectPathArray]): new method that being
2937 forwarded the calles to aclUsers for the GCS-based subclasses of
2940 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
2941 methods that would have been used to support IMAP acls. Replaced
2942 them with the new protocol for them that has been implemented in
2943 SOGo during the last few weeks.
2945 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2946 -hasSupportForDefaultRoles]): override method by returning "YES".
2948 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2949 -addObjectUniquely:object]): new method with an explicit name.
2951 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
2952 "acl" to "aclUsers". Now designed to return only the uid of the
2953 users involved in an ACL.
2954 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
2955 "NO" by default. To indicate to the acl editor that we don't want
2956 to handle a default user.
2958 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
2959 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
2962 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
2963 provides a view to the IMAP acls.
2965 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
2967 * UI/WebServerResources/MailerUI.js: replaced all invocations of
2968 addEventListener to the use of prototype's Event object. Also,
2969 configured all menus programmatically following descriptions lists
2970 containing their callbacks, or nulls, submenus id or separators.
2972 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2974 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2975 -addUserInAclsAction]): save the previous roles of the user
2976 (unlikely) or the default roles, or None instead of saving the
2977 roles that should appear the first time in the role editor when no
2978 default has been set...
2980 * SoObjects/SOGo/SOGoObject.m: defined a new constant
2981 "SOGoDefaultUserID".
2983 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2984 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
2985 ignore the "AuthorizedSubscriber" role and add the "None" role
2986 when no other role is found.
2988 * UI/Common/UIxAclEditor.m: added a button for the new default
2991 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2992 -_initRights]): don't take the "None" role into account when
2993 initializing the list of current roles.
2995 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
2998 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3000 * SoObjects/SOGo/NSString+Utilities.m ([NSString
3001 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
3002 There is no need to subscract the start from the length if a space
3003 is not found since the range has not changed either. Finally, the
3004 first character before the url might also be a tab or a cr, so we
3005 match it against the "urlAfterEndingChars" custom NSCharacterSet.
3006 ([NSString -stringByDetectingURLs]): modified to handle email
3007 addresses and add a correct "mailto:" link.
3009 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3011 * SoObjects/Appointments/SOGoAppointmentFolder.m
3012 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
3013 method to return the events in the range of 2 weeks ago up to 4
3016 * UI/MailPartViewers/UIxMailPartTextViewer.m
3017 ([UIxMailPartTextViewer -flatContentAsString]): use the new
3018 "stringByDetectingURLs" method to offer clickable urls.
3020 * SoObjects/SOGo/NSString+Utilities.m ([NSString
3021 -stringByDetectingURLs]): this new method replaces passive URLS
3022 with active ones for HTML resolution of the text.
3024 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3026 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3027 -asQPSubjectString:encoding]): simplified method.
3028 The headers indicates "utf-8" again thank to our fix in
3031 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
3034 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3036 * UI/Common/UIxObjectActions.m ([UIxObjectActions
3037 -removeUserFromAclsAction]): implemented this method which was
3038 missing and is required to remove users from ACLs.
3040 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3041 -subscribeAction]): folderDict was not autoreleased, resulting in
3044 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3045 -primaryFetchProfile]): when building with libFoundation, don't
3046 use the "propertyList" method from NSString. Rather, we convert
3047 the string to an NSData instance and passit as parameter to
3048 NSDeserializer. This way, we obtain a mutable dictionary rather
3049 than an immutable one.
3051 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
3052 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
3053 constant string "contentTypeValue".
3054 contentTypeValue is now set back to iso-8859-1 since NGMime
3055 converts extracts the data in that encoding.
3057 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3059 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
3060 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
3061 "bindFields" value is present in the user defaults, use the
3062 specified fields to find the dn of the user to bind.
3063 ([LDAPSource -allEntryIDs])
3064 ([LDAPSource -fetchContactsMatching:match])
3065 ([LDAPSource -lookupContactEntry:entryID])
3066 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
3067 bind and unbind the connection on each request.
3069 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
3071 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3072 -contactSearchAction]): simplified method to use the facilities
3073 provided by the LDAPUserManager. No longer takes care of the
3074 "ldap-only" url parameter since all requests are handled by the
3077 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3078 -primaryFetchProfile]): check that the value returned is not null
3079 before interpreting it.
3081 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
3082 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
3083 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
3084 system email is already present, remove it before adding it.
3086 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
3087 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
3088 loginToCheck is not empty.
3089 ([LDAPSource -fetchContactsMatching:match]): check that match is
3091 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
3093 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
3096 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3098 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
3100 ([SOGoUser -systemEmail]): returns the email formed from the
3101 username and the default mail domain.
3102 ([SOGoUser -hasEmail:email]): test whether the user has the
3103 specified email, in a case-insensitive way.
3105 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3106 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
3107 check login information.
3109 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3110 ([SOGoContactLDAPFolder
3111 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
3112 no longer manage LDAP connections. The requests are forwarded to
3113 the relevant LDAPSource instead.
3115 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3116 -appendSystemSources]): pass LDAPSource objects to
3117 SOGoContactLDAPFolder instances.
3119 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
3120 address of the "from" field before sending the message. Otherwise,
3121 sending the mail won't work.
3123 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
3124 rewrote this method to request all the available email identities
3125 for the current user. Also, the from field also contains the full
3126 name of the user, not just his/her email address.
3128 * SoObjects/Appointments/SOGoCalendarComponent.m
3129 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
3130 from the previous module iCalEntityObject+Agenor.
3131 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
3132 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
3135 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
3136 replacing the SOGoContactLDAPEntry module. It was renamed as such
3137 because it now receives a dictionary instead of an NGLdapEntry.
3138 It thus can now handle data from any source of LDIF data, not
3139 only coming from LDAP.
3141 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
3142 implementing most of what used to be the AgenorUserManager class.
3143 The difference is that users are cached in the forme of
3144 dictionaries and many sources are used. Also, it can be used to
3145 search LDAP contacts.
3147 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
3148 the concept of "ldap source", to be used by all the classes
3149 needing access to LDAP-provided information: addressbooks and the
3150 user manager. Most the method thereing are transcriptions of
3151 methods previously found in SOGoContactLDAPFolder. It also contain
3152 utility methods for user matching and authentification.
3154 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
3155 module, rendered useless by code refactoring.
3157 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
3158 with the freshly written "LDAPUserManager".
3160 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3162 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
3163 SOGOContactLDIFEntry.
3165 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
3166 module, obsoleted by code in SOGo/LDAPSource.[hm].
3168 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3170 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
3171 new method with an explicit name.
3173 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3175 * SoObjects/Appointments/SOGoCalendarComponent.m
3176 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
3177 replacing "isOrganizer:orOwner:" by taking only one instance of
3178 SOGoUser as parameter.
3179 ([SOGoCalendarComponent -participant:user]): new method replacing
3180 the previous "isParticipant" boolean method by returning the first
3181 participant matching the user passed as parameter. This method is
3182 used so that both the regular email address and the "system email
3183 address" of the user are matched against the participants emails.
3185 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3186 -getSystemEMailForUID:uid]): new method that returns the email
3187 formed with the user's uid and the default mail domain.
3189 * SoObjects/Appointments/SOGoCalendarComponent.m
3190 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
3191 was previously commented out.
3193 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
3194 forwared to [AgenorUserManager getSystemEmailForUID:].
3196 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3197 -toolbar]): method replacing the one with the same name in the
3198 task and appointment editor classes. This method makes also use of
3199 the new method "isOrganizerOrOwner:" and "participant:" in
3200 SOGoCalendarComponent.
3202 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3203 -toolbar]): removed method, replaced with a method with the same
3204 name in UIxComponentEditor.
3206 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
3207 method, replaced with a method with the same name in
3210 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3211 -primaryFetchProfile]): the values returned from the database are
3212 converted to a put dictionary first, since the dictionary returned
3213 is actually an immutable one, which can cause a crash afterwards.
3215 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3217 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
3218 and "SOGoRole_ObjectEditor".
3220 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
3221 -prepareRightsForm]): this method is no longer mandatory.
3223 * UI/Contacts/UIxContactsUserRightsEditor.m
3224 ([UIxContactsUserRightsEditor
3225 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
3226 module to handle acls related to the address books. Partial
3229 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3230 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
3233 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
3234 specified roles from cache.
3235 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
3236 put resulting roles in cache.
3238 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
3239 initWithName:inContainer:. Instead, directly initialize the ivars
3240 as it is supposed to be to avoid an infinite loop whenever one of
3241 those two methods are overriden.
3243 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
3246 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3247 -aclsForUser:uid]): override method so that SOGo won't crash when
3248 loading the contact card.
3250 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3252 * SoObjects/Appointments/SOGoAppointmentFolder.m
3253 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
3254 "freebusy" special user should only require opaque elements.
3256 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3258 * SoObjects/Appointments/SOGoAppointmentFolder.m
3259 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
3260 our double declaration where the resulting XML would be screwed.
3261 There is only one collection per namespace.
3263 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
3264 rfc822DateString]): new method that returns a string conform to
3265 rfc 822 and suitable for email headers.
3267 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
3268 "rfc822DateString" category method on the date we put in the
3271 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3273 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
3274 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
3275 which should never be overriden.
3276 ([UIxUserRightsEditor -appendRight:newRight])
3277 ([UIxUserRightsEditor -removeRight:right])
3278 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
3279 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
3280 methods that can be used by the subclasses.
3281 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
3282 mandatorily be overriden to prepare the elements of the subclassed
3284 ([UIxUserRightsEditor -updateRights]): new method that should
3285 mandatorily be overriden to update the user rights from the
3286 elements of the subclassed form.
3288 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
3289 check if the uid is already listed before adding it to our array.
3290 This is because the acl table can contain more than one record per
3291 user/object relationship.
3293 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3294 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
3295 "roles" parameter is now an NSArray instead of a string. Therefore
3296 we loop throughout the array to populate the table. All the
3297 relevant records are removed prior to the addition of the new
3300 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
3301 -aclsForUser:uid]): new override that returns nil until we add
3302 support for IMAP acls.
3304 * SoObjects/Mailer/SOGoMailAccounts.m
3305 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
3307 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3308 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
3310 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3311 -aclsForUser:uid]): override this method which will always return
3314 * SoObjects/SOGo/SOGoPermissions.[hm]: added
3315 [Public,Private,Confidential]
3316 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
3317 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
3318 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
3320 * SoObjects/Appointments/SOGoAppointmentFolder.m
3321 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
3322 that defines default roles for new elements in the acl.
3324 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
3325 module and subclass of UIxUserRightsEditor specific to the
3326 handling of user rights on calendar folders.
3328 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3330 * SoObjects/Appointments/SOGoAppointmentFolder.m
3331 ([SOGoAppointmentFolder -groupDavResourceType]): return both
3332 "vevent-collection" and "vtodo-collection".
3334 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
3335 that implements the detailed editor of user rights per-object.
3337 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3339 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3340 -rolesForObject:objectinContext:context]): no longer query objects
3341 for "roleForUser:". Instead, all objects should implement
3344 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
3345 new method to comply with the new acl "protocol" in SOGoObject.
3346 Uses SOGoFolder's new facilities for ACLS.
3347 ([SOGoContentObject -aclsForUser:uid]): idem.
3348 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
3349 ([SOGoContentObject -removeAclsForUsers:users]): idem.
3351 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3352 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
3353 based folders. This method is derived from the code that was in
3354 UIxAclFolder before its removal.
3355 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
3358 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
3360 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
3361 ([SOGoFolder -setRoleForUsers:uidsto:role])
3362 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
3364 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
3365 that requires overriding by subclasses.
3366 ([SOGoObject -aclsForUser:uid]): idem.
3367 ([SOGoObject -defaultAclRoles]): idem.
3368 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
3369 ([SOGoObject -removeAclsForUsers:users]): idem.
3371 * UI/Common/UIxObjectActions.m: new module implementing the web
3372 actions common to SOGoObject and all its subclasses.
3373 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
3374 user with the clientObject defaults user rights to the object's
3377 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
3378 to the point where it will only list the users (and their name)
3379 associated with an object acl.
3381 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
3382 methods have been moved into SOGoObject and SOGoFolder during a
3385 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3386 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
3387 method made useless by the programmatic handling of iCalendar
3389 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
3390 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
3391 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
3393 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
3394 drop on all folder nodes, not just on leaves.
3396 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3397 ([SOGoContactLDAPFolder
3398 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
3400 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3402 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
3403 debugging facilities when the SOGoDebugObjectAllocation user
3406 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3408 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
3409 method that SOGo will need with non-gnustep Foundation
3411 ([NSString -stringByAppendingPathComponent:component]): new method
3412 that SOGo will need when building with libFoundation. Method
3413 removed later since it is available from
3414 Foundation/NSPathUtilities.h.
3416 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
3419 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
3420 every subclass to access [WOApplication context] without having to
3421 invoke it more than once.
3423 * SoObjects/Appointments/SOGoCalendarComponent.m
3424 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
3425 moved method from SOGoTaskObject and SOGoAppointmentObject up to
3428 * UI/Scheduler/UIxCalSelectTab.m: removed module.
3430 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3432 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
3433 -vCard]): test the prefix of the card in a case-independent way.
3435 * OGoContentStore/OCSContactFieldExtractor.m
3436 ([OCSContactFieldExtractor
3437 -extractQuickFieldsFromContent:content]): we no longer accept
3438 records in a format other than versit vCard so we can get rid of a
3441 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3443 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3444 -selectorComponentClass]): restored method.
3446 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3448 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
3449 -shouldDisplayCurrentTask]): the current task is not displayed if
3450 it is NOT completed or if the "showCompletedTasks" flag is set.
3451 The logic was inverted in Lightning and is now in SOGo too.
3453 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3455 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
3456 want the "work" url instead of the "home".
3458 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3459 -_saveSnapshot]): save url values from snapshot.
3460 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
3462 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3463 -calendarList]): new method replacing "availableCalendars".
3465 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
3466 -calendarFolders]): we now take the list of subscribed calendar
3469 * SoObjects/Appointments/SOGoAppointmentFolder.m
3470 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
3471 method derived from and replacing [UIxCalView calendarFolders].
3473 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3475 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3476 -toManyRelationshipKeys]): don't put the predefined folders in the
3477 list if they are returned by the server.
3479 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
3480 longer store the "flattenedBlocks" in a dictionary since the
3481 object will be deleted anyway and we don't need to put the folders
3484 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3485 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
3486 attachment path into account when computing the part urls.
3488 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3490 * UI/Contacts/UIxContactsListViewContainer.m
3491 ([UIxContactsListViewContainer -additionalFolders]): take the list
3492 of subscribed folders from the new property list used for the user
3493 settings. The value of its key is SubscribedFolders for the
3494 dictionary entry named "Contacts".
3496 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3497 -canAccessContentAction]): new method to override the one from
3498 UIxFoldersActions by taking into account the fact that, this time,
3499 the clientObject is an ldap folder. Removed many method that used
3500 to be related to the handling of the user selector.
3502 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
3503 to make sure they can be removed.
3505 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
3506 populate the calendar entries based on the user settings plist.
3508 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3509 -selectForMailerAction]): restored method.
3511 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
3512 from a simplified version of the old UIxContactEditor (removed).
3514 * UI/Contacts/UIxContactsUserFolders.m: new template module for
3515 selecting users or user folders through an LDAP search of which
3516 the results are displayed as a tree.
3518 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
3519 method "onContactAdd" here since the Mailer is now the only module
3520 to use it when composing emails.
3522 * UI/WebServerResources/generic.js: added code for handling the
3523 new scheme used for describing SOGo folders, common code to handle
3524 folder addition or removal.
3526 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3527 -activateFolderAction]): new method that change the "active"
3528 settings in the folder-related fields in the user settings.
3529 ([UIxFolderActions -deactivateFolderAction]): see above.
3531 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3532 -checkRightsAction]): removed method.
3534 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3535 -updateAdditionalAddressBooksAction]): removed method.
3537 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3538 -updateCalendarsAction]): removed method.
3540 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3542 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3543 -checkRightsAction]): removed method.
3545 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3546 -canAccessContentAction]): new method designed to replace
3547 [UIxCalMainView checkRightsAction] in a more universal way.
3549 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3551 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3552 -roleOfUser:uidinContext:context]): take all the subkeys into
3553 account, not only the "personal" folder.
3555 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3556 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
3557 to the new components.
3559 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
3562 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3563 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
3564 field of the sogo_user_profile table, where the user-customizable
3565 changes will be saved.
3566 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
3567 similar to the one above, using the "settings" field where the
3568 automatic settings will be saved.
3570 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
3571 module to bind the userdefaults to a property list contained in a
3572 specified field of the sogo_user_profile table.
3573 ([AgenorUserDefaults
3574 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
3575 added a "fieldName" parameter.
3577 * UI/Common/UIxFolderActions.m: new module implementing web
3578 actions common to all GCS-based folders.
3580 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3582 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
3583 put a carriage return after the day name.
3585 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3586 -readFreeBusyAction]): restored method.
3588 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3590 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3591 -defaultAction]): remade module to redirect automatically to the
3594 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
3596 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3598 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3599 -deleteAction]): new web method to delete personal addressbook
3602 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3603 -delete]): override method to refuse the deletion of the folder if
3604 its nameInContainer is "personal".
3606 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
3607 that forwards the deletion request to the folder manager.
3609 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3611 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
3612 -zoomList]): new method that returns the list of available zoom factors.
3614 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3615 -changeStatusAction]): rewrote method.
3617 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3618 -_handleAttendeesEdition]): make sure "attendeesNames" has a
3619 length > 0 before computing the attendees. Otherwise there will be
3620 an invalid empty entry.
3621 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
3622 organizer when there are attendees and remove it when the
3623 attendees are removed.
3625 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3627 * UI/Scheduler/UIxAttendeesEditor.m): new component.
3629 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
3630 the task and appointment editors. Now a container component
3631 handling the common elements of tasks and events.
3633 * UI/Scheduler/UIxTaskEditor.m: same as below.
3635 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
3636 a subclass of UIxComponentEditor but a subcomponent of it.
3638 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
3639 toolbar can have the special value "none" to indicate there is
3640 none attached to the window.
3642 * SoObjects/Appointments/SOGoCalendarComponent.m
3643 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
3645 ([SOGoCalendarComponent -isParticipant:email]): new method.
3646 ([SOGoCalendarComponent -calendar:create]): takes one parameter
3647 "create" which is a boolean indicating whether we want to create
3648 the calendar if it does not exist.
3650 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3652 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
3653 of a table, the same way the dayly and weekly views have been for
3656 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
3658 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
3661 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
3662 property to point at the user folder
3664 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3666 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3667 -userInContext:]): returns "SOGoUser".
3669 * SoObjects/Appointments/SOGoCalendarComponent.m
3670 ([SOGoCalendarComponent -contentAsString]): overriden method that
3671 takes the privacy into account and discard the relevant fields if
3672 needed by generating a new content string and caching it.
3673 ([SOGoCalendarComponent
3674 -saveContentString:contentStringbaseVersion:baseVersion]): if the
3675 new method above has cached a content string, release it and set
3676 it to nil so that it will have to be regenerated in the case it is
3678 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
3679 discard the fields that have to be hidden when the card is
3682 * SoObjects/Appointments/SOGoAppointmentFolder.m
3683 ([SOGoAppointmentFolder
3684 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
3685 sure the cards are now handled as instances of
3686 SOGoCalendarComponent instead of SOGoContentObject so that their
3687 content string is taking the privacy classifiction into account.
3688 ([SOGoAppointmentFolder -_privacySqlString]): new method that
3689 generates a query to determine what information can be given and
3690 if the card itself has to be shown.
3692 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3693 -getICalPersonsFromValue:selectorValue]): removed useless
3694 "isAccessRestricted" method.
3696 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3697 -setStyle:_style]): test whether the values of orgmail and
3698 partmails are null before manipulating them, otherwise SOGo sends
3699 a "rangeOfString:" message to an NSNull, which makes it crashes.
3701 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3702 -extractQuickFieldsFromEvent:_event]): we now use the new
3703 "symbolicAccessClass" method from iCalEntity to determine the
3704 value of the "classifiction" field.
3705 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
3708 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3710 * SoObjects/Appointments/SOGoAppointmentFolder.m
3711 ([SOGoAppointmentFolder
3712 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
3713 see below, the query is adapted consequently.
3715 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3716 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
3717 renamed to "classification" and can any integer as value.
3718 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
3721 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3723 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3724 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
3725 don't prepend anything to the class and id named. Instead, we
3726 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
3729 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3731 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
3732 -rolesOfUser:logininContext:context]): if object does not exists
3733 (for example when it's being created), the current user has the
3734 same rights on it than he/she has on its parent container.
3736 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3737 -nameExistsInFolder:objectName]): methods that tests if a c_name
3738 corresponding to the name passed as parameter is present in the db
3741 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3743 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3744 -rolesForObject:objectinContext:context]): test for
3745 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
3747 * SoObjects/Appointments/SOGoCalendarComponent.m
3748 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
3749 returns the roles of the user on the container object if the event
3752 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3754 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
3755 alternativeViewer a multipart/related message is being handled.
3757 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
3760 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
3761 text/html component before text/plain.
3763 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3764 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
3765 fetching of HTML parts.
3767 * SoObjects/Appointments/SOGoCalendarComponent.m
3768 ([SOGoCalendarComponent -componentTag]): new template method that
3769 returns the vcalendar tag of the current object.
3770 ([SOGoCalendarComponent -component]): new method that returns the
3771 first object matching [self componentTag] within the current
3772 calendar object. This method replaces 'firstEventInCalendar:' as
3773 well as "firstTaskInCalendar:".
3774 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
3775 moved method from SOGoAppointmentObject.m.
3777 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3779 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
3780 module which shows each selected user's calendar in a different
3781 column instead of mixing their events together.
3783 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
3784 replaced use of [NSString stringByTrimmingWhiteSpaces] with
3785 [NSString stringByTrimmingSpaces].
3787 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
3788 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
3791 * UI/Scheduler/UIxCalDayOverview.m,
3792 UI/Scheduler/UIxCalDayChartview.m,
3793 UI/Scheduler/UIxCalDayListview.m,
3794 UI/Scheduler/UIxCalWeekOverview.m,
3795 UI/Scheduler/UIxCalWeekChartview.m,
3796 UI/Scheduler/UIxCalWeekListview.m,
3797 UI/Scheduler/UIxCalInlineMonthOverview.m,
3798 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
3800 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3802 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3803 -appendPersonalSourcesInContext:context]): release connectoin
3804 channel when everything is done.
3806 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3807 -newAbAction]): new action method to crate a new contact folder
3810 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
3811 that requests the folder manager to create a folder table with the
3812 specified type at the specified path. The type is taken from [self
3815 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3816 -folderType]): implemented.
3818 * SoObjects/Appointments/SOGoAppointmentFolder.m
3819 ([SOGoAppointmentFolder -folderType]): implemented.
3821 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3822 -appendPersonalSourcesInContext:context]): we now fetch all
3823 folders with type "Contact" that belong to the current user.
3824 ([SOGoContactFolders -newFolderWithName:name]): new method to
3825 create a new contact folder.
3827 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
3828 resulting url with [NSString+Utilities hostlessURL] instead of
3829 using NSURL. This is because the url in question sometimes has a
3830 hostname and sometimes not. "hostlessURL" ensure the hostname is
3832 ([UIxComponent -applicationPath]): same as above.
3834 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
3836 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
3837 folders before doing the one on messages.
3839 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3841 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
3842 makeObjectsPerform:withObject:withObject: for GNUstep
3845 * OGoContentStore/GNUmakefile, Protocols/common.make,
3846 SoObjects/common.make, UI/common.make: install in
3847 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
3849 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
3851 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
3854 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3856 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
3857 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
3860 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3861 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
3862 password would be accepted anyway as long as its length was > 0.
3863 This can be the case ONLY when LDAP is disabled otherwise we have
3864 a serious security issue...
3866 * SoObjects/Appointments/SOGoAppointmentObject.m
3867 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
3868 user is not an organizer nor a participant, he is declared as
3869 "Owner" if he owns the calendar the entry where the entry is
3870 contained. Other cases should not be possible.
3872 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3874 * UI/Contacts/UIxContactEditor.m: display and handle the new
3877 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3878 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
3881 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3882 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
3885 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3887 * SoObjects/Appointments/SOGoCalendarComponent.m
3888 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
3889 returns the value of ud "SOGoAppointmentSendEMailNotifications"
3891 ([SOGoCalendarComponent
3892 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
3894 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3896 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3897 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
3898 so that the mailbox cache is refreshed everytime the user presses
3899 on "get mail". I doubt a mailbox cache really is useful in general
3902 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3904 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3905 -userInContext:]): if the lookup is on "freebusy.ifb" and the
3906 username is "anonymous" the user is automatically set to
3909 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3911 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3912 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
3913 user with password "freebusy".
3915 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
3916 -contentAsString]): the default timerange is now 14 days before
3917 currentday and 1 month after.
3919 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3921 * SoObjects/Appointments/SOGoAppointmentFolder.m
3922 ([SOGoAppointmentFolder
3923 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
3924 escape the record string in a way suitable with XML encoding.
3926 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3928 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
3929 calendar view would not be updated properly.
3931 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3933 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3934 -newStartDate]): fix the handling of the component start date
3935 depending on the "hm" and the "day" parameters.
3937 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3938 -roleOfUser:uidinContext:context]): set role of current user to
3939 "Assistant" if the object that is accessed is "freebusy.ifb".
3941 * SoObjects/Appointments/SOGoAppointmentFolder.m
3942 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
3943 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
3944 ([SOGoAppointmentFolder
3945 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
3946 lookupCalendarFolderForUID: method, which doesn't do security
3949 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3951 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
3952 accessor that returns the comma-separated list of users with role
3954 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
3955 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
3956 "checkedUsers". Instead, each user is either classified in the
3957 list of assistants or the list of delegates.
3959 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3961 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
3962 -composeAction]): method imported from removed container modules.
3963 ([UIxMailMainFrame -mailFolderName]): method imported from removed
3966 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
3967 for wrapping UIxMailView with the "popupview" action.
3969 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
3970 since its the component that displays the same splash screen than
3971 the one in Thunderbird/Icedove.
3973 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
3974 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
3975 UI/MailerUI/UIxMailListViewContainer.[hm],
3976 UI/MailerUI/UIxMailViewContainer.[hm]: removed
3978 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3980 * UI/WebServerResources/HTMLElement.js: replaced the functional
3981 selectNode() and deselectNode() functions with select() and
3982 deselect() methods of HTMLElement.
3984 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
3985 events are initialized from here now instead of in the HTML code.
3987 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3988 -checkRightsAction]): new method similar to the one with the same
3989 name in UIxCalMainView.m.
3991 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
3992 code to handle the publishing of freebusy information.
3994 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3996 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3997 -checkRightsAction]): new action method that returns a
3998 comma-separated list of boolean values matching the right of the
3999 current user to "view" (as a permission) each foreign calendar
4000 stored in his preferences.
4002 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
4003 new method that sets a customOwner, which can be returned with
4004 ownerInContext it set.
4006 * SoObjects/Appointments/SOGoAppointmentFolder.m
4007 ([SOGoAppointmentFolder
4008 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
4010 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4012 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
4013 below, but for the Contacts and Calendar collections.
4015 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
4016 new acl facilities method from sope-gdl/GCSFolder.m.
4018 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
4019 -roleOfUser:uidinContext:context]): new method that returns
4020 SOGoRole_Assistant when the user is an assistant or a delegate on
4021 the "personal" ab object. This is so that setting roles on the
4022 SOGoContactFolders object is not required.
4024 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4026 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
4028 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
4029 to the handling of the user selection for the acls.
4031 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
4032 values from SoPermissions with ones specific to SOGo.
4034 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
4035 handles the storage for the acls.
4037 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
4038 class for SOGoAppointmentObject and SOGoTaskObject.
4040 * UI/Common/UIxAclEditor.[hm]: new component that provides a
4041 general editor for folder acls.
4043 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
4045 ([NSString -davMethodToObjC]): method that returns the method name
4046 for a DAV property implementation.
4048 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
4050 ([NSArray -stringsWithFormat:format]): new method that returns
4051 formatted occurences of the strings stored in the array.
4053 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
4054 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
4055 subclass module of SoWebDAVValue that supports collections of
4056 properties of the same type.
4058 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4060 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
4061 -lookupFolder:ofClassNamed:inContext:]): added the ability to
4062 configure the name of the SOGoDraftFolders with the ud var
4063 "SOGoDraftsFolderName".
4065 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4067 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
4068 -userTimeZone:username]): new method that returns the timezone for
4069 the specified user depending on his preferences and the server
4072 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
4073 -stringForData:partInfo:]): take the encoding into account and
4074 translate the text to "normal" before processing the charset data.
4076 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4078 * UI/WebServerResources/generic.js: the progress indicator is on
4079 when loading the page so we turn it off, and we turn it back on
4080 whenever we switch to another module...
4082 * UI/WebServerResources/SchedulerUI.js: make sure the day view
4083 synchronization mechanism works everywhere.
4085 * UI/WebServerResources/generic.js: the log window is not only
4086 visible when UIxDebugEnabled is set.
4088 * UI/WebServerResources/SchedulerUI.js: the month overview's day
4089 cells are now initialized with the DOM event interface methods
4090 instead of with html attributes.
4092 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
4093 headers (should be made configurable at some point)...
4095 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
4096 "not null" constraint on startdate, enddate, isopaque,
4097 participants and partmails.
4099 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4101 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
4102 -hoursToDisplay]): prevent a crash by retaining the
4103 "hoursToDisplay" array after it's created.
4104 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
4105 clickable hours DIV.
4107 * UI/WebServerResources/SchedulerUI.js: made the event
4108 participation status modification asynchronous, which also fixes a
4109 bug where the window would sometimes close before the accept or
4110 decline action was completed. Also, adapted the event handling
4111 related to the days or weeks view with the new DIV-based layout.
4113 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
4115 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
4116 DIV-based presentation of the days and weeks.
4118 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
4120 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
4121 might return an exception so we have to handle it if we don't
4124 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4126 * UI/WebServerResources/SchedulerUI.js: updated the list
4127 initialization code to use the new event management scheme, adding
4128 what was missing to be able to delete events and tasks again.
4130 * UI/WebServerResources/MailerUI.js: added code to activate the
4131 "Get mails" button. Fixed a bug which prevented messages to be
4134 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
4135 navigation and focus handling of INPUTs.
4137 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4139 * UI/WebServerResources/MailerUI.js: added code to handle the
4140 possible drag and drop events to manager in the mail module.
4141 Moving messages, opening parent folders, ...
4143 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
4144 the drag and drop manager as well as the interface to HTMLElement
4145 to trigger drag and drop events.
4147 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
4148 action to move the current message to the mailbox named after the
4149 value of parameter "tofolder".
4151 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
4152 -moveToFolderNamed:folderNameinContext:]): new method base on
4155 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4157 * UI/WebServerResources/generic.js: added and activated many
4158 "load" handlers to configure generic widgets used across the
4159 modules. More events are now handled in a DOM-fashion way instead
4160 of by setting the relative attributes in the templates.
4162 * UI/Templates/UIxSortableTableHeader.wox: all the events are
4163 declared from the javascript DOM onload handlers.
4165 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
4168 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
4169 declared from the javascript DOM onload handlers.
4171 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
4172 we want everything to be separated from each other, as much as
4175 * UI/WebServerResources/SOGoDragHandles.js: new module containing
4176 the "SOGoDragHandlesInterface", implementing methods that can be
4177 attributed to DIV so that they can be used as drag handles.
4179 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
4180 -asQPSubjectString]): initialize the tmp strings with '0' to make
4181 sure they don't contain garbage.
4183 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4185 * UI/WebServerResources/MailerUI.js: register the messageList
4186 table as a dragging source and the leaf of the navigation tree as
4187 dnd destinations to the DNDManager.
4189 * UI/WebServerResources/generic.js: initialize tabs from the
4190 "unload" event listener that is added programmatically instead of
4191 from the template... Also, added the new DNDManager object.
4193 * UI/WebServerResources/HTMLTableElement.js: added code to
4194 simulate XUL drag n drop events. This code will possibly be moved
4195 to HTMLElement.js instead later...
4197 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4198 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
4201 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4202 -_qualifierForFilter:filter]): only search records which starts
4203 with the specified pattern.
4205 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4207 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
4208 -asQPSubjectString]): new method that returns the special QP
4209 string with its qp declaration for email subjects.
4210 ([SOGoDraftObject -bodyPartForText])
4211 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
4212 double-encode data in UTF-8.
4214 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4215 -newStartDate]): new method to determine the start date depending
4216 on the URL parameters, the current day and the current time.
4217 ([UIxComponentEditor -toolbar]): new method to determine the
4218 filename of the toolbar that should be drawn depending on the
4219 ownership and the list of attendees of the task/event wrt to the
4222 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4223 -setDayStartHour:aStartHour]): adjust the minutes to the next
4224 quarter of hour, if not already set to a quarter.
4226 * UI/WebServerResources/UIxAppointmentEditor.js,
4227 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
4230 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4232 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4233 -loadValuesFromComponent:component]): handles access class
4234 (privacy) and status.
4236 * UI/Contacts/UIxContactsListViewContainer.m
4237 ([UIxContactsListViewContainer -additionalFolders]): return nil if
4238 [self additionalAddressBooks] returns an empty string.
4240 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4242 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
4243 rangesOf7Days]): enhanced and debugged algorithm to feed the array
4244 with slices where the first day is still in the requested month.
4246 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
4249 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
4250 of events in the day boxes of the calendar's monthly view.
4252 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
4253 -davContentType]): declare "text/calendar".
4255 * SoObjects/Appointments/SOGoAppointmentObject.m
4256 ([SOGoAppointmentObject -davContentType]): declare
4259 * SoObjects/Appointments/SOGoAppointmentFolder.m
4260 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
4261 HTTP methods are handled by SOPE and requires nil to be returned,
4262 this method now invokes the new
4263 "requestNamedIsHandledLater:inContext:" method to check that.
4264 ([SOGoAppointmentFolder
4265 -requestNamedIsHandledLater:nameinContext:context]): new methods
4266 that returns "YES" only for the "OPTIONS" http method (for now...).
4267 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
4268 overloaded method to append the "access-control" and
4269 "calendar-access" DAV abilities to the initial declaration.
4271 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
4272 imitate the look of Sunbird/Lightning's monthly view.
4274 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
4275 UIxCalMonthViewOld.[hm].
4277 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4279 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
4280 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
4282 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
4283 returns an image name based on the participation status of the
4286 * UI/WebServerResources/SchedulerUI.js: same strip down as for
4289 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
4290 ([UIxContactsListViewContainer -additionalFolders])
4291 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
4292 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
4293 methods to handle the external addressbooks a user has subscribed
4294 too, by retriving them from his preferences.
4296 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4297 -updateAdditionalAddressBooksAction]): new method that updates the
4298 user settings with the list of addressbook he has subscribed to.
4300 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
4301 module for the address book selector.
4303 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
4304 a toolbar with two buttons ("add" and "remove") to manage the
4305 additional addressbooks a user might subscribe to.
4307 * UI/WebServerResources/ContactsUI.js: added code to handle
4308 "external addressbooks" from the Javascript point-of-view, by
4309 extending existing methods and adding code for the "add ab" and
4310 "remove ab" buttons.
4312 * UI/WebServerResources/generic.js: moved extensions methods to
4313 DOM elements to separate files for better clarity.
4315 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
4316 new method that returns "pageContent" as class, but also "popup"
4317 for the DIV where the page content lies, so that we can manipulate
4318 the content of popup's with CSS identifiers.
4320 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4322 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4323 -displayStyle]): new method that returns a string containing the
4324 css style relative to the current appointment cell. This code is
4325 currently inactive but might be reused later.
4327 * UI/WebServerResources/SchedulerUI.js: added code to handle the
4328 display of the selected day (the day pointed by the mouse, or the
4329 current day when changing the view).
4331 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
4332 -dayCellClasses]): new method that returns a string containing the
4333 css classes applicable to the current cell, depending on the
4334 position of the day in the week, the day of today and the
4337 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
4338 -currentContactAptBorder]): new method that returns the
4339 appropriate border color for the specified user.
4341 * SoObjects/Appointments/SOGoAppointmentObject.m
4342 ([SOGoAppointmentObject
4343 -saveContentString:contentStringbaseVersion:baseVersion]):
4344 overloaded method that parse new events and detects if they have
4345 an organizer or not. If they are new and have no organizer set
4346 (Sunbird/Lightning...), the owner of the event is set as
4349 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
4350 category that provides facility methods and interfaces to the
4353 * SoObjects/Contacts/product.plist: give full access to ANY
4354 authenticated user, not just the owner (to every objects...).
4356 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4358 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
4359 every replica widgets are declared as such to their master
4360 counterpart. Take the days into account when displaying the time
4361 range taken by the appointment.
4363 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
4364 -getICalPersonsFromValue:selectorValue]): method taken from
4365 UIxFreeBusyUserSelector, that is shared both by
4366 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
4368 * SoObjects/Appointments/SOGoAppointmentFolder.m
4369 ([SOGoAppointmentFolder
4370 -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.
4372 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
4373 derived and taken as a subset of UIxFreeBusyUserSelector that
4374 implements the table part of the FreeBusy view. Most of the
4375 methods of UIxFreeBusyUserSelector relative to that table were
4376 moved into UIxFreeBusyUserSelectorTable, which can also be used as
4377 a standalone view for AJAX operations.
4379 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4381 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4382 -vCard]): change reverted.
4384 * UI/Contacts/UIxContactEditor.m: check whether the client contact
4385 folder has selector "globallyUniqueObjectId" before calling that
4388 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4389 -vCard]): the "setVClass" NGVCard method really is "setClass"
4392 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4393 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
4394 request the "streetAddress" instead of the "streetaddress".
4395 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
4396 mails that *contain*, and not just *start with* the search
4399 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4400 -vCard]): mark address returned from LDAP as the work address.
4402 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
4403 span covered with the anchor, not only the textual information
4406 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
4407 argument (event or task) to newEvent in the appointmentListMenu.
4408 Make the appointmentsListView display the appointmentsListMenu.
4410 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
4411 12 to 50 before displaying "...".
4412 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
4413 if its length > 0, whether location itself is nil or not...
4414 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
4415 of which the length > 0.
4417 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4419 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
4420 french and ISO dates.
4422 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
4423 from UIxContactSelector to handle contact lists (current and
4424 additional contacts).
4426 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4427 -_freeBusyAsText]): added handling of an "additional"-named query
4428 parameter that describe the number of additional days after
4429 enddate that should be returned.
4431 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4432 -_responseForResults:results]): give priority to results with
4433 "c_uid" fields. If none returned, use the first contact received.
4435 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4436 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
4437 2 and "CANCELLED" to 0.
4439 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4441 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
4442 of start and end dates to short string dates.
4444 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4445 -readFreeBusyAction]): new method that returns an array of numbers
4446 corresponding to the state in the freebusy of each "quarter of an
4447 hour" between the "sday" and "eday" date parameters passed in the
4448 url. This permits to handle the display of the freebusy with Ajax
4450 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
4451 since the free busy displays 2 days ahead.
4453 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4454 -contactSearchAction]): new action that returns the uid and the
4455 username + email of the user whose name contain the value of the
4456 "search" url parameter.
4458 * SoObjects/Appointments/SOGoAppointmentFolder.m
4459 ([SOGoAppointmentFolder
4460 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
4461 useful for the computing of the status of the freebusy.
4463 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
4464 -init]): new component that incarnates a user selector for events
4465 inspired by the new one found in Thunderbird Lightning.
4467 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4469 * UI/WebServerResources/generic.js: added code to enable or
4470 disable anchor visually (following our internal algorithm).
4472 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
4473 added new "url" ivar with its classic accessors.
4474 ([UIxComponentEditor -urlButtonClasses]): new method that returns
4475 the class strings for the url button on the appointment/task
4476 editor (depending on the validity of the url).
4478 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
4479 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
4480 the template to match the Lightning's new task/appointment editor.
4482 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
4484 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
4486 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4488 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4489 ([SOGoContactLDAPFolder
4490 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
4492 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
4493 iCalEntityObject instances instead of just iCalEvent's.
4495 * SoObjects/Appointments/SOGoAppointmentFolder.m
4496 ([SOGoAppointmentFolder
4497 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
4499 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
4500 bad way of handling ownership that way.
4502 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4503 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
4504 on "cn", just like Mozilla.
4506 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4508 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
4509 "to" should be retained, otherwise it will be autoreleased and a
4512 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4513 -writeAction]): updated method to fetch the card before initing
4516 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4517 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
4520 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
4521 -iCalStringTemplate]): start and due date are now optional.
4523 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4524 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
4525 appropriate accessors to be settable through the templates.
4527 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
4528 new "isDisabled" ivar with appropriate accessors to be
4529 settable through the templates.
4531 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4532 -availableCalendars]): new method that list the calendars to which
4533 the user has subscribed.
4534 ([UIxComponentEditor -componentOwner]): returns the owner of the
4537 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4538 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
4539 quickentries to null whenever each or all of them are null, by
4540 providing an impossible timestamp from with NSNotFound as value.
4542 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4544 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
4545 that handles the creation of new fields with the new APIs and the
4546 new node structure on the page.
4548 * UI/Scheduler/UIxAppointmentEditor.m,
4549 UI/Scheduler/UIxTaskEditor.m:
4550 refactored to user UIxComponentEditor as parent class.
4552 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
4553 containing the methods common to the UIxTaskEditor and the
4554 UIxAppointmentEditor.
4556 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4558 * SoObjects/Appointments/SOGoAppointmentFolder.m
4559 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
4560 the handling of time-ranges.
4562 * UI/WebServerResources/ContactsUI.js: specify a notification type as
4563 parameters when onConfirmContactSelection in invoked.
4565 * UI/WebServerResources/generic.js: specify a notification type as
4566 parameters when onContactRemove in invoked.
4568 * UI/WebServerResources/SchedulerUI.js: when the user deselects
4569 all calendars, select his entry.
4571 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4573 * UI/WebServerResources/SchedulerUI.js: edit and delete events
4574 with their owner-relative urls. Generate a correct entry in the
4575 css color table when a user is added to the calendars list. Put
4576 the same color next to the user id.
4578 * UI/WebServerResources/generic.js: implemented some new helper
4581 * SoObjects/Appointments/SOGoAppointmentFolder.m
4582 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
4583 entries if their owner is not the current user.
4585 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4586 -displayClasses]): return the correct class for the current event
4587 representation depending on its owner.
4589 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
4590 and associate a color for each user login depending on its
4591 position in the list.
4593 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
4594 -currentRowCSSClass]): return the correct class for the current
4595 row depending on the owner of the event.
4597 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4598 -setColors:colors]): new method to associate a color table with
4599 each user in the list.
4601 * SoObjects/Appointments/SOGoAppointmentFolder.m
4602 ([SOGoAppointmentFolder
4603 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
4605 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
4606 NSObject to associate an instance with a user.
4608 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4610 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
4613 * UI/WebServerResources/ContactsUI.js: added handling of
4614 notification of changes to contact selectors.
4616 * UI/WebServerResources/generic.js: added handling of notification
4617 of changes to contact selectors.
4619 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4620 -updateCalendarsAction]): proxy method to update the user
4621 preference table with the new selected calendar uids.
4623 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
4624 -calendarsContactsAction]): new method.
4626 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
4627 ([UIxContactSelector -setHasCheckBoxes:aBool])
4628 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
4629 permit the drawing of checkboxes instead of card icons.
4631 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
4632 wrap a selector the the "Calendars" tab.
4634 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
4635 new user calendar selector.
4637 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4639 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
4640 may cover hour 0 to hour 23.
4642 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4643 -iCalStringFromQueryParameter:format:]): dates explicitly set to
4646 * UI/WebServerResources/SchedulerUI.js: manage both lists of
4647 objects wrt to the toolbar actions.
4649 * UI/WebServerResources/generic.js: added code to the "String"
4650 class to decode number-encoded char entities.
4652 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4653 -batchDeleteAction]): new method to delete selected entries in the
4656 * SoObjects/Appointments/SOGoAppointmentFolder.m
4657 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
4658 that delete identified entries in batch.
4660 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4661 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
4663 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
4664 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4665 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
4666 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4668 return a UIxJSClose component if everything went fine.
4670 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
4673 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
4674 UIxAppointmentEditor.m.
4676 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
4677 a very light page with javascript code to close a window, by
4678 calling a method on the opener if specified. This component is
4679 designed to work as a response to form postings.
4681 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4683 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
4684 SOGoAppointmentObject adapted for the handling of tasks.
4686 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
4687 extracted from SOGoAppointmentObject.
4689 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4690 -saveUrl]): returns the url needed to POST the new form to.
4691 redirect the user to <aptid>/editAsAppointment instead of /edit,
4692 so that SOGoAppointmentFolder can return the correct object type.
4694 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
4695 -compareAptsAscending:_other]): accept empty start or end dates.
4697 * SoObjects/Appointments/SOGoAppointmentFolder.m
4698 ([SOGoAppointmentFolder
4699 -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.
4700 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
4701 components of type "vtodo" as well as "vevent".
4702 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
4703 url specified ends with AsTask or AsAppointment, returns the
4704 an object of the appropriate class, otherwise deduce it from its
4705 content if the HTTP method is "PUT", otherwise read its type from
4708 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4709 -extractQuickFieldsFromTodo:_task]): extract quick fields from
4712 * UI/Scheduler/UIxCalView.m ([UIxCalView
4713 -fetchCoreAppointmentsInfos]): replacement methods for
4714 fetchCoreInfos but by retrieving object with component "vevent".
4715 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
4718 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
4719 UIxCalAptListView adapted for the handling of tasks.
4721 * UI/Scheduler/UIxTaskProposal.[hm],
4722 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
4723 clones of the UIxAppointment* classes for the handling of tasks.
4725 * UI/WebServerResources/UIxTaskEditor.js: clone of
4726 UIxAppointmentEditor adapted for the handling of tasks.
4728 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
4729 Scroll the daily view to the appropriate hour when an appointment
4730 is selected in the appointments list.
4732 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4734 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4735 -setDayStartHour:aStartHour]): specifies the user timezone on the
4738 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
4741 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
4742 ([NSCalendarDate -driftedDate]): methods made useless by a better
4743 comprehension of the NSTimeZone API...
4745 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4747 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
4748 new methods from the NSCalendarDate methods.
4750 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
4751 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
4753 +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).
4754 ([NSCalendarDate -adjustedDate]): this method returns another
4755 instance set to the correct hour after the original date was set
4756 from a non-GMT timezone. This date can be used for storage.
4757 ([NSCalendarDate -driftedDate]): this method does exactly the
4758 opposite of -adjutedDate, that is, it enables the method
4759 hourOfDay, minuteOfHour etc... to return the values according to
4760 the original date's timezone. This date CANNOT be used for storage.
4762 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
4763 -shortDateString]): new method that will return a "short date
4764 string" (yyyymmdd) from a calendar date object.
4766 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4767 -_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.
4769 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
4770 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
4772 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4774 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
4775 view of the day at the height of hour 8:00.
4777 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
4778 ([UIxCalView -dayEndHour]): returns 24.
4780 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
4781 ([UIxContactFoldersView -newAction]): invoke
4782 _selectActionForApplication: on self with the proper attribute too.
4784 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
4785 we now use the action mechanism in UIxContactsListView to keep the
4786 same view for the contact selectors and the regular contact view.
4788 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
4789 UIxContactsListViewContainerBase.[hm]
4791 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
4793 * UI/WebServerResources/generic.js: generalized emailstring
4794 handling functions. Generalized address book access functions.
4796 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4797 -isPopup]): return YES if the "popup" query parameter is set.
4799 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4800 -defaultAction]): keep the url parameters when redirecting.
4801 ([UIxContactFoldersView -selectForSchedulerAction])
4802 ([UIxContactFoldersView -selectForMailerAction]): new action
4803 methods for the /scheduler-contacts and /mailer-contacts invocations.
4805 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
4806 newly available NSString+URL category.
4808 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
4809 -asURLParameters]): handle dictionary entries which could be
4810 instances of NSArray rather than NSString.
4812 * SoObjects/SOGo/NSString+URL.m ([NSString
4813 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
4814 ([NSString -urlWithoutParameters]): new method that returns the
4815 url without its parameters.
4817 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
4819 * SoObjects/SOGo/NSDictionary+URL.[hm],
4820 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
4822 * UI/WebServerResources/UIxMailEditor.js: add support for
4823 additions of different types (to, cc, bcc) of recipients from the
4826 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
4829 * UI/Contacts/UIxContactsMailerSelection.m,
4830 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
4831 UI/Contacts/UIxContactsSelectionView.m to provide a different set
4832 of widgets depending on the application invoking the contact list.
4834 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4836 * UI/WebServerResources/ContactsUI.js: hide the current contact
4837 whenever the user changes of contact folder.
4839 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
4840 now provided by the template when loading the page.
4842 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4843 -iCalPersonWithUid:uid]): new method taken from removed module
4846 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4848 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
4849 -categoriesAsString]): same as below.
4851 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
4852 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
4854 * SoObjects/Appointments/SOGoAppointmentObject.m
4855 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
4856 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
4859 * SoObjects/Appointments/SOGoAppointmentFolder.m
4860 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
4861 hackish test to detect whether the request concernes VEVENT's or
4862 anything else. Return events only in the former case.
4863 ([SOGoAppointmentFolder
4864 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
4865 c_name quickfield so that the calendar list can identify the
4866 appointments with their complete "filename".
4868 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
4869 groupsOfClass:fromSource: to parse the given vcalendar.
4871 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
4873 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
4875 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
4878 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
4880 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4882 * SoObjects/Appointments/SOGoAppointmentFolder.m
4883 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
4884 sensitive to the CalDAV method names.
4885 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
4886 "calendar-query" CalDAV method name.
4888 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
4889 code coming originally from MailerUI.js.
4891 * UI/WebServerResources/UIxContactEditor.js: imitate the
4892 Thunderbird address book by completing the display name with the
4893 content of the first and last name fields, until the display name
4894 is modified manually.
4896 * UI/WebServerResources/generic.js: added a "trim" method to the
4899 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4900 -displayName]): new method that returns the display name from "cn"
4901 or from the "displayName" key if found.
4903 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4904 -initSnapshot]): check if "[card n]" returns anything to avoid a
4907 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
4908 that returns an unparsed doctype definition for the pages.
4910 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4911 -vCard]): set the card's fn to attribute "displayName" if found
4914 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4916 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4917 -vCard]): handle the "streetAddress" and "l" fields.
4919 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
4920 header fields by converting the tables to DIVs and SPANs.
4922 * UI/WebServerResources/generic.css: attempted unification of font
4923 families and size across all the elements. changed the
4924 logConsole's "position" from "fixed" to "absolute" to avoid
4927 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4929 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
4930 empty the contact view when the current contact is being deleted.
4932 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
4933 parse the email field and provide the address full name if found
4934 as the "contactFN" parameter.
4936 * UI/WebServerResources/generic.js (openMailTo): do not give a
4937 name to the opened window so that serveral ones can be opened at
4940 * UI/MailPartViewers/UIxMailPartTextViewer.m
4941 ([UIxMailPartTextViewer -flatContentAsString]): override method by
4942 replacing carriage returns with "<br />" in the result string from
4943 super's implementation.
4945 * UI/Contacts/UIxContactView.m ([UIxContactView
4946 -_urlOfType:aType]): don't manage non-mailto urls through
4947 javascript, let the user decide what's best for him.
4949 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4950 -newAction]): transfer all the query parameters by using the
4951 "asURLParameters"'s result string from [self queryParameters].
4953 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4954 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
4955 query parameters and put their values (if any) into the snapshot.
4957 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
4958 carriage-returns to "<br />".
4959 ([UIxContactView -workCompany]): explicitly initialize company to
4960 nil if org is nil or empty.
4962 * UI/WebServerResources/UIxContactEditor.js: updated validation
4963 code after we added and renamed some fields.
4965 * UI/WebServerResources/ContactsUI.js: added code to cache contact
4966 cards and to handle card updates.
4968 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4970 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
4971 test the length of the returned string since they will never be
4974 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
4975 return self if the process went successful, returns an exception
4976 otherwise (and only otherwise...).
4978 * OGoContentStore/OCSContactFieldExtractor.m
4979 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
4980 adapted method to the new VCard api. Since the cards are stored in
4981 vcard format, we no longer deal with a dictionary but with a
4984 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4986 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
4987 return a string with a "mailto" url.
4988 ([UIxContactView -_urlOfType:aType]): generic method to return a
4989 url string with a html anchor pointing to it.
4991 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
4992 since subclass "UIxContactEditor" did nothing. Implemented code to
4993 display and modify the values parsed from the vcards, displayed in
4994 a way similar to the Thunderbird addressbook.
4996 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4997 -save]): new dummy method.
4999 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
5000 -save]): made method void.
5002 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5004 * UI/Contacts/UIxContactView.m: added many wrapper methods to
5005 display blocks of data à la Thunderbird Addressbook. If data is
5006 available, those wrappers (around the NGVCard methods) will
5007 enclose the results in a proper HTML output with the correct label
5008 (if present), otherwise it will return an empty string.
5009 ([UIxContactView -vcardAction]): new action to return the contact
5010 as text/vcard (for exporting).
5012 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
5013 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
5015 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
5016 -vCard]): create a new NGVCard instance when no data is available
5018 ([SOGoContactGCSEntry -save]): save the vCard using the new
5019 "versitString" API method/message.
5021 * UI/Contacts/UIxContactView.h: separated interface from
5024 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
5025 views and display them beneath the list.
5027 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5029 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
5030 the timezone even when it's the server timezone.
5032 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5033 -privateContacts:inContext:]): no long configure the calendar
5034 object with the user's timezone since it's now accessible
5035 application-wide throught the SOGoObject methods.
5037 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
5038 method. Removed the "backendTimeZone" method.
5040 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
5041 instead of SoComponent.
5043 * SoObjects/Appointments/SOGoAppointmentObject.m:
5044 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
5045 [self serverTimeZone] instead of "EST" (which was removed).
5047 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
5048 "timeZone" ivar and its accessors.
5050 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
5051 centralized method returing the timezone configured in the
5052 userdefaults db or "Canada/Eastern" if missing.
5053 ([SOGoObject -userTimeZone]): new centralized method returing the
5054 timezone of the current user or the server timezone if missing
5055 from the user configuration table.
5057 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5059 * UI/WebServerResources/SchedulerUI.js: implemented caching of
5062 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
5063 return a path based on the object's context instead of the first
5064 level in SOGo's object hierarchy...
5066 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5068 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
5071 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
5072 timezone ([self viewTimeZone]) to the WEMonthOverview component to
5073 avoid a confusion with the days.
5075 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
5078 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
5079 imitate Sunbird's synchronization between the 3 visible views.
5081 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
5082 sure the numbers in dateString are formatted so as to take 4 chars
5083 for the year and 2 for the day and the month, otherwise
5084 NSCalendarDate will return a nil date.
5085 ([UIxComponent -applicationPath]): return a path based on the
5086 object's context instead of the second level in SOGo's object
5089 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5091 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
5092 user's timezone abbreviation to the date string passed as parameter to
5093 NSCalendarDate to generate an accurate date instance. Do the same
5094 when no date is specified and today is chosen.
5096 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
5097 form's time values to integers before comparing them.
5099 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
5100 ([UIxCalAptListView -currentEndTime]): initialize the resulting
5101 dates timezone with [self viewTimeZone].
5103 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
5104 "viewTimeZone" ivar destined to hold an instance of the user's
5106 ([UIxComponent -viewTimeZone]): take the timezone from the user's
5109 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5111 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
5112 rearranged the layout.
5114 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
5115 manage showing and hiding appointment details.
5117 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5118 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
5119 timezone by taking the current user's timezone setting.
5121 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
5123 * SoObjects/Appointments/SOGoAppointmentObject.m
5124 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
5125 set default timezone to EST, although this code should be
5126 rewritten to handle a system and a user default value.
5128 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
5129 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
5130 take the values from the hour and minute INPUTs when data is
5131 POSTed since we no longer use the UIxTimeSelector component.
5132 ([UIxTimeDateControl -selectableHours])
5133 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
5134 template SELECTs to display reasonable and acceptable values
5135 instead of all the possibilities.
5137 * UI/WebServerResources/generic.js: adapted code for the new
5138 implementation of the UIxContactSelector component (added a
5139 "remove" button, removed the previous INPUT and replaced them with
5140 links of class "button").
5142 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
5143 UIxTimeDateControl.m.
5145 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
5146 ([UIxCalDayTable -currentAppointmentHour]): new methods that
5147 returns correctly formatted values used as attributes for JS code.
5149 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
5150 -initialContactsAsString]): renamed implementation of
5151 initialParticipants.
5152 ([UIxContactSelector -currentContactId])
5153 ([UIxContactSelector -currentContactName]): new methods used when
5154 listing the initial contacts in the widget. Currently, both return
5155 the person's cn but the latter should ultimately return a user
5158 * UI/Contacts/UIxContactSelector.h: separated interface from
5159 UIxContactSelector.m.
5161 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
5162 all javascript code is now put in Scheduler.js/generic.js.
5164 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
5165 moved into NSCalendarDate+Scheduler instead.
5167 * SoObjects/Appointments/SOGoAppointmentFolder.m
5168 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
5169 configure the timezone from SOGoUserFolder when the instance is
5171 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
5172 the value of the new "timezone" ivar.
5174 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5176 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
5177 the date selector in the first page and the container of the
5178 future calendar selector in the second page.
5180 * UI/WebServerResources/generic.js: added code for handling tabbed
5183 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
5184 returns the bundle name associated to the current running product.
5186 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5188 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
5189 exception by invoking a timeout on the opener rather than invoking
5190 the list refresh method.
5192 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
5195 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
5196 ([UIxCalWeekView -prevWeekQueryParameters])
5197 ([UIxCalWeekView -nextWeekQueryParameters])
5198 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
5199 that return the dates relatively to the current day.
5200 ([UIxCalWeekView -lastWeekName])
5201 ([UIxCalWeekView -currentWeekName])
5202 ([UIxCalWeekView -nextWeekName])
5203 ([UIxCalWeekView -weekAfterNextWeekName])
5204 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
5205 methods that returns the label for the corresponding weeks.
5207 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
5208 used by UIxCalDayView and UIxCalWeekView to display the events
5209 occuring in one or more days.
5211 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5213 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
5214 entries in the new "monthMenu" and "yearMenu".
5216 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
5217 method to return the current day as a string formatted depending
5218 on the current locale.
5220 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
5221 ([UIxCalAptListView -endDate]): "today" is now the default filter
5222 for displayed events.
5223 ([UIxCalAptListView -currentSerialDay]): new method returning the
5224 date of the current enumerated appointment in serial form
5227 * UI/WebServerResources/SchedulerUI.js: added code to select the
5228 relevant day when an appointment is selected. Added code to popup
5229 a month and a year menu whenever the header entries are clicked in
5230 the calendar widget.
5232 * UI/WebServerResources/generic.js: made addClassName and
5233 removeClassName methods of HTMLElement.
5235 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5237 * UI/WebServerResources/MailerUI.js: fixed the contact creation
5238 from email addresses.
5240 * UI/WebServerResources/generic.js: centralized the search-related
5241 functions here since the same code was used across the 3
5244 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
5245 ([UIxCalAptListView -endDate]): return the required dates needed
5246 depending on the value given to the "filterpopup" url parameter.
5248 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
5249 code by invoking UIxComponent's labelForKey:.
5251 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
5252 [self pageResourceManager] instead of [self resourceManager].
5254 * UI/Contacts/UIxContactEditorBase.m: invokes
5255 globallyUniqueObjectId on the clientobject's class instead of the
5256 hardcoded "SOGoFolder".
5258 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
5259 -newAction]): redirect the "new" action to the personal (default)
5262 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
5263 +objectWithName:inContainer:]): new constructor.
5265 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
5266 -lookupContactWithId:recordId]): always create a contact object,
5267 even if it does not exist.
5269 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5271 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
5272 component that lays out the different components of SOGoCalendar.
5273 Only serves as an Objective-C counterpart to its xml template.
5275 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
5278 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
5279 display a widget to handle the information displayed in the
5280 appointments list. Not currently used, lacks implementation.
5282 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
5283 display a calendar as a dynamic widget from where one can select
5284 the current visible day.
5286 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
5287 extracted from UIxCalInlineMonthOverview.m.
5289 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
5290 calendarPageURL methods. The javascript code is handled by .js
5291 files as much as possible...
5293 * UI/WebServerResources/ContactsUI.js,
5294 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
5297 * UI/WebServerResources/SchedulerUI.js: implemented functions to
5298 handle the new widgets. XmlHTTPRequest code taken from
5301 * UI/WebServerResources/generic.js: put some functions related to
5302 element selections as methods to HTMLElement and HTMLTableElement.
5304 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
5305 display the list of appointments (embodies the code-size of
5306 UIxCalAptListView; answers to the "aptlist" method).
5308 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5310 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
5311 -correctURLAction]): new short action method replacing the method
5312 below by taking far less code.
5314 * SoObjects/Appointments/SOGoAppointmentFolder.m
5315 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
5316 with an action in the view-related code.
5318 * UI/Scheduler/UIxAppointmentEditor.m: invoke
5319 "stringByEscapingHTMLString" on the resulting value to avoid
5320 issues with accented characters.
5321 ([-jsCode]): removed method since the javascript code was merged
5322 into SchedulerUI.js.
5324 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5326 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
5327 new class method that returns an iCalPerson based on the UID given
5330 * UI/Contacts/UIxContactsListViewContainerBase.m:
5331 UIxContactsListViewContainer renamed to serve as a base class for
5332 the contact lists in both the contact editor and the contact
5335 * SoObjects/Contacts/SOGoContactLDAPFolder.m
5336 ([SOGoContactLDAPFolder
5337 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
5338 setUserIdentifier:setRootDN:]): an LDAP field specifying the
5339 loginname of the users can now be specified.
5341 * UI/WebServerResources/generic.js: added code to manage contact
5342 lists through the new implementation of the UIxContactSelector.
5344 * UI/Templates: put the templates related to SchedulerUI in its
5347 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
5348 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
5349 entry for "uid" with the field name representing the login name of
5350 the user in the corresponding LDAP branch.
5352 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5354 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
5355 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
5356 request is a PUT, always create an entry, even if we're not sure
5359 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5361 * UI/WebServerResources/ContactsUI.js: implemented live-search.
5363 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
5364 -appendSystemSourcesInContext:context]): populated method with
5365 code that creates entries mapped to instances SOGoContactFolder,
5366 based on the configuration found in the NSUserDefaults under the
5367 key "SOGoLDAPAddressBooks".
5368 ([SOGoContactFolders
5369 -lookupName:nameinContext:contextacquire:acquire]):
5370 "contactsources" do not exist anymore, SOGoContactFolder was split
5371 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
5372 and one protocol: SOGOContactFolder, instead.
5373 ([SOGoContactFolders -contactFolders]): new accessor used by the
5374 views of SOGoContactXXXFolder to list the possible sources.
5376 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
5377 defines the methods that UIxContactsView, ..Editor and so on...
5380 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
5381 defines the methods that UIxContactsListViewBase expects as well
5382 as the data fields returned in the contact lists.
5384 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
5385 returns entries an LDAP server. Conforms to the new
5386 SOGOContactFolder protocol.
5388 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
5389 returns a vCard based on contact entries from an LDAP server.
5390 Conforms to the new SOGOContactObject protocol.
5392 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
5393 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
5394 entry for the textual representation of the vCard.
5396 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
5399 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
5400 "SOGoContactObject".
5402 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
5403 method that generates a textual representation of the vcard.
5405 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
5407 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
5408 "SOGoContactFolder".
5410 * SoObjects/Contacts/SOGoContactSource.h,
5411 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
5414 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
5415 -singleAttributeWithName:key]): new method that returns the first
5416 object associated with an ldap key (where generally one value is
5419 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
5420 map the entry into an NSDictionary for processing by
5421 UIxContactsListViewBase.m with the least possible overhead.
5423 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
5426 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5428 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5429 -privateContacts:inContext:]): now returns an instance of
5432 * UI/Contacts/UIxContactsListViewContainer.m
5433 ([UIxContactsListViewContainer -contactFolderName]): new method to
5434 return the absolute path to the current contact folder, called
5435 from within the template.
5437 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
5438 JS code to initialize the 'currentContactFolder' generic var.
5440 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
5441 +contactFolderWithSource:inContainer:andName:]): new class
5442 method meant to return an instance connected to the specified
5443 source. Currently useless but won't be anymore in the next few
5446 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
5447 the "lookupFreeBusyObject" method since it does not exist.
5449 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
5450 as a "view" for the SOGoContactFolders object. Does nothing but
5451 redirect the browser to the URL of the personal address book of
5452 the user. It does not even have a template.
5454 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
5455 implementing the SOGoContactSource protocol. Does nothing
5456 currently but will be used to implement access to the personal
5457 address book of the user stored in the SOGo database.
5459 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
5460 protocol defining an API common to all possible types of contact
5463 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
5464 serving as the root of the contact folders available to the
5465 current user. Correctly lists the contact sources in webdav.
5467 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5469 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
5470 -composeAction]): new action method that permits external object
5471 to write a message from the default (primary) account.
5473 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5474 -initSnapshot]): new method with code taken from "defaultAction"
5475 but needed for others.
5476 ([UIxContactEditorBase -writeAction]): new action designed to
5477 compose the correct URL needed to obtain the MailerUI's email
5478 editor with the correct "mailto" parameter.
5480 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
5481 Common so that other modules can use it.
5483 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
5484 easier to manage both ajax and non-ajax requests.
5486 * UI/Contacts/UIxContactsFilterPanel.m: clone of
5487 UIxMailFilterPanel, but applicable to contact lists.
5489 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
5490 -vcardContentFromSOGoContactRecord]): use the new standard methods
5491 created for each type of entry. If a line is determined to not
5492 contain information, it will be skipped.
5494 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
5495 +initialize]): init defaultMailDomain with the user default
5496 "SOGoDefaultMailDomain".
5498 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5500 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5501 -saveAction]): reorganized methods to only have ONE return point.
5502 Invoke saveRecord: directly on the clientObject instead of
5503 saveContentString, which does the same thing anyway.
5505 * SoObjects/Contacts/NSDictionary+Contact.m
5506 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
5507 method to convert the dictionary returned with the user submission
5508 to a record in VCARD format to be stored in the database.
5510 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5512 * UI/WebServerResources/MailerUI.js: when opening the context menu
5513 of the message list, select the message below the mouse cursor and
5514 deselect the other selected messages temporarily. This mimics the
5515 behaviour of Thunderbird for that matter and was already
5516 implemented for the entries of the folder tree.
5518 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
5519 -iconForMenuItem]): new method that returns the fully qualified
5520 relative URL to the icon representing the mailbox, or the default
5521 mailbox icon if needed.
5523 * UI/SOGoUI/UIxComponent.m ([UIxComponent
5524 -urlForResourceFilename:filename]): automatically return an empty
5525 string whenever the filename passed as argument is nil.
5527 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
5528 "desc" parameter set to 1 so that they are sorted in descending
5529 order by default. Also, added "onHeaderClick()", triggered by
5530 clicking on the message list header elements.
5532 * UI/MailerUI/UIxMailSortableTableHeader.m
5533 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
5535 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5536 -isSortedDescending]): defaults to "YES" when the sort order is
5539 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5541 * UI/WebServerResources/MailerUI.js:
5542 - message cache: set the max num of cached messages to 20. Limit
5543 the cached message size to 30000 bytes.
5544 - ajax: when a message request is called while one is already
5545 being performed, the latter will be cancelled. Idem when
5546 retrieving the content of a mailbox.
5547 - folder tree: when a mailbox is selected because of the URL
5548 requested (initMailboxSelection), the dtree is expanded throughout
5549 the mailbox entry's parent hierarchy to ensure it is made visible
5550 when the page is being displayed. (new function: expandUpperTree).
5551 - mailbox loading: when loading a mailbox where a message was
5552 previously selected, we invoke its url with the "pageforuid"
5553 parameter correctly specified. During callback processing, we scan
5554 the table for the related row and reselect it.
5555 Also, the message area is set blank before loading any mailbox.
5557 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5558 -defaultAction]): if the "pageforuid" parameter is passed in the
5559 url, take its value and invoke [self firstMessageOfPageFor:]
5560 consequently to deduce the first message to display. Otherwise,
5561 set it to "idx", otherwise set it to 0.
5562 ([UIxMailListView -firstMessageOfPageFor:]): new method
5563 that determines the first message of the page where the message
5564 passed as parameter is contained.
5566 * UI/WebServerResources/UIxMailListView.js: removed this module,
5567 its code was put in MailerUI.js instead.
5569 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5571 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
5572 which returns the nodes for the parent specified in "parentMenu".
5573 Used to generate the javascript code for the folder dtree.
5575 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
5576 using that container-template are now using UIxMailMainFrame
5577 since UIxMailPanelFrame had no real interest. File removed.
5579 * UI/WebServerResources/dtree.{css,js}: new files to handle
5580 javascript-generated mailbox tree. Modified from original version
5581 by integrating the previous code with the one we are using for
5582 selections and mailbox handling. Minor visual enhancements too...
5584 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5586 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
5587 returned, put it in an NSArray before returning it (fixes
5590 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5592 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
5593 that returns a url string stripped from its "http://hostname"
5596 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
5598 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
5600 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5602 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
5603 -mailDateFormatter]): retrieve the timezone from the user settings
5604 and pass it to the returned dateFormatter. Also, the dateFormatter
5605 is kept in a static variable to avoid useless
5606 creations/destructions.
5608 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
5609 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
5611 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
5612 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
5613 s/Criteria/Text/ to handle the "criteria" form parameter.
5615 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5617 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
5618 to integrate better with the firefox look&feel. Added entries for
5619 the new "menu" DIV class (popup menus).
5621 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
5622 takes any chunk of text as param, detects the user email and the
5623 optional first and last names and return them in a well-formatted
5624 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
5625 namespace conflict. Added "onMenuClick(node, event, menuId)" to
5626 handle popup menus through "onclick" element attributes (node =
5627 this, event = event and menuId = name of the menu DIV id to
5630 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5631 -snapshot]): add an entry for "email" into the snapshot
5632 dictionary if a "contactEmail" URL parameter was detected and if
5633 the entry for "email" is empty.
5635 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
5636 button now invokes the newContact() js function in ContactsUI.js
5637 instead of opening "new" directly. newContact() pops up a window
5638 stripped from its navigation bar.
5640 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
5641 bundle (AddressBook).
5643 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
5644 "menu" and id "addressMenu" have the header email addresses
5645 display it with the new menu code in generic.js.
5647 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
5648 replaced the body tables with a div of class "pageContent"
5649 (standardization across the page templates).
5651 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
5652 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
5653 those are now inherited from UIxPageFrame.
5655 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
5657 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
5658 a "mailto" URL parameter is detected and the "to" array is empty,
5659 initialize "to" with the value of "mailto" before returning it.
5661 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
5662 -composeAction]): rewrote method in a cleaner way and with usage
5663 of the URL extensions to NSString and NSDictionary (see below).
5664 Also, if a "mailto" url parameter is detected, pass it to the
5667 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
5670 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
5671 returns a parameter string to add to a base URL.
5673 * UI/Common/NSString+URL.m ([NSString
5674 -composeURLWithAction:parameters:andHash:useHash]): new method to
5675 compose a complete URL from an object URL with parameters and an
5676 optional '#' character.
5678 * UI/Common/UIxPageFrame.h: separated interface from
5681 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
5683 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
5685 * UI/WebServerResources/generic.js: added code to manage
5686 selections within HTML containers.
5688 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
5689 added method to determine the possible URL for a product-specific
5690 javascript filename of the forme <productname>.js.
5691 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
5692 ([UIxPageFrame -isPopup]): new method to determine whether the
5693 application navigator bar should be displayed (main page) or not
5696 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
5697 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
5698 the user through LDAP.
5700 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5702 * The toolbar code from the MailerUI product was taken, renamed as
5703 "UIxToolBar" and put into UI/Common. Toolbar plists were created
5704 for the Contacts and Scheduler products and put in their respectir
5705 Toolbars/ subdirectories. Finally,
5706 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
5707 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
5708 and an invocation to the UIxToolbar component was put at the top
5709 of UI/Templaces/UIxPageFrame.wox.
5711 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
5712 within the templates whether a separator should be displayed.
5714 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
5715 that returns NO if the toolbar is empty.
5717 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5719 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
5721 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
5722 new toolbar objects.
5724 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
5726 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
5727 linkbanner as a DIV instead of a TABLE.
5729 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
5731 returns 'YES' to request the display of the navigation bar between
5734 2006-06-15 ludovic@inverse.ca
5736 * It's now possible to set the default
5737 domain using for email using the
5738 SOGoDefaultMailDomain preference key.
5740 2006-06-15 ludovic@inverse.ca
5742 * Initial import of SOGo from trunk.