1 2007-12-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3 * UI/Common/UIxAclEditor.m ([-currentUserIsOwner]): replaced
4 method with -canModifyAcls that invokes the security manager
5 instead for the permission "SaveAcls" on the client object.
7 * SoObjects/Appointments/SOGoCalendarComponent.m
8 ([SOGoCalendarComponent -contentAsString]): securize the returned content.
9 ([SOGoCalendarComponent -aclsForUser:uid]): check whether the user
10 is an organizer or a participant as well.
12 * SoObjects/Appointments/SOGoAppointmentObject.m
13 ([SOGoAppointmentObject -changeParticipationStatus:_status]): the
14 user we should change the status of is not the active user but the
15 owner of the object. This is for delegation.
17 * SoObjects/Appointments/SOGoAppointmentFolder.m
18 ([SOGoAppointmentFolder -fetchContentObjectNames]): fetch the
19 elements through the fetchFields:from:to:title:component: method
20 method, so that the result is already filtered depending on the
23 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
24 -toolbar]): if the current user is a delegate, take the permission
25 "ModifyComponent" into account. Also, do not let him/her modify an
26 event for which he/she is the organizer.
28 * SoObjects/Contacts/SOGoContactLDAPFolder.m
29 ([SOGoContactLDAPFolder -davResourceType]): declared as a carddav
30 addressbook collection.
32 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
33 -davResourceType]): declared as a carddav addressbook collection.
35 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davLastModified]):
36 override SoObject's implementation. Otherwise a localized date is returned.
38 * UI/Common/UIxPageFrame.m ([UIxPageFrame -isCalendar])
39 ([UIxPageFrame -isContacts], [UIxPageFrame -isMail]): getters to
40 determine which module is the current one.
42 2007-12-06 Francis Lachapelle <flachapelle@inverse.ca>
44 * UI/Scheduler/NSArray+Scheduler.m ([NSArray -compareEventsTitleAscending:otherEvent])
45 ([NSArray -compareEventsLocationAscending:otherEvent])
46 ([NSArray -compareEventsEndDateAscending:otherEvent])
47 ([NSArray -reversedArray]): new methods that sort an array of
48 events depending of various parameters.
50 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
51 -eventsListAction]): added support for sorting events.
53 2007-12-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
55 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction])
56 ([UIxMailEditor -sendAction]): make sure that the attachments
57 having the same filename are correctly sequenced (ex: base.ext,
58 base-1.ext, base-2.ext).
60 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
61 -fetchBLOB]): added support for quoted-printable decoding. Also,
62 we return nil if the type is not supported.
64 2007-12-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
66 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -newAction]):
67 create task obejcts with the .ics extension.
69 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
70 -newAction]): create appointment objects with the .ics extension.
72 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -newAction]):
73 create objects with the .vcf extension.
75 * Main/NSException+Stacktrace.m: added missing symbols from
76 NSException.m and NSDebug.m (GNUstep).
78 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
79 -foldersSearchAction]): make use of the new search methods in
80 SOGoUserFolder (see below).
82 * UI/Contacts/UIxContactFoldersView.m ([-foldersSearchAction]):
83 moved method into ../MainUI/SOGoUserHomePage.m.
85 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
86 -foldersOfType:folderTypeforUID:uid]): only return folders owned
87 by the specified user.
89 2007-12-05 Francis Lachapelle <flachapelle@inverse.ca>
91 * SoObjects/Mailer/SOGoDraftObject.m: the condition for replyToAll
92 has to be done later to avoid duplicated to and cc addresses.
94 2007-12-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
96 * SoObjects/Appointments/SOGoAppointmentFolder.m
97 ([SOGoAppointmentFolder -davCalendarQuery:queryContext]): fixed a leak.
99 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder -davSubscribe:localContext])
100 ([SOGoGCSFolder -davUnsubscribe:localContext]): subscribe an
101 unsubscribe from DAV-based accesses. We could be compatible with
102 Microsoft's extensions but we have no need for a "subcription id",
103 so we implement our own.
105 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
106 -POSTAction:localContext]): new method to intercept DAV POSTs,
107 which we now use to implement certain custom commands such as
108 "subscribe" and "unsubscribe".
110 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
111 -davNamespaces]): declare the
112 "urn:inverse:params:xml:ns:inverse-dav" xml ns.
113 ([SOGoUserFolder -foldersOfType:folderTypeforUID:uid]): new method
114 designed to replace the UIxContactFoldersView.m mechanism for
115 displaying folders to subcribe to, as a common code base for both
116 Web and DAV-based subscriptions.
117 ([SOGoUserFolder -foldersOfType:typematchingUID:uid]): same as
119 ([SOGoUserFolder -davCollectionQuery:queryContext]): new method
120 that implement a custom DAV-based protocol query for querying
121 folder based on specified attributes.
123 2007-12-03 Ludovic Marcotte <ludovic@inverse.ca>
125 * Main/NSException+Stacktrace.{h,m} - new files
126 to handle automatic stack trace generation
127 upon an uncaught exception.
129 * Updated the templates and Localizable.string files
130 to fix typos and add new strings.
132 * SoObjects/Mailer/SOGoMailBodyPart.m
133 Fixed attachment retreival when the first character
136 * SoObjects/SOGo/SOGoGCSFolder.m
137 Fixed the sending of emails when folders are created/removed.
138 Notifications are sent if the defaults SOGoFoldersSendEMailNotifications
141 * UI/Common/UIxUserRightsEditor.m
142 * UI/Templates/SOGoACLEnglishModificationAdvisory.wox
143 * UI/Templates/SOGoACLFrenchModificationAdvisory.wox
144 * UI/Templates/SOGoACLGermanModificationAdvisory.wox
145 Added the capabilities to email notifications when ACLs have
146 changed on a DAV collection or an IMAP mailbox. Also added
147 new templates (3 .wox) to deal with this.
149 * UI/WebServerResources/ContactsUI.js
150 UI/WebServerResources/SchedulerUI.js
151 Added warnings on operations w/o selection.
153 2007-11-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
155 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
156 -appendSubscribedSources]): don't include sources for which we
157 don't have the SOGoPerm_AccessObject permission.
159 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
160 -rfc822DateString]): we want positive timezones to be specified
161 with a leading "+" too.
163 2007-11-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
165 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
166 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
167 return nil if the subscribed folder has no display name (meaning
168 it no longer exists).
170 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
171 -appendPersonalSources]): don't include sources which are no
174 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
175 -ocsPathOfContainer]): return the intended value, not that of
178 * SoObjects/Appointments/SOGoCalendarComponent.m
179 ([SOGoCalendarComponent -sendResponseToOrganizer]): send the
180 message only of sendEMailNotifications is set.
182 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -subscriptionRoles]):
183 new method that returns the roles that qualifies for adding the
184 special "authorized subscribed" sogo role.
186 2007-11-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
188 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
189 -aclsForUser:uid]): copy all the roles from the container. If the
190 object is new, make sure the roles contain "ObjectEditor" if and
191 only if "ObjectCreator" is present.
193 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
194 -aclsForUser:uid]): no longer take the "ObjectReader" role into
197 * UI/Common/UIxFolderActions.m ([UIxFolderActions
198 -canAccessContentAction]): always return HTTP status 204. We want
199 this because we are relying on the SOPE access control manager to
200 grant access to this method. This requires a fine-tuned access
201 control in SOGo itself...
203 * UI/Contacts/UIxContactsUserRightsEditor.m ([-userCanReadObjects])
204 ([-setUserCanReadObjects:userCanReadObjects]): removed methods.
206 * UI/MailerUI/UIxMailUserRightsEditor.m ([UIxMailUserRightsEditor
207 -updateRights]): no longer take the "ObjectReader" role into account.
208 ([-userCanReadMails], [-setUserCanReadMails:userCanReadMails]):
211 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
212 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): specify context
213 when looking up the Calendar folder.
215 2007-11-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
217 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): same as below.
219 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
220 -event]): create the event if it doesn't exist.
222 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -userHasCalendarAccess])
223 ([UIxPreferences -userHasMailAccess]): same as below, for
224 displaying preference tabs.
226 * UI/Common/UIxPageFrame.m ([UIxPageFrame
227 -userHasCalendarAccess]): new accessor for the link banner.
228 ([UIxPageFrame -userHasMailAccess]): same as above.
230 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
231 -toManyRelationshipKeys]): do not report the path to modules to
232 which the user has no access. No longer cache this information
233 statically, the array will be generated at each call.
234 ([SOGoUserFolder -lookupName:_keyinContext:_ctxacquire:_flag]):
235 ignore the path to modules to which the user has no access.
237 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -canAccessModule:module]):
238 new method that returns whether the user has access to the
241 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
242 -initFromUDSource:udSource]): take a new parameter named
243 'ModulesContraints' that defines a set of constraints for
244 accessing specified named modules. This is an optout, meaning the
245 modules will be present unless a constraint is specified.
247 * SoObjects/Appointments/SOGoAppointmentFolder.m
248 ([SOGoAppointmentFolder
249 -roleForComponentsWithAccessClass:accessClassforUser:uid]): cache
250 acl to reduce method calls.
251 ([SOGoAppointmentFolder
252 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
253 if the user is not the current user, we strip the useless info
256 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
257 -labelForKey:key]): new category method.
259 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
260 -event]): same as below.
262 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): request a
263 secured version of the component.
265 * UI/MailPartViewers/UIxMailPartViewer.m
266 ([-fallbackStringEncoding]): removed method.
267 ([UIxMailPartViewer -flatContentAsString]): we no longer use [self
268 fallbackStringEncoding]. Instead we directly specify
269 NSISOLatin1StringEncoding if UTF-8 has failed.
271 * UI/MailPartViewers/UIxMailPartICalViewer.m
272 ([-fallbackStringEncoding]): removed method.
274 2007-11-25 Ludovic Marcotte <ludovic@inverse.ca>
276 * SoObjects/Mailer/SOGoMailForward.m
277 Use [sourceMail decodedSubject] instead of [sourceMail subject]
278 Signature fix in -signature - see the comment
281 * SoObjects/Mailer/SOGoMailObject.m
282 Improved -stringFromData: to try UTF-8 then fallback to Latin1
284 * SoObjects/Mailer/SOGoMailReply.m
285 Modified -messageBody to strip the signature from the reply.
286 Also modified -signature to add "-- \n%@" instead of the
287 broken ""--\r\n%@" pattern.
289 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m
290 We now favor text/calendar parts over text/html and
291 text/plain parts when viewing a multipart/alternative mail.
292 This allows us to show the email invitations coming from
295 * UI/MailerUI/UIxMailAccountActions.m
296 Signature fix in -composeAction - see the comment
299 * UI/MailPartViewers/UIxMailPartViewer.m
300 Modified -flatContentAsString to use UTF-8 as the
301 default fallback encoding for 8-bit content.
303 * SoObjects/Mailer/SOGoDraftObject.m
304 Modified _fillInReplyAddresses:replyToAll:envelope:
305 so that if there's no recipient, we add at least
307 Fixed a mem leak in the same method.
309 2007-11-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
311 * UI/MailPartViewers/UIxMailRenderingContext.m
312 ([UIxMailRenderingContext -viewerForBodyInfo:_info]): same as below.
314 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
315 -plainTextContentFetchKeys]): same as below.
317 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
318 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): accept the
319 application/ics type from Google Calendar.
321 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
322 +distantFuture]): rewrote method to return an object that is
323 compatible with NSCalendarDate, unlike the implementation in
325 ([NSCalendarDate +distantPast]): same as above.
327 2007-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
329 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: fixed infinite loop
330 when charset is us-ascii, match it to ascii rather than none.
332 * SoObjects/Appointments/SOGoAppointmentFolder.m
333 ([SOGoAppointmentFolder
334 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
335 added search on the c_title column too.
337 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
338 -eventsListAction]): take the "search" url parameter into account.
339 ([UIxCalListingActions -eventsListAction]): fetch events matching
340 the title filter too.
342 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -connectAction]): the
343 user infos are now posted as "application/x-www-form-urlencoded".
344 So we have to have like a form has been posted.
346 2007-11-21 Francis Lachapelle <flachapelle@inverse.ca>
348 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
349 -calendarList]): also returns the calendar of the current
350 event. This is required so the proper calender is selected when
351 you view an event to which you don't have write access.
353 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
354 also returns true for super users.
356 2007-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
358 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
359 -lookupImap4BodyPartKey:inContext:]): return a correct body part
360 when "0" is requested, taking its mime-type into account.
362 * UI/MailPartViewers/UIxMailRenderingContext.m
363 ([UIxMailRenderingContext -flatContentForPartPath:_partPath]):
364 return content for part "0", which would be the message body.
366 2007-11-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
368 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
369 ([_UIxHTMLMailContentHandler
370 -setContentEncoding:newContentEncoding]): new method that
371 specifies an xml charset to return to the parser.
372 ([UIxMailPartHTMLViewer -flatContentAsString]): specifies the
373 charset to the content handler before parsing.
375 * SoObjects/Appointments/SOGoAppointmentObject.m: don't take an
376 empty c_name as a valid response when looking up an event. Create
377 one in that case instead.
379 2007-11-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
381 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -signature]):
382 returns the signature for the default identity of the default
384 ([UIxPreferences -setSignature:newSignature]): accessor that sets
385 the default signature.
387 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
388 -composeAction]): append the message signature to the new draft.
390 * SoObjects/Mailer/SOGoMailReply.m ([SOGoMailReply -signature]):
393 * SoObjects/Mailer/SOGoMailForward.m ([SOGoMailForward
394 -signature]): new method that takes the user's signature and put
395 it at the end of the message, if exists.
397 * UI/Common/UIxPageFrame.m ([UIxPageFrame -isSuperUser]): new
398 accessor that forwards the call to the active user.
400 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -signature]): returns the
401 user default signature.
402 ([SOGoUser -isSuperUser]): declares whether the user is listed
403 among the super users.
405 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
406 -setComponent:newComponent]): retain the component object.
407 ([UIxComponentEditor -organizerIdentity]): new accessor method to
408 handle list of possible organizers.
410 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
411 -event]): retain the returned event object.
413 * SoObjects/Appointments/SOGoAppointmentObject.m
414 ([SOGoAppointmentObject -saveComponent:newEvent]): reset the
415 organizer only if there are no attendees AND the owner of the
416 component is not the organizer him-/herself.
418 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
419 -toolbar]): rewrote in a way that ensures that each case is
422 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -isEqual:otherUser]): new
425 * UI/Scheduler/UIxTaskEditor.m ([-acceptAction])
426 ([-declineAction]): commented out unused methods.
428 * UI/MailPartViewers/UIxMailPartICalActions.m
429 ([UIxMailPartICalActions -deleteFromCalendarAction]): actually
430 delete the found object.
432 2007-11-18 Ludovic Marcotte <ludovic@inverse.ca>
434 * SoObjects/Mailer/SOGoMailBodyPart.m
435 SoObjects/Mailer/SOGoMailObject.m
436 UI/MailPartViewers/UIxMailPartViewer.m
437 Added support of messages containing non-textual
438 content and no parts.
440 * UI/MailerUI/UIxMailView.m
441 SoObjects/Mailer/SOGoMailObject.m
442 UI/Templates/MailerUI/UIxMailView.wox
443 Added support for the Reply-To header upon
446 2007-11-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
448 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]):
449 invoke saveComponent:.
451 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -hasOrganizer])
452 ([UIxComponentEditor -organizerName]): new template accessor
453 related to displaying the event's organizer.
454 ([-containsConflict:_component]): removed method.
455 ([UIxComponentEditor -takeValuesFromRequest:_rqinContext:_ctx]):
456 set RSVP to "TRUE" on each attendee.
458 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
459 -saveAction]): invoke saveComponent:.
461 * UI/MailPartViewers/UIxMailPartICalViewer.m
462 ([UIxMailPartICalViewer -isLoggedInUserTheOrganizer]): make use of
463 the -userIsOrganizer: category method.
464 ([-isLoggedInUserAnAttendee]): make use of -userIsParticipant:.
465 ([UIxMailPartICalViewer -hasSenderStatusChanged]): new template
466 accessor that determines whether the "Update" button should be
469 * UI/MailPartViewers/UIxMailPartICalActions.m
470 ([UIxMailPartICalActions -deleteFromCalendarAction]): implemented
472 ([UIxMailPartICalActions -updateUserStatusAction]): implemented
475 * UI/Common/UIxPageFrame.m ([UIxPageFrame
476 -setCssFiles:newCSSFiles]): new accessor that enables the
477 sub-templates to specify extra CSS files to load.
479 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
480 -homeFolderInContext:context]): cache the home folder of the user
481 object instead of the current user.
483 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
484 -deleteEntriesWithIds:ids]): invokes the "prepareDelete" optional
485 method if the child object implements it.
487 * SoObjects/SOGo/SOGoContentObject.m ([-setContentString:])
490 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
491 -setBaseDN:newBaseDNIDField:newIDFieldCNField:newCNFieldUIDField:newUIDFieldmailFields:newMailFieldsandBindFields:newBindFields]):
492 take a new "mailFields" parameter defining an array of fields
493 where to look at when searching the user's emails. It defaults to
494 the standard "mail" LDAP field.
496 * SoObjects/Appointments/SOGoAptMailICalReply.[hm]: new
497 SoComponent implementing a template for ITIP replies.
499 * SoObjects/Appointments/iCalPerson+SOGo.m ([iCalPerson
500 -mailAddress]): new method that returns a properly formatted email
501 address for the specified person entry.
502 ([iCalPerson -uid]): new method that tests whether the user is
503 known to the system and if so, returns its user id.
505 * SoObjects/Appointments/iCalPerson+SOGo.[hm]: new category module.
507 * SoObjects/Appointments/iCalEventChanges+SOGo.m
508 ([iCalEventChanges -sequenceShouldBeIncreased]): determine whether
509 the changes involved need a sequence inscrease, based on the
512 * SoObjects/Appointments/iCalEventChanges+SOGo.[hm]: new category
515 * SoObjects/Appointments/iCalEvent+SOGo.m ([iCalEvent
516 -isStillRelevant]): new overriden method determining the relevance
517 of the current event based on its end date.
519 * SoObjects/Appointments/iCalEvent+SOGo.[hm]: new category module.
521 * SoObjects/Appointments/iCalEntityObject+SOGo.m
522 ([iCalEntityObject -attendeeUIDs]): new category methods that
523 returns an array containing the uids of the system-know attendees.
524 ([iCalEntityObject -isStillRelevant]): new template method.
525 ([iCalEntityObject -itipEntryWithMethod:method]): clone the
526 current entry calendar with the specified ITIP method.
527 ([iCalEntityObject -attendeesWithoutUser:user]): returns an array
528 of attendees while making sure the specified user is not listed.
530 * SoObjects/Appointments/SOGoCalendarComponent.m
531 ([SOGoCalendarComponent -calendar:create:secure]): new name for
532 -calendar:. Added a "secure" parameter that specifies whether a
533 stripped calendar instance is needed or not. Also, we no longer
534 cache the content to simplify handling of new data.
535 ([SOGoCalendarComponent -component:create:secure]): same as above.
536 ([SOGoCalendarComponent
537 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
538 test whether the component is "still relevant" before sending an
540 ([SOGoCalendarComponent -sendResponseToOrganizer]): new method for
541 sending ITIP replies.
542 ([SOGoCalendarComponent -getUIDsForICalPerson:iCalPerson]):
543 removed method. Replaced with -[iCalPerson uid] category method.
545 * SoObjects/Appointments/SOGoAppointmentObject.[hm]: rewrote
546 class. No longer override saveContentString:,
547 saveContentString:baseSequence:, .... Implemented the
548 saveComponent: and the prepareDelete methods instead. Those
549 methods are called only from the web methods. This avoids the
550 risks related to email sending and changes propagation.
552 * UI/Common/UIxTabItem.m: removed useless class module.
554 * UI/Common/UIxTabView.[hm]: removed useless class module.
556 * UI/Common/UIxPrintPageFrame.m: removed useless class module.
558 * UI/Common/UIxAppNavView.m: removed useless class module.
560 2007-11-16 Ludovic Marcotte <ludovic@inverse.ca>
562 * SoObjects/Mailer/SOGoMailBaseObject.m
565 * SoObjects/Mailer/SOGoMailBodyPart.m
566 We also grok image/jpeg and return the SOGoMailBodyPart
567 for attachments fetching.
569 * SoObjects/Mailer/SOGoMailObject+Draft.m
570 Prevent a crash in case body decoding failed during
573 * SoObjects/Mailer/SOGoMailObject.m
574 Improved body decoding during a reply to also try
575 latin1 as an encoding.
577 * UI/MailPartViewers/UIxMailRenderingContext.m
578 Greatly improved the display mechanisms for emails.
579 Also properly consider the content disposition for
582 * UI/MailerUI/UIxMailToSelection.m
583 Removed worthless code.
585 * UI/WebServerResources/MailerUI.css
586 CSS fix for table views.
588 2007-11-15 Ludovic Marcotte <ludovic@inverse.ca>
590 * UI/WebServerResources/MailerUI.js
591 We now check for empty selection and warn the
592 user about it when deleting messages
594 * SoObjects/Mailer/SOGoDraftObject.m
595 Correctly check for the presence of a subject
596 before attempting to forward a message from
599 * SoObjects/Mailer/SOGoMailObject+Draft.m
600 We no longer use "[Fwd: ]" but simply "Fwd:"
601 when forwarding email messages.
603 * SoObjects/SOGo/SOGoUser.m
604 Modified the default forwarding format to be
605 inline instead of "attachment".
607 * SoObjects/Mailer/SOGoDraftObject.m
608 We now create and use a NGMimeContentDispositionHeaderField
609 in order to avoid encoding the whole Content-Disposition
610 header in case a non-ASCII char is present!
612 2007-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
614 * SoObjects/SOGo/iCalEntityObject+Utilities.m ([iCalEntityObject
615 -findParticipant:user]): new method based on the one removed from
616 SOGoCalendarComponent below.
618 * SoObjects/SOGo/iCalEntityObject+Utilities.[hm]: new category
619 module for iCalEntityObject.
621 * SoObjects/Appointments/SOGoCalendarComponent.m
622 ([-findParticipant:user]): removed method.
624 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
625 -setContentString:newContent]): new accessor method.
627 -saveContentString:newContentbaseVersion:newBaseVersion]): invoke
628 -[self setContentString:].
630 * UI/MailPartViewers/UIxMailPartICalViewer.m
631 ([UIxMailPartICalViewer -authorativeEvent]): returns the most
633 ([-isLoggedInUserTheOrganizer]): make use of -[SOGoUser
636 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
637 -stringByConvertingCRLNToHTML]): fixed crashes due to overflows in
638 temporary buffer we are handing.
640 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
641 -setComponent:newComponent]): check that newComponent is non-nil
642 before replacing the default values.
643 ([UIxComponentEditor -calendarList]): privacy is already an ivar.
644 We don't need to refetch it.
646 2007-11-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
648 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
649 -fetchMailForReplying:sourceMailtoAll:toAll]): remove the current
650 user from the list of recipients and make sure no other address is
653 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
654 -stringByConvertingCRLNToHTML]): build the returned NSString
655 without the ending \0.
657 2007-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
659 * UI/MailPartViewers/UIxMailPartICalViewer.m
660 ([UIxMailPartICalViewer -acceptLink])
661 ([UIxMailPartICalViewer -declineLink])
662 ([UIxMailPartICalViewer -tentativeLink]): removed useless methods.
664 * UI/MailPartViewers/UIxMailPartICalAction.m
665 ([UIxMailPartICalAction -addToCalendarAction])
666 ([UIxMailPartICalAction -deleteFromCalendarAction]): new stub
669 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
670 -lookupImap4BodyPartKey:]): make use of the new method below.
672 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
673 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): new method
674 that returns an appropriate Class depending on a given mime type.
676 * UI/SOGoUI/UIxComponent.m ([UIxComponent -canCreateOrModify]):
677 new boolean accessor that determines whether someone can create
678 (i.e. modify a new entry) or modify an existing entry.
680 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
681 -lookupName:lookupNameinContext:localContextacquire:acquire]):
682 overriden method to bind looked up keys to So methods but by
683 avoiding a call to toOneRelationshipKeys. This will be the top
684 method of the chain, meant to override SoObject's behaviour.
686 * SoObjects/Contacts/SOGoContactLDAPFolder.m
687 ([SOGoContactLDAPFolder
688 -lookupName:objectNameinContext:lookupContextacquire:acquire]):
689 removed hack to prevent [super lookupName...] to read the entire
690 LDAP directory when looking up a record.
692 2007-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
694 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
695 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
698 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
699 ([UIxMailPartHTMLViewer -_attachmentIds]): the reference was one
700 character too short, which cause the images not to be displayed
701 sometimes and crashes to happen whenever the references on a
702 message were wrong (due to bugs in SOPE).
704 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
705 -hasMessageAttachment]): consider an attachment any content that
706 has a non-nil disposition.
708 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
709 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
710 fixed method to make use of the parameters instead of the useless
711 remains that weren't even initialized.
713 * SoObjects/Appointments/SOGoAppointmentObject.m
714 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
715 don't propagate the event among the attendees if this is not an
717 ([SOGoAppointmentObject -deleteWithBaseSequence:]): same as above.
719 * Main/SOGo.m ([SOGo -authenticatorInContext:context]): make use
720 of the new category method below.
722 * SoObjects/SOGo/WORequest+SOGo.m ([WORequest
723 -handledByDefaultHandler]): new method that returns whether this
724 is an "so" or alike request.
726 * SoObjects/SOGo/WORequest+SOGo.[hm]: new category module.
728 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
729 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
730 write the new folder's name in the folder cache.
732 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
733 -calendars]): same as below.
735 * UI/Contacts/UIxContactsListViewContainer.m
736 ([UIxContactsListViewContainer -currentContactFolderName]):
737 translate the display name if its the default one.
739 * SoObjects/Appointments/SOGoAppointmentFolder.m
740 ([SOGoAppointmentFolder -create]): overriden method that invokes
741 its ancestor and then activate itself within the user settings.
743 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
744 -appendPersonalSources]): when the user is the owner of the
745 current folder, we create the "personal" folder if it doesn't
746 exist by invoking "create".
748 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
749 -primaryFetchProfile]): when no row is returned, we initialize
750 "values" to a new dictionary. This solves a bug where the defaults
751 would not be initialized properly.
753 2007-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
755 * SoObjects/SOGo/SOGoGCSFolder.m ([-compare:otherFolder]): method
756 moved into the SOGoFolder class.
758 * SoObjects/Appointments/SOGoAppointmentObject.m
759 ([SOGoAppointmentObject -saveContentString:_iCalinUIDs:_uids]):
760 simplified method by directly building a similar appointment
761 object with the current folder as container.
763 * SoObjects/Contacts/SOGoContactLDAPFolder.m
764 ([SOGoContactLDAPFolder
765 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
766 take the content of an object returned by
767 lookupName:inContext:acquire: instead of the dictionary passed as
768 parameter since it represents a flattened entry return by
769 lookupContactsWithFilter...
771 * SoObjects/Contacts/SOGoFolder+CardDAV.m: NSObject+CardDAV
772 category renamed to SOGoFolder+CardDAV.
774 * SoObjects/SOGo/SOGoParentFolder.m: no longer a subclass of
775 SOGoObject, but of SOGoFolder instead.
777 * SoObjects/SOGo/SOGoUserFolder.m: no longer a subclass of
778 SOGoGCSFolder, but of SOGoFolder instead.
780 * SoObjects/Appointments/SOGoAppointmentFolder.m
781 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): fixed
782 to take the new SOGoParentFolder class into account. Also, create
783 the personal folder if it doesn't exist.
785 * SoObjects/SOGo/SOGoFolder.[hm]: new class module implementing
786 the parent of all SOGo containers.
788 * SoObjects/SOGo/SOGoGCSFolder.[hm]: SOGoFolder class renamed to
791 2007-11-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
793 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection
794 -getAddressesFromFormValues:_dict]): take NSString and NSArray
795 values. Ignore addresses with a length of 0.
797 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -mailAccounts]): we now
798 fetch the accounts from the user defaults and create default
801 2007-11-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
803 * UI/MailPartViewers/UIxMailPartTextViewer.m
804 ([UIxMailPartTextViewer -flatContentAsString]): re-added
805 conversion of line-break to sequences of HTML "BR", with a fast
808 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
809 -flatContentAsString]): simplified method now that we know
810 -[NSString stringWithData:usingEncodingNamed:] has a more robust
813 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
814 -showToAddress]): the answer is cached.
816 * UI/Common/UIxObjectActions.m ([UIxObjectActions +initialize]):
817 read "SOGoACLsSendEMailNotifications" from the user defaults to
818 determiner whether to send an email when a user is added or
819 removed from an object's acl.
821 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
822 -contentForEditing]): make sure the htmlContent flag is set to NO
823 when we select the textual part. Also we select only the relevant
826 * UI/MailerUI/WOContext+UIxMailer.m ([-mailSubjectFormatter]):
829 * UI/MailerUI/UIxMailView.m ([UIxMailView -messageSubject]): new
830 method replacing -objectTitle, written like the ones below.
832 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
833 -messageSubject]): rewrote method to act the one below.
835 * UI/MailPartViewers/UIxMailPartMessageViewer.m
836 ([UIxMailPartMessageViewer -messageSubject]): new method that
837 returns the decoded mail subject or "Untitled" if the subject is
840 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
841 -decodedSubject]): new method that invoke -decodedSubject from the
842 NSString and NSData class, depending on the identity of the
843 subject obtained from the envelope.
845 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
846 -subjectForReply]): take the value of -[SOGoMail decodedSubject]
847 instead of the subject of the envelope.
848 ([SOGoMailObject -filenameForForward]): same as above.
849 ([SOGoMailObject -subjectForForward]): same as above.
851 * SoObjects/Mailer/NSString+Mail.m ([NSString -decodedSubject]):
852 same as below for NSString.
854 * SoObjects/Mailer/NSData+Mail.m ([NSData -decodedSubject]): new
855 method that decodes the subject of a mail taken as an NSData
856 instance. Handling the exceptions and the badly formatted headers.
858 * UI/MailerUI/UIxSubjectFormatter.[hm]: dropped class module.
860 2007-11-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
862 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
863 -deleteEntriesWithIds:ids]): make sure the objects returned by
864 lookupName:... are not instances of NSException.
866 2007-11-03 Ludovic Marcotte <ludovic@inverse.ca>
868 * UI/Scheduler/UIxAppointmentEditor.m
869 Fixed monthly recurrences support.
871 2007-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
873 * SoObjects/Appointments/SOGoAppointmentObject.m
874 ([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
875 sent when modifying an event, when the event was considered
876 relevant. The same thing is now implemented for event deletion.
878 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
879 -primaryFetchProfile]): make sure that the deserialized "values"
880 is an instance of NSMutableDictionary, otherwise we override it
883 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
884 -contentForReply]): make use of the SOGoMailReply WO page.
886 * SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
887 from SOGoMailForward to handle mail replies instead. Only three
888 methods remaining: date, from and messageBody. The latter is
891 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
892 -fetchMailForForwarding:sourceMail]): fetch attachments for
895 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
896 -hasMessageAttachment]): initialize hasAttachment with "NO" to
897 avoid false positives.
899 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
900 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
901 set title to an empty string where the event/task summary is null.
903 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
904 -setHeaders:newHeaders]): make sure there is a message id in the
905 headers dictionary, if not, generate one.
906 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
907 message id from the existing draft.
908 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
909 message id in the header map.
911 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
912 -deleteFolderAction]): no longer prefix the target folder with
915 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
916 -listMailboxesAction]): base the folder type on the folder
919 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
920 -lookupName:_keyinContext:acquire:_acquire]): compare the full
921 traversal to the potential looked up folder with the special
922 folder names and return an object with the appropriate
923 SOGoMailFolder subclass.
925 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
926 -traversalFromMailAccount]): don't prepend the whole string with
929 * SoObjects/Mailer/SOGoMailAccount.m
930 ([-lookupSentFolder:_keyinContext:_ctx])
931 ([-lookupDraftsFolder:_keyinContext:_ctx])
932 ([-lookupTrashFolder:_keyinContext:_ctx])
933 ([-lookupFiltersFolder:_key:_ctx]): removed methods.
934 ([SOGoMailAccount -inboxFolderNameInContext:])
935 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
936 ([SOGoMailAccount -sentFolderNameInContext:])
937 ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
938 the resulting name with "prefix" since we might return a nested
940 ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
941 names with "/". Sorts the resulting folder list with
942 localizedCaseInsensitiveCompare: instead of
943 caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
944 that were removed, instead, we choose the appropriate class
945 depending on the folder name. And since we are in SOGoMailAccount,
946 we don't have to compute a traversal path to match the key with
949 -folderWithTraversal:traversalandClassName:className]): new method
950 that returns an instance of the specified SOGoMailFolder subclass,
951 based on the traversal path passed as parameter.
952 ([SOGoMailAccount -inboxFolderInContext:_ctx])
953 ([SOGoMailAccount -draftsFolderInContext:_ctx])
954 ([-sentFolderInContext:_ctx])
955 ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
956 -folderWithTraversal:andClassName: method described above.
958 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
959 -primaryFetchProfile]): make use of -[NSPropertyListSerialization
960 propertyListFromData:mutabilityOption:format:errorDescription:] to
961 deserialize the plist. Removed variant for libFoundation since it
962 should support the above.
963 ([AgenorUserDefaults -generateSQLForInsert])
964 ([AgenorUserDefaults -generateSQLForUpdate]): make use of
965 -[NSPropertyListSerialization
966 dataFromPropertyList:format:errorDescription:] to serialize the
967 plist. Removed variant for libFoundation since it should support
968 the above. Escape the backslashes from the resulting string.
970 2007-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
972 * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
973 SOGoMailFolder: SOGoMailSpecialFolder.
975 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
976 -traversalFromMailAccount]): overridden method that returns the
977 initialized mutable string.
978 ([SOGoMailAccount -allFolderPaths]): take the special folder paths
979 with -traversalFromMailAccount and reposition them at the
980 beginning of the list. By creating the special folders during that
981 request, we also make sure that the folder exists thanks to the
982 new initialisation method of the new "SOGoSpecialMailFolder"
984 ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
986 ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
988 ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
989 longer use lookupImap4Folder.
990 ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
993 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
994 -traversalFromMailAccount]): new method that returns the full
995 IMAP4 path to the object.
997 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
998 "superUsernames" after fetching it from the ud.
1000 2007-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1002 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1003 -eventsListAction]): substitude the start and end date with their
1004 UTC counterpart, taking into account the offset from UTC related
1005 to those dates instead of the current one. This renders
1006 -[UIxCalMainView -userUTCOffset] obsolete because the computings
1007 that occured in javascript are now done server-side.
1009 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
1010 removed obsolete method.
1012 * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
1013 method converting html content to plain text.
1015 * SoObjects/Mailer/NSString+Mail.[hm]: new category module
1016 enhancing NSString with utility methods pertaining to mail handling.
1018 * SoObjects/Mailer/SOGoMailObject.m
1019 ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
1021 -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
1022 modified method to be always recursive and to take an array of the
1023 accepted mime-types as parameter. The returned array now contains
1024 the mime-type as well as the part keys.
1026 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1027 -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
1028 ([SOGoMailObject -contentForEditing]): rewrote method to take into
1029 account the first text/plain part or the first text/html part
1030 converted to text/plain with our new -[NSString htmlToText]
1033 * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
1034 "replyToAll:" with YES as parameter instead of NO.
1036 2007-10-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1038 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1039 -davContentType]): ignore any possible parameter taken from the
1040 mime-info of the body part.
1042 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1043 -lastFirstMessageNumber]): new accessor that returns the first
1044 message number of the last series of messages.
1045 ([UIxMailListView -fetchKeys]): request the bodystructure for each
1047 ([UIxMailListView -hasMessageAttachment]): extract the attachment
1048 information from the message bodystructure.
1050 2007-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1052 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1053 -GETAction:]): use the "application/octet-stream" mime type for
1054 elements of type "application/x-xpinstall" to avoid confusing
1057 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
1058 ([UIxPreferences -itemMessageCheckText])
1059 ([UIxPreferences -userMessageCheck])
1060 ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
1061 methods for handling the retrieval of new messages automatically.
1063 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
1064 that returns the interval of time between automatic message
1067 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1068 -defaultAction]): now expunges the last folder marked for expunge.
1070 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1071 -trashInContext:_ctx]): now marks the container folder for
1074 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1075 -markForExpunge]): new method that marks the folder for the next
1076 automatic expunge operation in the user settings.
1077 ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
1078 takes the last folder marked for expunge, expunges it and removes
1079 it from the user settings, if it exists.
1081 2007-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1083 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1084 -messageSubjectCellStyleClass]): added support for replied,
1085 forwarded, forwarded and replied mails.
1087 * SoObjects/Mailer/NSData+Mail.m ([NSData
1088 -bodyDataFromEncoding:encoding]): new utility method that decodes
1089 the NSData instance properly depending on the encoding string
1090 passed as parameter.
1092 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1093 -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
1095 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1096 -stringForData:_datapartInfo:_info]): simplified by invoking
1097 -bodyDataFromEncoding: from our new NSData category methods.
1099 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1100 -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
1101 where only the body part of the first of the keys fetched was
1102 returned. Also decodes the body parts properly following their
1105 * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
1106 extends the NSData class with utility methods useful for handling
1109 2007-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1111 * SoObjects/SOGo/NSArray+Utilities.m
1112 ([NSArray -stringsWithFormat:format]): replace instances of NSNull
1115 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1116 -keysWithFormat:keyFormat]): replace instances of NSNull with
1119 * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
1120 empty, use "c_cn" instead.
1122 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1123 ([SOGoMailAccount -draftsFolderInContext:_ctx])
1124 ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
1125 of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
1126 no always be specified from the root instead of sometimes from the
1129 2007-10-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1131 * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
1132 ([UIxPageFrame -productLocalizableStrings]): invoke the new
1133 +[SOGoUser language] method if the user is nil.
1135 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
1136 that returns any generically-found language.
1137 ([SoUser -language]): modified to call the above.
1138 ([SOGoUser -language]): modified to call the above if the user
1139 language has a null length.
1141 * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
1142 -davEntityTag]): modified to return the "hash" of the vCard string.
1144 * UI/MailerUI/UIxMailActions.m ([UIxMailActions
1145 -removeAllLabelsAction]): new method that removes all label flags
1146 from the associated message.
1147 ([UIxMailActions -addLabel1Action]
1148 [UIxMailActions -addLabel2Action]
1149 [UIxMailActions -addLabel3Action
1150 [UIxMailActions -addLabel4Action]
1151 [UIxMailActions -addLabel5Action]): new methods that adds label
1152 flags to the associated message.
1153 ([UIxMailActions -removeLabel1Action]
1154 [UIxMailActions -removeLabel2Action]
1155 [UIxMailActions -removeLabel3Action
1156 [UIxMailActions -removeLabel4Action]
1157 [UIxMailActions -removeLabel5Action]): new methods that removes
1158 label flags from the associated message.
1160 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
1161 new accessor that returns the labels associated with the message.
1163 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1164 -allFolderPaths]): new method that returns all the paths of all
1165 the subfolders of the folder object.
1166 ([SOGoMailFolder -allFolderURLs]): new method replacing
1169 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1170 -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
1171 role from its parent folder.
1173 2007-10-19 Francis Lachapelle <flachapelle@inverse.ca>
1175 * SoObjects/SOGo/SOGoUser.m
1176 ([SOGoUser -rolesForObject:objectinContext:context]): allow
1177 multiple super usernames to be defined. The user default
1178 SOGoSuperUsername is renamed SOGoSuperUsernames and must be
1181 2007-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1183 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1184 -userInContext:]): override the super method by returning
1185 anonymous if the super returns nil.
1187 * UI/Common/UIxPageFrame.m ([UIxPageFrame
1188 -productLocalizableStrings]): new method that returns the
1189 product-specific translation dictionary as a JSON hash.
1190 ([UIxPageFrame -commonLocalizableStrings]): same as above but for
1191 the "Common" framework.
1192 ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
1193 the requestor components to require additional Javascript files.
1194 This is useful now that all the scripts are loaded at the end of
1196 ([UIxPageFrame -additionalJSFiles]): new getter related to the
1199 2007-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1201 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
1202 implemented new web method.
1204 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1205 -copyToFolderNamed:folderNameinContext:]): new method with the
1206 code cut/pasted from -moveToFolderNamed:inContext:.
1207 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
1208 modified to use the code from -copyToFolderNamed:inContext:, which
1209 is common between the two actions.
1211 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1212 ([SOGoMailAccount -sentFolderNameInContext:])
1213 ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
1214 the user settings into account.
1216 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
1217 ([UIxMailFolderActions -setAsSentFolderAction])
1218 ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
1219 that change the purpose of the active folder to "Sent", "Drafts"
1222 * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
1223 returns the subject as quoted-printable.
1225 * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
1226 SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
1227 the "aclMethod" method for the subsequent language-dependent
1230 * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
1231 returns the subject as quoted-printable.
1233 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1234 -dealloc]): release item, aptStartDate and aptEndDate.
1236 2007-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1238 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1239 -initWithName:newNameinContainer:newContainer]): the owner of a
1240 shared folder is set to "nobody" by default.
1242 * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
1243 that returns whether the object has an owner or not.
1245 2007-10-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1247 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1248 the folder even if the current user is not its owner.
1250 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
1252 * We now send advisory emails when folders
1253 are created / deleted.
1255 * Fixed the sending of advisory emails upon
1256 ACL changes on folders.
1258 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
1260 * UI/Scheduler/UIxComponentEditor.m
1261 Implemented event/task priority support.
1263 * SoObjects/Contacts/SOGoContactGCSFolder.m
1264 Added CardDAV support.
1266 * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
1267 Implemented From: based on LDAP results based on
1268 the MailFieldNames attribute (an array) specified
1269 in every LDAP-based authentication sources.
1271 * UI/MailPartViewers/UIxMailPartTextViewer.m and
1272 UI/WebServerResources/MailerUI.css
1273 We avoid replacing "\r\n" and "\n" with <br /> and
1274 rather use CSS capabilities for proper formatting.
1275 This is _WAY_ faster on very large mails.
1277 2007-10-10 Francis Lachapelle <flachapelle@inverse.ca>
1279 * UI/Scheduler/UIxComponentEditor.m
1280 ([UIxComponentEditor -componentCalendar]): returns the calendar
1281 object of the current event.
1283 2007-10-05 Ludovic Marcotte <ludovic@inverse.ca>
1285 * UI/WebServerResources/MailerUI.js
1286 We check if at least one message is selected
1287 before performing a Reply/Reply All/Forward
1289 * SoObjects/Appointments/SOGoAppointmentFolder.m
1290 and others - implemented support for recurring
1291 events (with some known limitations right now,
1292 all soon to be fixed).
1294 2007-10-04 Francis Lachapelle <flachapelle@inverse.ca>
1296 * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
1297 the constraint that a username can't start with a digit.
1299 2007-10-02 Francis Lachapelle <flachapelle@inverse.ca>
1301 * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
1302 repository to Inverse's branch.
1304 2007-09-28 Francis Lachapelle <flachapelle@inverse.ca>
1306 * SoObjects/Mailer/SOGoDraftObject.m
1307 ([SOGoDraftObject -isValidAttachmentName:_name]): removed
1308 constraint on space in file name.
1309 ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
1310 now removes from file name all characters preceding a backslash.
1311 This happens with IE7 because the complete attachment file path
1314 2007-09-25 Francis Lachapelle <flachapelle@inverse.ca>
1316 * SoObjects/Appointments/SOGoAptMailNotification.m
1317 ([SOGoAptMailNotification -appointmentURL]): set personal as the
1318 default calendar where to add the event.
1320 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1321 activate the SOGoUIxDefaultModule user defaults.
1323 2007-09-21 Francis Lachapelle <flachapelle@inverse.ca>
1325 * UI/SOGoUI/UIxComponent.m
1326 ([UIxComponent -shortUserNameForDisplay]): returns the string
1327 "wrongusernamepassword" when authentication failed.
1329 2007-09-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1331 * UI/MailPartViewers/UIxMailPartICalViewer.m
1332 ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
1333 entry of the Calendars parent folder.
1335 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1336 -messageSubject]): new accessor method to work-around a problem
1337 within SOPE where a subject could be returned as an NSData.
1339 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1340 -appendPersonalSources]): make sure the value of the "c_path4" of
1341 the returned rows are not NSNull, otherwise, discard them.
1343 2007-09-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1345 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1346 -compare:otherFolder]): new overriden method that compares two
1347 contact foldes based on their class and then transfer the control
1348 to the super method in SOGoFolder.
1350 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1351 ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
1352 compare two contact folders based on their class and then their
1355 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
1356 new method for sorting folders. The folders are compared based on
1357 their ownership, whether they are a main folder and finally
1358 depending on their display name.
1360 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1361 -pathArrayToSOGoObject]): do not reorder the paths if the third
1362 element is an instance of NSNull.
1364 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1365 -subFolders]): returns a sorted array using the "compare:"
1368 2007-09-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1370 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1371 -calendars]): also returns the owner of the listed folders.
1373 * SoObjects/Appointments/SOGoAppointmentFolder.m
1374 ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
1376 * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
1377 method into UIxFolderActions.
1379 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1380 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
1381 freebusy info from the "personal" calendar.
1383 * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
1384 -createFolderAction]): new standardized method for requesting
1385 folder creations among gcs-based modules.
1387 * UI/Common/UIxParentFolderActions.[hm]: new action class module.
1389 * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
1390 module, equivalent to the SOGoParentFolder's child
1391 SOGoContactFolders, but for calendars.
1393 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
1394 method that returns translated strings for controller bundles
1395 (same as what UIxComponent does for view bundles).
1396 ([SOGoObject -pathArrayToSOGoObject]): new method that returns
1397 the real path to a subscribed folder (if subscribed).
1398 ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
1399 ([SOGoObject -globallyUniqueObjectId]): new instance method
1400 calling its class equivalent.
1402 2007-09-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1404 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
1405 whether the user is logged in and if so, redirect to his/her
1407 ([SOGoRootPage -appendToResponse:inContext:]): removed useless
1410 2007-09-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1412 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1413 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1415 ([SOGoFolder -displayName]): new method.
1416 ([SOGoFolder -delete]): accept to proceed only if nameInContainer
1419 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1420 ([SOGoContactLDAPFolder
1421 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1422 renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
1424 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1425 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1426 removed method, reimplemented in SOGoFolder.
1427 ([SOGoContactGCSFolder -displayName]): removed method,
1428 reimplemented in SOGoFolder.
1429 ([-delete]): removed method, modified in SOGoFolder.
1431 * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
1432 a subclass of SOGoParentFolder.
1434 * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
1435 from SOGoContactFolders and modified to be more content-independent.
1437 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
1438 ([UIxMailActions -markMessageReadAction]): new methods moved from
1439 UIxMailListView and adapted to invoke the client object directly,
1440 since the previous versions had to to a lookup from the parent
1443 * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
1444 method into UIxMailActions.
1445 ([-markMessageReadAction]): same as above.
1446 ([-viewAction]): removed useless method.
1447 ([-javaScriptOK]): removed useless method.
1448 ([-isJavaScriptRequest]): removed useless method.
1449 ([-lookupActiveMessage]): removed useless method.
1451 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1452 -responseWithStatus:status]): new method that returns a WOResponse
1453 initialized with the specified status code.
1454 ([WODirectAction -responseWith204]): new method that invokes the
1455 above one with "204" as parameter.
1456 ([WODirectAction -redirectToLocation:newLocation]): rewrote method
1457 to make use of -responseWithStatus:.
1459 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
1460 method that returns a WOResponse initialized with the 204 status
1463 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
1464 always use a "not deleted" search qualifier along with the user
1465 qualifier (if present).
1467 2007-09-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1469 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1470 -contactSearchAction]): only return the records which have an
1473 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1474 -trashInContext:_ctx]): no longer expunge the mailbox after
1475 marking a message deleted.
1476 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
1479 * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
1480 ([-trashAction]): moved method into UIxMailActions.
1481 ([-moveAction]): moved method into UIxMailActions.
1483 2007-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1485 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1486 ([_UIxHTMLMailContentHandler
1487 -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
1488 comments from the CSS code, do not add the CSS code to the body
1489 content and remove references of body from the CSS declarations.
1490 ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
1491 ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
1492 common with cssContent in a different method and invoke it only
1495 * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
1496 instead of UIxPageFrame.
1498 2007-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1500 * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
1501 ([-appendToResponse:responseinContext:ctx]): commented out.
1502 ([SOGoRootPage -connectURL]): new accessor that returns the full
1503 url the the "connect" method.
1504 ([-connectAction]): rewrote method to return a properly formatted
1505 auth. cookie based on the username and password passed as
1508 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1509 set the value of the cookie to "discard" and set its expiration
1512 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1513 -preprocessCredentialsInContext:context]): consider the user
1514 anonymous if the cookie value is "discard".
1515 ([SOGoWebAuthenticator
1516 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1517 set the expiration date of the cookie to yesterday.
1519 * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
1520 returns the path to the application if the clientObject is not a
1523 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
1524 moved the requirement of authentication from the SOGo application
1527 * SoObjects/Appointments/SOGoAppointmentObject.m
1528 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
1529 check whether the new appointment object is still relevant before
1530 sending a notification.
1532 2007-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1534 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1535 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1536 render the login page through the SoDefaultRenderer.
1538 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
1539 -isPublicInContext:localContext]): new overriden method that
1542 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1543 -currentCalendarLogin]): replace css-unsafe characters with _.
1545 * UI/SOGoUI/UIxComponent.m ([UIxComponent
1546 -shortUserNameForDisplay]): simplified method.
1547 ([-user]): removed method since [context activeUser] is as useful.
1549 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1551 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1552 set the cookie path to "/".
1554 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
1555 authenticator based on the request handler key. "dav" returns the
1556 SOGoDAVAuthenticator, anything else returns the Web authenticator.
1558 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
1559 "SOGoAuthenticator".
1561 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
1562 implementing a subclass of SoCookieAuthenticator, designed for
1563 web-based cookie authentication of users.m
1565 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1566 new method that resets the authentification cookie.
1568 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1570 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
1571 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
1572 didBind to NO to make sure no false authentication is returned if
1573 the bind operation is not executed.
1575 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1577 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
1578 "In-Reply-To" header field when replying.
1580 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
1581 table field names that are queried.
1583 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1584 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
1585 add the "c_" prefix to the quick table field names that are
1588 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1590 * SoObjects/Appointments/SOGoAppointmentFolder.m
1591 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
1592 "personal" to the ocs path of the appointment folder.
1594 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1595 -flatContentAsString]): use latin1 when the encoding is not
1596 specified, and to reencode data chunk which were not correctly
1597 decoded with the original charset.
1599 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
1600 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
1601 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
1602 ([SOGoAppointmentFolder
1603 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
1604 override those methods to use the "personal" additional directory.
1606 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
1607 append "/personal" to the calendar path to simulate a single
1608 calendar in a choice of many.
1610 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1611 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
1612 methods back here. Moved the folder existence check here, and do
1613 it on self only when the lookup happens for a non-folder object.
1614 This permits to accept entries for folders with parents who
1617 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1619 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1620 -shouldTakeValuesFromRequest:requestinContext:context]): same as
1623 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1624 -shouldTakeValuesFromRequest:requestinContext:context]):
1625 redesigned method since any method called can be received from a
1626 POST or a GET. Instead we check the method call itself and we
1627 accept only if it has the "save" prefix.
1629 * SoObjects/Appointments/SOGoAptMailNotification.m
1630 ([SOGoAptMailNotification -getSubject]): returns the subject an a
1631 quoted-printable encoded string, if needed.
1633 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1634 -asQPSubjectString:encoding]): moved method into
1635 NSString+Utilities.m.
1637 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1639 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1640 -messageForwardingList])
1641 ([UIxPreferences -itemMessageForwardingText])D
1642 ([UIxPreferences -userMessageForwarding])
1643 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
1644 new template methods for manage the user preference regarding
1647 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
1648 algorithm to return, in order, the user's defined language or the
1649 first browser language or, finally, the default language.
1650 ([SOGoUser -messageForwarding]): new method that returns the user
1651 preference for message forwarding: "inline" or "attached",
1652 defaulting to "attached".
1654 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1655 -contentForInlineForward]): new method that returns the content of
1656 the message for inline forwarding based on the SOGoMailForward
1659 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1660 -fetchMailForForwarding:sourceMail]): check the user preference
1661 for message forwarding and compose inline forwarded messages if required.
1663 * SoObjects/Appointments/SOGoCalendarComponent.m
1664 ([SOGoCalendarComponent
1665 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1666 now use a template based on the language returned from the
1669 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
1670 a subclass of SOGoMailForward for English locale.
1672 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
1673 a subclass of SOGoMailForward for French locale.
1675 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
1676 helps build template for inline forwarded messages.
1678 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1680 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
1681 to handle "<var:if-ie>" template tags.
1683 * UI/SOGoElements: new extension bundle containing sogo-specific
1686 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1687 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
1688 selected in the dialog.
1689 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
1690 first category, if ever, of the calendar entity.
1692 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1693 -composeAction]): restored method since it is needed by the
1696 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1697 -composeAction]): the address fields should be arrays and not
1700 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
1701 that returns the build date of SOGo in the template.
1703 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1705 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1706 -_flattenedRecords:records]): when the c_cn field is empty,
1707 returns set a formatted string with the concatenation of
1708 c_givenname and c_sn as the displayName.
1710 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1711 -isValidMailAccountName:_key]): prevent unknown accounts from
1714 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1715 -pathToAttachmentObject]): we no longer need the filename
1716 extension for SoLookup...
1718 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1719 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
1720 filename to have an extension, and thus accept any filename.
1722 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1723 -currentCName]): new method that returns the c_name of the
1724 contact, correctly escaped to be passed by url afterwards.
1726 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1727 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
1728 instance of [self decodedFlatContent] instead of the buggy
1729 NSString from [super flatContentAsString] to the parser.
1731 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1733 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
1734 new category method to reponds to the "delete" web command on
1736 ([UIxMailActions -deleteAttachmentAction]): new category method to
1737 reponds to the "deleteAttachment" web command on drafts, taking
1738 the "filename" url parameter into account.
1740 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1741 -contentForEditing]): new method that retrieve the editable mail
1743 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
1744 returns the body keys for attached files (parts with a "filename"
1747 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1748 -asQPSubjectString:encoding]): do not change the string if the
1749 encoded string has the same length (which means it is already
1751 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
1752 that retrieve a draft along with its attachments for editing.
1753 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
1754 choke if the "to" header field is empty.
1755 ([SOGoDraftObject -delete]): new method to delete the draft folder
1756 whenever operations are done.
1758 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1760 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
1761 useless stub method, of which the intention was implemented in
1763 ([-lookupSentFolderUsingAccount]): removed obsolete method.
1764 ([-selectedMailIdentity]): removed obsolete method.
1765 ([-lookupSentFolderUsingFrom]): removed obsolete method.
1766 ([-storeMailInSentFolder:_path]): removed obsolete method, of
1767 which the mechanism has been put in -[SOGoDraftObject sendMail]
1769 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
1770 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
1771 adapted algorithms to the new SOGoDraftObject methods.
1772 ([-deleteAction]): removed method since local draft objects cannot
1773 be removed by the user.
1775 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1776 -expungeAction]): new method replacing the one previously found in
1778 ([UIxMailFolderActions -createFolderAction])
1779 ([UIxMailFolderActions -renameFolderAction])
1780 ([UIxMailFolderActions -deleteFolderAction])
1781 ([UIxMailFolderActions -emptyTrashAction])
1782 ([UIxMailFolderActions -subscribeAction])
1783 ([UIxMailFolderActions -unsubscribeAction]): error situations
1784 should have http return code 500 instead of 403.
1786 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1787 -composeAction]): new method replacing the one previously in
1790 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1791 -imap4URLString]): removed overriden method (see below).
1793 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
1794 cache the mailbox acl.
1795 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
1796 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
1798 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
1799 the new method of determining the users mail accounts.
1801 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
1802 longer adds a "/" at the end of the string (the default for
1803 folders), therefore this will be overriden in SOGoMailFolder
1804 rather than in SOGoMailObject.
1806 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
1807 method, moved into the new UIxMailActions module class.
1809 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
1810 -newDraft]): new method that returns a new SOGoDraftObject
1811 instance with a unique filename based on the current timestamp and
1812 the "newDraft" prefix.
1814 -lookupName:nameinContext:localContextacquire:acquire]): overriden
1815 method by detecting local drafts with their "newDraft" prefix.
1816 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
1818 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
1819 from scratch by making it a subclass of SOGoMailFolder.
1821 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
1824 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
1827 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
1830 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
1831 new method, initializing the new ivars: IMAP4ID, headers, text,
1832 sourceURL and sourceFlag.
1833 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
1834 ([-_ensureUserSpoolFolderPath])
1835 ([-saveMimeMessageToTemporaryFileWithHeaders:])
1836 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
1837 ([-deleteTemporaryMessageFile:], [-delete], [-content])
1838 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
1839 ([-uid], [-flags], [-size], [-envelope]): removed methods.
1840 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
1842 ([SOGoDraftObject -setSourceURL:newSourceURL])
1843 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
1844 methods to store the url of the original message between accesses
1845 so that, depending on the action taken (forward or reply), the
1846 correct flag can be given.
1847 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
1848 the imap4 id that is returned for the message whenever it is saved
1849 into the drafts folder.
1850 ([SOGoDraftObject -save]): new method that takes in charge the
1851 saving of the message in the IMAP drafts folder.
1852 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
1853 new method that fills the original data of the new message with
1854 the reply content of the original message.
1855 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
1856 above for message forwarding.
1857 ([-spoolFileManager]): removed useless method (only returned the
1858 default filemanager...)
1859 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
1860 the resulting message as an NSData chunk.
1862 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
1863 containing a rewrite of the mail action methods found in
1864 UI/Mailer/, that needed to be put in the SOGoMailObject class.
1865 ([SOGoMailObject -subjectForReply]): new method that returns a
1866 subject suitable for replies.
1867 ([SOGoMailObject -contentForReply]): new method that returns the
1868 textual content of an email, quoted for replying.
1869 ([SOGoMailObject -filenameForForward]): new method that returns
1870 the name of the filename that should contain the forwarded
1871 message, based on its subject.
1872 ([SOGoMailObject -subjectForForward]): explicit.
1874 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1876 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1877 -mailAccounts]): rewrote method to return the name of the mail
1878 accounts now available with the -[SOGoUser mailAccounts] method.
1879 ([UIxMailMainFrame -showLinkBanner]): removed method.
1880 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
1881 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
1882 ([UIxMailMainFrame -rootURL]): removed method.
1883 ([UIxMailMainFrame -userRootURL]): removed method.
1884 ([UIxMailMainFrame -calendarRootURL]): removed method.
1885 ([UIxMailMainFrame -contactsRootURL]): removed method.
1886 ([UIxMailMainFrame -hasErrorText])
1887 ([UIxMailMainFrame -errorText])
1888 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
1889 ([-composeAction]): removed method. Now provided by
1890 UIxMailAccountActions.
1891 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
1892 ([UIxMailMainFrame -hideFolderTree]): removed method.
1893 ([UIxMailMainFrame -treeRootClassName]): removed method.
1894 ([UIxMailMainFrame +initialize]): removed method.
1895 SOGoMailTreeRootClass userdefaults will no longer have any effect.
1897 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1898 -redirectToLocation:newLocation]): new method that implements the
1899 same functionality as WOComponent.
1901 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
1903 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
1904 method that returns whether the current mail is store in the
1905 drafts folder hierarchy.
1907 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
1908 ([-primaryEmail]): removed method.
1909 ([SOGoUser -primaryIMAP4AccountString]): removed method.
1910 ([SOGoUser -mailAccounts]): new method that returns an array
1911 containing description dictionaries for all the user mail
1912 accounts. Each account also contain the user's identities for that
1914 ([SOGoUser -allIdentities]): new utility method that returns all
1915 the user identities on all accounts.
1916 ([SOGoUser -primaryIdentity]): new method return the first
1917 identity of the first account.
1919 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
1921 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1922 -isInDraftsFolder]): returns NO.
1923 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
1925 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
1927 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1928 -isInDraftsFolder]): new method that detects if self is contained
1929 by the drafts folder by calling itself on the container object.
1931 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
1933 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
1934 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
1935 return the name of the mail accounts now available with the
1936 -[SOGoUser mailAccounts] method.
1938 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
1941 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
1944 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1945 -keysWithFormat:format]): method that forward the method of the
1946 same name to each member of the array, considering they all are
1947 instances of NSDictionary.
1948 ([NSArray -objectsForKey:key]): same principle as above.
1949 ([NSArray -flattenedArray]): new method that transforms an array
1950 of arrays into a single array containing all the elements of the
1953 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1954 -keysWithFormat:keyFormat]): new method inspired by the python
1955 string formatting system and which replaces occurences of "%{key}"
1956 by the corresponding keys.
1958 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1960 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
1961 sql script before the generic one when initializing mandatory
1964 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1966 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1967 -pureEMailAddress]): new utility method inspired by the
1968 "_rawSender" private method in SOGoDraftObject, which it now
1971 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
1972 provides a common API for sending emails, no matter what the
1975 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1977 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1978 -quotasAction]): invoke "relativeImap4Name" instead of
1979 "nameInContainer" since the latter also returns the "folder"
1982 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1983 -listMailboxesAction]): declare the output as text/plain in UTF-8.
1985 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1986 -deleteFolderAction]): fixed the url of the destination folder.
1988 * Main/SOGo.m ([SOGo +initialize]): show the build date and
1989 hostname at startup.
1991 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1993 * SoObjects/Appointments/SOGoCalendarComponent.m
1994 ([SOGoCalendarComponent
1995 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1996 set the mail date to the current date string returned by our
1997 rfc822DateString extension method.
1999 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2000 -_gcsFoldersFromFolder:): ignore the personal folders who are
2001 returned but don't really exist.
2003 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
2005 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
2006 has to return only one element.
2008 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2010 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
2011 -content]): new method returning the decoded content of the
2012 corresponding attachment as an NSData instance.
2013 ([UIxMailPartViewer -filename]): if the "filename" parameter of
2014 the metadata parameterList is empty, try to find out the filename
2015 from the "disposition" metadata returned with the BODYSTRUCTURE
2018 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
2019 -composeAction]): prefix the INBOX folder with "folder".
2021 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
2022 -relativeImap4Name]): return nameInContainer stripped from its
2023 first 6 characters since all folder names are prefixed with
2026 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2027 -imap4URLString]): invoke -relativeImap4Name instead of
2028 "nameInContainer" since the former will return the fixed IMAP4
2029 foldername and the latter the SoObject name.
2031 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2032 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
2034 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
2035 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
2036 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
2037 ([SOGoMailAccount -sentFolderNameInContext:])
2038 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
2039 names with "folder".
2040 ([SOGoMailAccount -inboxFolderInContext:_ctx])
2041 ([SOGoMailAccount -sentFolderInContext:_ctx])
2042 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
2043 the folder names with "folder" since they are prefixed earlier.
2045 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2047 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
2048 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
2049 all starts with "folder".
2051 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
2052 longer declare security info from here.
2054 * SoObjects/Mailer/SOGoMailFolder.m
2055 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
2056 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
2057 folder names now always start with "folder".
2059 * SoObjects/Mailer/SOGoMailAccount.m
2060 ([-lookupName:inContext:acquire:]): folder names now always start
2063 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2065 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
2066 -forwardAction]): adapted to the new saveAttachment:withMetadata:
2069 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
2070 code to save the attached filenames with the filename returned by
2071 the web server as well as their mime types.
2073 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
2074 ([UIxMailPartMessageViewer -toAddresses])
2075 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
2076 the corresponding fields separated with a ", " (if needed).
2078 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
2079 -saveAttachment:_attachwithMetadata:metadata]): new method
2080 replacing -saveAttachment:withName: and which takes a dictionary
2081 as parameter with the filename and the mime type of the
2083 The mimetype is then saved in a hidden text file.
2084 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
2085 take the mime type from the hidden text file related to the
2088 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
2089 ([SOGoContactGCSFolder
2090 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2091 return records if the db records are > 0 and not just > 1...
2093 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2095 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
2097 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
2099 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2100 ([SOGoContactLDAPFolder
2101 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2102 translate the returned records to a normalized form.
2104 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2105 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2106 translate the returned records to a normalized form.
2108 * UI/Scheduler/UIxCalListingActions.m,
2109 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
2110 SoObjects/SOGo/AgenorUserDefaults.m,
2111 SoObjects/Contacts/SOGoContactGCSFolder.m,
2112 SoObjects/Appointments/SOGoAppointmentFolder.m,
2113 OGoContentStore/OCSiCalFieldExtractor.m,
2114 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
2115 table fields with "c_".
2117 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2119 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
2120 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
2121 the application settings. If set, both limit will influence the
2122 maximum size of the resultsets and the time taken to solve them.
2123 ([LDAPSource -_initLDAPConnection]): initialize the limits.
2125 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2127 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
2128 method that declares the DAV namespace related to CardDAV.
2129 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
2130 method that declares the "access-control" and "addressbook-access"
2131 classes to the list.
2133 * SoObjects/Appointments/SOGoAppointmentFolder.m
2134 ([-lookupActionForCalDAVMethod:]): removed method.
2135 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
2136 method that declares the DAV namespace related to CalDAV.
2138 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
2139 optional method for subclasses which handle specific extensions to
2140 the DAV protocol: CardDAV or CalDAV.
2142 -lookupName:lookupNameinContext:localContextacquire:acquire]):
2143 new overriden method that handles dav invocations for extensions
2144 to DAV by returning an appropriate SoSelectorInvocation.
2146 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2147 -asDavInvocation]): new method returning a dictionary with a "ns"
2148 key representing the dav namespace and a "method" key representing
2149 the dav method name of the request.
2151 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
2152 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
2154 ([UIxPreferences -shouldDisplayPasswordChange]): new template
2155 method that returns the value of SOGoUIxUserCanChangePassword.
2157 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
2158 scan the value of SOGoUIxDefaultModule. If not set, the default
2159 module defaults to "Calendar".
2160 ([SOGoUserHomePage -defaultAction]): redirect the user to the
2161 value of "SOGoUIxDefaultModule".
2163 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2165 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2166 -contactInfos]): cache the results to avoid multiple invocations.
2168 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2169 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
2170 really should return something or if we fake to return nil...
2172 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2174 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
2175 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
2176 default is set to "bypass".
2178 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2179 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
2180 when authMethod is set to "bypass" from now on. This would avoid a
2181 security concern with a default installation of SOGo.
2182 AuthentificationMethod is now prefixed with "SOGo" for better
2185 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2187 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2188 -quotasAction]): new method that returns a json representation of
2191 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2193 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2194 -imap4URL]): rewrote method to support accented mailbox names.
2195 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
2196 SOGoAuthenticator's passwordInContext:.
2198 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2199 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
2200 start and due dates to nil if hasStartDate and hasDueDate are
2203 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2204 -passwordInContext:context]): made method public.
2206 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2207 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
2208 to false to avoid a null violation.
2210 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2212 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2213 -contentAsString]): returns the message encoded in ISO Latin 1
2216 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
2217 SOGoSuperUsername user defaults.
2218 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
2220 ([SOGoUser -rolesForObject:objectinContext:context]): if the
2221 current user is the superuser, grant him/her the "owner" role.
2223 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
2224 the folder only if the current user is the owner of the future
2227 * SoObjects/Appointments/SOGoCalendarComponent.m
2228 ([SOGoCalendarComponent -contentAsString]): we return the content
2229 based on the permissions returned by the security manager instead
2230 of by looking at the user roles.
2232 * SoObjects/Appointments/SOGoAppointmentFolder.m
2233 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
2234 folders of the user to whom this folder belongs instead of the
2235 active user. This way, a delegate user will be able to have the
2236 same view that the original user has if he connects from his user
2239 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
2240 user exists before creating the SOGoUserFolder instance. If not,
2243 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
2244 return the message source code in plain text.
2246 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2247 -contentAsString]): returns the message encoded in UTF8.
2249 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2251 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
2252 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
2253 leading tagname into account when serializing the element values.
2255 * Main/SOGoProductLoader.m: only load bundle directories ending
2256 with the "SOGo" extension.
2258 * Main/SOGo.m ([SOGo
2259 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
2260 result set if the query has caused no exception. Otherwise we get
2261 an "evaluation is in progress exception".
2263 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2265 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2266 -generateSQLForInsert]): initialize error to nil before the
2267 serialization. Otherwise the method can get confused if it ever is
2268 initialized to something else.
2270 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
2271 -folderIsMandatory]): returns NO unconditionnally.
2273 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2274 -appendPersonalSources]): add the "personal" folder to the list of
2275 user folders even if it doesn't exist, so that it is created when
2276 the user accesses it.
2278 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2279 -folderIsMandatory]): returns YES if nameInContainer is set to
2280 "personal", which is the default address book.
2282 * SoObjects/Appointments/SOGoAppointmentFolder.m
2283 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
2284 users must have one Calendar folder (one and only one).
2285 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
2286 escaping '\' so make the carriage return a real one. This way,
2287 PgSQL 8 won't complain about escaping the string.
2289 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
2290 method that create the folder if considered mandatory.
2291 ([SOGoFolder -folderIsMandatory]): new method that determines
2292 whether the folder should be created automatically or not. To be
2293 overriden by subclasses.
2295 * Main/SOGo.m ([SOGo -run]): override method and create the
2296 missing system tables if needed.
2298 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2300 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
2301 -mailDateFormatter]): returns the user's date formatter.
2303 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
2304 applies the user timezone to the date object before returning it.
2306 * UI/Common/UIxSortButton.m: removed useless class module.
2308 * UI/Common/UIxSortableTableHeader.m: removed useless class
2311 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2312 -contactInfos]): use the "asc" url parameter instead of "desc" to
2313 determine the ordering.
2314 ([-sortOrdering]): removed method.
2315 ([UIxContactsListView -init]): removed the "searchText" ivar.
2316 (general): the template no longer use the UIxSortableTableHeader
2319 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
2320 -defaultSortKey]): default sort following the messages arrival
2321 instead of their date.
2322 ([-isSortedDescending]): removed method.
2323 ([-imap4SortOrdering]): use the "asc" url parameter instead of
2324 "desc" to determine the ordering.
2325 (general): the template no longer use the UIxSortableTableHeader
2328 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2330 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
2332 ([-setQualifier:_msg], [-qualifier]): removed methods.
2333 ([UIxMailListView -defaultAction]): added code to handle the
2334 search criteria and value passed as url parameters. Also, we now
2335 handle the same search criterias as Thunderbird/Icedove.
2337 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2339 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
2340 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
2341 the string instead of the string itself.
2342 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
2344 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
2345 bool var "acceptAnyUser" that is set when the AuthenticationMethod
2346 user default is nil.
2347 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
2348 unconditionnally returns an instance whenever acceptAnyUser is set.
2350 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2352 * Main/sogod.m (main): prevent SOGo from running as root.
2354 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2356 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2357 -setCurrentPassword:newPassword]): new stub method.
2358 ([SOGoUser -dateFormatterInContext:context]): new method that
2359 returns an instance of SOGoDateFormatter configured based on the
2362 * UI/Common/UIxPageFrame.m ([UIxPageFrame
2363 -relativePreferencesPath]): new method.
2365 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
2366 removed useless method.
2368 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
2369 different configurable formats (long and short date + time).
2371 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
2373 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2374 -isInternetRequest]): removed method.
2376 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2377 -jsonRepresentation]): new method with an explicit name.
2379 * UI/PreferencesUI/product.plist: new bundle that provides a web
2380 ui for handling user defaults.
2382 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
2384 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
2386 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
2388 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2390 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
2392 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2394 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
2395 -compareEventsAscending:otherEvent]): no longer use compare: on
2396 the time objects since one of them could be an NSNull, which
2397 crashes when comparing with anything.
2399 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2400 -eventsListAction]): sort events from here.
2401 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
2403 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
2404 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
2406 * SoObjects/Appointments/SOGoAppointmentFolder.m
2407 ([SOGoAppointmentFolder
2408 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
2409 no longer sort elements from here.
2411 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2413 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2414 -aclsForUser:uid]): implemented method by forwarding the request
2415 to the container. This fixes a bug where users could no longer
2416 read emails from shared folders.
2418 * SoObjects/Appointments/SOGoCalendarComponent.m
2419 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
2420 here, but rather in its parent class.
2422 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
2423 -stringForSecondsSinceThe70s:seconds]): new utility method.
2425 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2426 -eventsListAction]): no longer reduce the end day of one day for
2427 all day events since everything has been fixed in
2428 OCSiCalFieldExtractor.
2430 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2431 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
2432 the end date of all day events of 1 so that they stay on their
2435 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2437 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
2439 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
2441 ([-fetchCoreTasksInfos]): removed method.
2443 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2444 -init]): initialize an instance of SOGoDateFormatter.
2445 ([UIxCalListingActions -eventsListAction]): the display start and
2446 end dates are added to the listing for each event.
2448 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
2450 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2451 -isAllDay]): returns YES if the "hm" url parameter is set to
2453 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
2454 is displayed one day earlier.
2456 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2458 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2459 -_setupContext]): take the range of dates specified by the popup
2462 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
2463 WODirectAction that returns WOResponse objects with the events or
2464 todos satisfying the parameters passed in the url.
2466 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2467 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
2468 "isAllDay" into account and compute the amount of days to pass to
2471 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
2473 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
2474 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
2475 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
2476 new method that returns a json-formatted array of the visible tasks
2477 for the current user.
2479 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2481 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
2482 object must be present in the list of UIDs we delete the object
2483 from. Otherwise Calendar objects having no organizer and no
2484 attendees will remain in their owner's Calendar.
2486 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2487 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
2488 first 3 elements of the path array if the url returned by
2489 baseURLInContext: returns a hostname.
2491 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2492 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
2493 nil, in which case a crash happens when calling hasPrefix:.
2494 ([SOGoMailFolder -_sharesACLs]): same as above.
2495 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
2496 otherUsersFolderName is nil, we return nil.
2497 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
2498 nil from [self otherUsersPathToFolder], we return nil too.
2500 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2502 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2503 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
2504 the result of [self baseURLInContext:] to avoid a double escaping
2505 in the resulting string.
2507 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
2508 the user has the "ObjectReader" role on the parent container, then
2509 he is granted the "ObjectViewer" role on this object. Same for
2510 "ObjectEraser", although this might change later.
2512 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2513 -toolbar]): determine the toolbar filename based on the
2514 permissions declared by the securitymanager. The role mechanism
2515 has been adjusted on a lowerlevel so we can simplify the code.
2517 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2518 -initWithName:newNameinContainer:newContainer]): read the content
2519 directly from here. That way we can determine whether the object
2521 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
2522 the ObjectCreator role is enabled, we also grant the ObjectEditor
2523 role to the current user.
2525 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
2526 changed the method paradigm to only return HTTP code 204. Not test
2527 is done whatsoever since the security manager does it for us.
2529 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
2530 removed method because the same exists in UIxFolderActions.m
2532 * UI/Contacts/UIxContactsUserRightsEditor.m
2533 ([UIxContactsUserRightsEditor
2534 -setUserCanReadObjects:userCanReadObjects]): new method.
2536 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
2537 "FolderEraser" and special permission "Access Object". Removed
2538 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
2539 can be used instead. Removed "FolderReader" since it is useless.
2541 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2542 -vCard]): directly use the "content" ivar since it is initialized
2543 during object creation.
2545 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2546 ([SOGoContactLDAPFolder -init]): no longer handle the
2547 nameInContainer no the container ivars. They were removed because
2548 this class is a descendant of SOGoObject which already has them.
2549 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
2550 returning "displayName".
2551 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
2554 * SoObjects/Appointments/SOGoCalendarComponent.m
2555 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
2556 ([SOGoCalendarComponent -findParticipant:user]): new name for
2557 method "participant:".
2558 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
2559 findparticipant but taking a uid string as parameter.
2560 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
2561 iCalendar automatically. Instead, this is done only when the user
2562 is a "date and time viewer".
2563 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
2564 (modifier and responder) into account by compiling them with the
2567 * SoObjects/Contacts/SOGoContactFolder.h: removed
2568 "nameInContainer" from the list of required methods.
2570 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
2571 -davContentType]): returns "text/calendar".
2573 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2574 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
2575 groupdav resource-type.
2577 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2578 -davContentType]): same as below.
2580 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2581 -initWithName:newNameinContainer:newContainer]): new overriden
2582 method setting the custom owner directly.
2584 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2585 -davContentType]): same as below.
2587 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2588 -davContentType]): same as below.
2590 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
2591 declare "httpd/unix-directory".
2593 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
2594 "UTC" as fallback timezone instead of "Canada/Eastern".
2595 ([-hasEmail:email]): make use of the new NSArray's
2596 containsCaseInsensitiveString: method.
2598 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2599 -davContentType]): declare "message/rfc822" as content type.
2601 * SoObjects/Appointments/SOGoAppointmentFolder.m
2602 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
2604 ([SOGoAppointmentFolder
2605 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
2606 ([-fetchContentObjectNames]): commented out method since it was
2607 usefull only for testing Funambol.
2609 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
2610 -containsCaseInsensitiveString:match]): an enhanced version of
2613 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
2615 ([-showMarkDeletedButton]): removed useless method.
2616 ([-showTrashButton]): removed useless method.
2618 * SoObjects/Appointments/iCalEntityObject+SOGo.m
2619 ([iCalEntityObject -userIsParticipant:user]): new proxy method
2620 that invoked isParticipant on self for each possible email
2621 addresses of the user passed as parameter.
2622 ([iCalEntityObject -userIsOrganizer:user]): same as above.
2624 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
2627 * SoObjects/Appointments/SOGoAppointmentObject.m
2628 ([SOGoAppointmentObject
2629 -saveContentString:contentStringbaseVersion:baseVersion]): remove
2630 method since an event may not have an organizer.
2632 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2633 -GETAction:localContext]): clarified method. Added support for
2634 content-type (thanks to Helge Hess).
2635 ([SOGoObject -initWithName:_nameinContainer:_container]):
2636 initialize and retain the owner.
2637 ([SOGoObject -davContentType]): returns "text/plain".
2639 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2641 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2642 -addUserInAclsAction]): send an acl addition mail.
2643 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
2646 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2647 -_realActionWithFolderName:folderDict]): handle the possible
2648 presence of the "mail-invitation" url parameter. If present, the
2649 user will be redirected to the relevant folder.
2651 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
2652 ([SOGoUser -language]): new method that returns the user's
2653 preferred language, or the system's if none has been set yet.
2655 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
2656 that returns the full dav url to self.
2657 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
2658 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
2659 returns the full so url to the base of the SOGo module to which
2660 self belongs, and for the specified user.
2661 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
2662 but for the current user.
2663 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
2664 required by the acl advisory templates and which returns a link
2665 the target user can click to activate its new subscription.
2666 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
2667 but for inclusion of the application/x-sogo-notification part,
2668 which will be handled by the Lightning enhancer plugin.
2670 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
2671 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
2672 do nothing yet since imap folder subscription is not handled yet.
2674 * SoObjects/SOGo/SOGoContentObject.m
2675 ([-hasSupportForDefaultRoles]): removed method.
2677 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2678 -getFullEmailForUID:uid]): new method that returns the username +
2681 * SoObjects/Appointments/SOGoCalendarComponent.m
2682 ([SOGoCalendarComponent +initialize]): the default language for
2683 mail templates is now set to English.
2685 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
2686 SOGoACLAdvisory implementing the french template for user removal
2689 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
2690 SOGoACLAdvisory implementing the french template for user
2693 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
2694 SOGoACLAdvisory implementing the english template for user removal
2697 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
2698 SOGoACLAdvisory implementing the english template for user
2701 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
2702 supercall of all the acl advistory templates. The model is based
2703 on SOGoAptMailNotification except that the template encapsulates
2704 the message to be sent. Later, we might create a superclass common
2705 to all template-based emails.
2707 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2708 -addRange:newRange]): new method that store a string
2709 representation of the NSRange passed as parameter.
2710 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
2711 any range contained in self intersect with the one passed as parameter.
2713 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
2714 store ranges in an array to prevent them from intersecting with
2715 each other during the passes.
2717 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2719 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2720 -primaryFetchMailboxInfo]): useless method. Removed.
2722 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2724 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2725 -toManyRelationshipKeys]): invoke [self subfolders].
2726 ([SOGoMailFolder -subfolders]): new method containing what used to
2727 be in toManyRelationshipKeys.
2728 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
2731 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2732 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
2733 named and at the beginning of which we put the predefined folders.
2735 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2736 -emptyTrashAction]): new method inspired by a similar one from
2737 UIxMailListView, to which we added the ability to remove
2740 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
2741 method. Replaced with a similar one in UIxMailFolderActions.
2743 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2744 -renameFolderAction]): implemented method.
2745 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
2746 specified folder. Instead, we put it in the trash folder.
2748 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
2749 method, replaced with a similar method in the new
2750 UIxMailFolderAction class module.
2751 ([-deleteFolderAction]): idem.
2753 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2754 -createFolderAction]): new method implementing subfolder creation.
2755 ([UIxMailFolderActions -renameFolderAction]): new method
2756 implementing subfolder renaming (basic implementation to be
2758 ([UIxMailFolderActions -deleteFolderAction]): new method
2759 implementing folder deletion.
2761 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
2762 web actions related to the handling of imap folder.
2764 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2766 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2767 -ownerInContext:localContext]): overriden method because we are an
2768 IMAP4 client and we need a bit more intelligence to deduce the
2769 owner of the current folder.
2770 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
2771 return an NSException so we need to be careful here to avoid a
2773 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
2774 NSException so we need to be careful here to avoid a crash.
2776 * SoObjects/Mailer/SOGoMailAccounts.m
2777 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
2778 there is no longer any concept of Intranet or Internet connection
2781 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2782 -sharedFolderName]): new method.
2783 ([SOGoMailAccount -otherUsersFolderName]): new method.
2785 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
2786 new javascript code and the new UIxMailAccountActions class.
2788 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
2789 javascript code and the new UIxMailAccountActions class.
2791 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
2792 new javascript code and the new UIxMailAccountActions class.
2794 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2795 -listMailboxesAction]): new method that returns a json-formatted
2796 tree of all the mailboxes available to the current user.
2798 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
2799 web actions related to the handling of mail accounts.
2801 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
2804 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
2805 -jsonRepresentation]): new interface method meant to be overriden
2806 by the primitive classes.
2808 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2810 * UI/MailerUI/UIxMailSplashView.m: removed.
2812 * SoObjects/Appointments/SOGoCalendarComponent.m
2813 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
2814 the uid to the list only when the user email is recognized by the
2817 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2819 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2820 -isDeletionAllowed]): completed method with the new imap acl api.
2822 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
2825 * SoObjects/SOGo/SOGoPermissions.m: added the new role
2826 "SOGoMailRole_MessageEraser".
2828 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
2829 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
2830 "defaultUserID" method into account.
2832 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
2833 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
2834 "defaultUserID" method into account.
2836 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
2837 methods to support the IMAP acls mentionned in the RFC 4314,
2838 removed the ones specific to Cyrus.
2840 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
2841 mandatory method for subclasses. Removed the SOGoDefaultUserID
2844 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
2845 overriden method to return @"<default>".
2847 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2848 -defaultUserID]): overriden method to return @"<default>".
2850 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2851 -aclsForUser:uid]): overriden method.
2852 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
2853 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
2854 ([SOGoMailFolder -defaultUserID]): overriden method.
2855 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
2857 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2859 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2860 -aclUsersForObjectAtPath:objectPathArray]): new method that being
2861 forwarded the calles to aclUsers for the GCS-based subclasses of
2864 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
2865 methods that would have been used to support IMAP acls. Replaced
2866 them with the new protocol for them that has been implemented in
2867 SOGo during the last few weeks.
2869 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2870 -hasSupportForDefaultRoles]): override method by returning "YES".
2872 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2873 -addObjectUniquely:object]): new method with an explicit name.
2875 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
2876 "acl" to "aclUsers". Now designed to return only the uid of the
2877 users involved in an ACL.
2878 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
2879 "NO" by default. To indicate to the acl editor that we don't want
2880 to handle a default user.
2882 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
2883 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
2886 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
2887 provides a view to the IMAP acls.
2889 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
2891 * UI/WebServerResources/MailerUI.js: replaced all invocations of
2892 addEventListener to the use of prototype's Event object. Also,
2893 configured all menus programmatically following descriptions lists
2894 containing their callbacks, or nulls, submenus id or separators.
2896 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2898 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2899 -addUserInAclsAction]): save the previous roles of the user
2900 (unlikely) or the default roles, or None instead of saving the
2901 roles that should appear the first time in the role editor when no
2902 default has been set...
2904 * SoObjects/SOGo/SOGoObject.m: defined a new constant
2905 "SOGoDefaultUserID".
2907 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2908 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
2909 ignore the "AuthorizedSubscriber" role and add the "None" role
2910 when no other role is found.
2912 * UI/Common/UIxAclEditor.m: added a button for the new default
2915 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2916 -_initRights]): don't take the "None" role into account when
2917 initializing the list of current roles.
2919 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
2922 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2924 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2925 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
2926 There is no need to subscract the start from the length if a space
2927 is not found since the range has not changed either. Finally, the
2928 first character before the url might also be a tab or a cr, so we
2929 match it against the "urlAfterEndingChars" custom NSCharacterSet.
2930 ([NSString -stringByDetectingURLs]): modified to handle email
2931 addresses and add a correct "mailto:" link.
2933 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2935 * SoObjects/Appointments/SOGoAppointmentFolder.m
2936 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
2937 method to return the events in the range of 2 weeks ago up to 4
2940 * UI/MailPartViewers/UIxMailPartTextViewer.m
2941 ([UIxMailPartTextViewer -flatContentAsString]): use the new
2942 "stringByDetectingURLs" method to offer clickable urls.
2944 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2945 -stringByDetectingURLs]): this new method replaces passive URLS
2946 with active ones for HTML resolution of the text.
2948 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2950 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2951 -asQPSubjectString:encoding]): simplified method.
2952 The headers indicates "utf-8" again thank to our fix in
2955 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
2958 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2960 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2961 -removeUserFromAclsAction]): implemented this method which was
2962 missing and is required to remove users from ACLs.
2964 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2965 -subscribeAction]): folderDict was not autoreleased, resulting in
2968 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2969 -primaryFetchProfile]): when building with libFoundation, don't
2970 use the "propertyList" method from NSString. Rather, we convert
2971 the string to an NSData instance and passit as parameter to
2972 NSDeserializer. This way, we obtain a mutable dictionary rather
2973 than an immutable one.
2975 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
2976 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
2977 constant string "contentTypeValue".
2978 contentTypeValue is now set back to iso-8859-1 since NGMime
2979 converts extracts the data in that encoding.
2981 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2983 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2984 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
2985 "bindFields" value is present in the user defaults, use the
2986 specified fields to find the dn of the user to bind.
2987 ([LDAPSource -allEntryIDs])
2988 ([LDAPSource -fetchContactsMatching:match])
2989 ([LDAPSource -lookupContactEntry:entryID])
2990 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
2991 bind and unbind the connection on each request.
2993 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
2995 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2996 -contactSearchAction]): simplified method to use the facilities
2997 provided by the LDAPUserManager. No longer takes care of the
2998 "ldap-only" url parameter since all requests are handled by the
3001 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3002 -primaryFetchProfile]): check that the value returned is not null
3003 before interpreting it.
3005 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
3006 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
3007 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
3008 system email is already present, remove it before adding it.
3010 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
3011 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
3012 loginToCheck is not empty.
3013 ([LDAPSource -fetchContactsMatching:match]): check that match is
3015 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
3017 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
3020 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3022 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
3024 ([SOGoUser -systemEmail]): returns the email formed from the
3025 username and the default mail domain.
3026 ([SOGoUser -hasEmail:email]): test whether the user has the
3027 specified email, in a case-insensitive way.
3029 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3030 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
3031 check login information.
3033 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3034 ([SOGoContactLDAPFolder
3035 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
3036 no longer manage LDAP connections. The requests are forwarded to
3037 the relevant LDAPSource instead.
3039 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3040 -appendSystemSources]): pass LDAPSource objects to
3041 SOGoContactLDAPFolder instances.
3043 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
3044 address of the "from" field before sending the message. Otherwise,
3045 sending the mail won't work.
3047 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
3048 rewrote this method to request all the available email identities
3049 for the current user. Also, the from field also contains the full
3050 name of the user, not just his/her email address.
3052 * SoObjects/Appointments/SOGoCalendarComponent.m
3053 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
3054 from the previous module iCalEntityObject+Agenor.
3055 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
3056 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
3059 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
3060 replacing the SOGoContactLDAPEntry module. It was renamed as such
3061 because it now receives a dictionary instead of an NGLdapEntry.
3062 It thus can now handle data from any source of LDIF data, not
3063 only coming from LDAP.
3065 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
3066 implementing most of what used to be the AgenorUserManager class.
3067 The difference is that users are cached in the forme of
3068 dictionaries and many sources are used. Also, it can be used to
3069 search LDAP contacts.
3071 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
3072 the concept of "ldap source", to be used by all the classes
3073 needing access to LDAP-provided information: addressbooks and the
3074 user manager. Most the method thereing are transcriptions of
3075 methods previously found in SOGoContactLDAPFolder. It also contain
3076 utility methods for user matching and authentification.
3078 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
3079 module, rendered useless by code refactoring.
3081 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
3082 with the freshly written "LDAPUserManager".
3084 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3086 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
3087 SOGOContactLDIFEntry.
3089 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
3090 module, obsoleted by code in SOGo/LDAPSource.[hm].
3092 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3094 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
3095 new method with an explicit name.
3097 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3099 * SoObjects/Appointments/SOGoCalendarComponent.m
3100 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
3101 replacing "isOrganizer:orOwner:" by taking only one instance of
3102 SOGoUser as parameter.
3103 ([SOGoCalendarComponent -participant:user]): new method replacing
3104 the previous "isParticipant" boolean method by returning the first
3105 participant matching the user passed as parameter. This method is
3106 used so that both the regular email address and the "system email
3107 address" of the user are matched against the participants emails.
3109 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3110 -getSystemEMailForUID:uid]): new method that returns the email
3111 formed with the user's uid and the default mail domain.
3113 * SoObjects/Appointments/SOGoCalendarComponent.m
3114 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
3115 was previously commented out.
3117 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
3118 forwared to [AgenorUserManager getSystemEmailForUID:].
3120 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3121 -toolbar]): method replacing the one with the same name in the
3122 task and appointment editor classes. This method makes also use of
3123 the new method "isOrganizerOrOwner:" and "participant:" in
3124 SOGoCalendarComponent.
3126 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3127 -toolbar]): removed method, replaced with a method with the same
3128 name in UIxComponentEditor.
3130 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
3131 method, replaced with a method with the same name in
3134 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3135 -primaryFetchProfile]): the values returned from the database are
3136 converted to a put dictionary first, since the dictionary returned
3137 is actually an immutable one, which can cause a crash afterwards.
3139 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3141 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
3142 and "SOGoRole_ObjectEditor".
3144 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
3145 -prepareRightsForm]): this method is no longer mandatory.
3147 * UI/Contacts/UIxContactsUserRightsEditor.m
3148 ([UIxContactsUserRightsEditor
3149 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
3150 module to handle acls related to the address books. Partial
3153 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3154 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
3157 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
3158 specified roles from cache.
3159 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
3160 put resulting roles in cache.
3162 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
3163 initWithName:inContainer:. Instead, directly initialize the ivars
3164 as it is supposed to be to avoid an infinite loop whenever one of
3165 those two methods are overriden.
3167 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
3170 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3171 -aclsForUser:uid]): override method so that SOGo won't crash when
3172 loading the contact card.
3174 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3176 * SoObjects/Appointments/SOGoAppointmentFolder.m
3177 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
3178 "freebusy" special user should only require opaque elements.
3180 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3182 * SoObjects/Appointments/SOGoAppointmentFolder.m
3183 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
3184 our double declaration where the resulting XML would be screwed.
3185 There is only one collection per namespace.
3187 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
3188 rfc822DateString]): new method that returns a string conform to
3189 rfc 822 and suitable for email headers.
3191 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
3192 "rfc822DateString" category method on the date we put in the
3195 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3197 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
3198 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
3199 which should never be overriden.
3200 ([UIxUserRightsEditor -appendRight:newRight])
3201 ([UIxUserRightsEditor -removeRight:right])
3202 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
3203 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
3204 methods that can be used by the subclasses.
3205 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
3206 mandatorily be overriden to prepare the elements of the subclassed
3208 ([UIxUserRightsEditor -updateRights]): new method that should
3209 mandatorily be overriden to update the user rights from the
3210 elements of the subclassed form.
3212 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
3213 check if the uid is already listed before adding it to our array.
3214 This is because the acl table can contain more than one record per
3215 user/object relationship.
3217 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3218 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
3219 "roles" parameter is now an NSArray instead of a string. Therefore
3220 we loop throughout the array to populate the table. All the
3221 relevant records are removed prior to the addition of the new
3224 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
3225 -aclsForUser:uid]): new override that returns nil until we add
3226 support for IMAP acls.
3228 * SoObjects/Mailer/SOGoMailAccounts.m
3229 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
3231 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3232 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
3234 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3235 -aclsForUser:uid]): override this method which will always return
3238 * SoObjects/SOGo/SOGoPermissions.[hm]: added
3239 [Public,Private,Confidential]
3240 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
3241 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
3242 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
3244 * SoObjects/Appointments/SOGoAppointmentFolder.m
3245 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
3246 that defines default roles for new elements in the acl.
3248 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
3249 module and subclass of UIxUserRightsEditor specific to the
3250 handling of user rights on calendar folders.
3252 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3254 * SoObjects/Appointments/SOGoAppointmentFolder.m
3255 ([SOGoAppointmentFolder -groupDavResourceType]): return both
3256 "vevent-collection" and "vtodo-collection".
3258 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
3259 that implements the detailed editor of user rights per-object.
3261 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3263 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3264 -rolesForObject:objectinContext:context]): no longer query objects
3265 for "roleForUser:". Instead, all objects should implement
3268 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
3269 new method to comply with the new acl "protocol" in SOGoObject.
3270 Uses SOGoFolder's new facilities for ACLS.
3271 ([SOGoContentObject -aclsForUser:uid]): idem.
3272 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
3273 ([SOGoContentObject -removeAclsForUsers:users]): idem.
3275 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3276 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
3277 based folders. This method is derived from the code that was in
3278 UIxAclFolder before its removal.
3279 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
3282 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
3284 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
3285 ([SOGoFolder -setRoleForUsers:uidsto:role])
3286 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
3288 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
3289 that requires overriding by subclasses.
3290 ([SOGoObject -aclsForUser:uid]): idem.
3291 ([SOGoObject -defaultAclRoles]): idem.
3292 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
3293 ([SOGoObject -removeAclsForUsers:users]): idem.
3295 * UI/Common/UIxObjectActions.m: new module implementing the web
3296 actions common to SOGoObject and all its subclasses.
3297 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
3298 user with the clientObject defaults user rights to the object's
3301 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
3302 to the point where it will only list the users (and their name)
3303 associated with an object acl.
3305 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
3306 methods have been moved into SOGoObject and SOGoFolder during a
3309 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3310 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
3311 method made useless by the programmatic handling of iCalendar
3313 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
3314 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
3315 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
3317 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
3318 drop on all folder nodes, not just on leaves.
3320 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3321 ([SOGoContactLDAPFolder
3322 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
3324 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3326 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
3327 debugging facilities when the SOGoDebugObjectAllocation user
3330 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3332 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
3333 method that SOGo will need with non-gnustep Foundation
3335 ([NSString -stringByAppendingPathComponent:component]): new method
3336 that SOGo will need when building with libFoundation. Method
3337 removed later since it is available from
3338 Foundation/NSPathUtilities.h.
3340 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
3343 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
3344 every subclass to access [WOApplication context] without having to
3345 invoke it more than once.
3347 * SoObjects/Appointments/SOGoCalendarComponent.m
3348 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
3349 moved method from SOGoTaskObject and SOGoAppointmentObject up to
3352 * UI/Scheduler/UIxCalSelectTab.m: removed module.
3354 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3356 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
3357 -vCard]): test the prefix of the card in a case-independent way.
3359 * OGoContentStore/OCSContactFieldExtractor.m
3360 ([OCSContactFieldExtractor
3361 -extractQuickFieldsFromContent:content]): we no longer accept
3362 records in a format other than versit vCard so we can get rid of a
3365 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3367 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3368 -selectorComponentClass]): restored method.
3370 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3372 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
3373 -shouldDisplayCurrentTask]): the current task is not displayed if
3374 it is NOT completed or if the "showCompletedTasks" flag is set.
3375 The logic was inverted in Lightning and is now in SOGo too.
3377 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3379 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
3380 want the "work" url instead of the "home".
3382 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3383 -_saveSnapshot]): save url values from snapshot.
3384 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
3386 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3387 -calendarList]): new method replacing "availableCalendars".
3389 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
3390 -calendarFolders]): we now take the list of subscribed calendar
3393 * SoObjects/Appointments/SOGoAppointmentFolder.m
3394 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
3395 method derived from and replacing [UIxCalView calendarFolders].
3397 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3399 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3400 -toManyRelationshipKeys]): don't put the predefined folders in the
3401 list if they are returned by the server.
3403 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
3404 longer store the "flattenedBlocks" in a dictionary since the
3405 object will be deleted anyway and we don't need to put the folders
3408 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3409 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
3410 attachment path into account when computing the part urls.
3412 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3414 * UI/Contacts/UIxContactsListViewContainer.m
3415 ([UIxContactsListViewContainer -additionalFolders]): take the list
3416 of subscribed folders from the new property list used for the user
3417 settings. The value of its key is SubscribedFolders for the
3418 dictionary entry named "Contacts".
3420 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3421 -canAccessContentAction]): new method to override the one from
3422 UIxFoldersActions by taking into account the fact that, this time,
3423 the clientObject is an ldap folder. Removed many method that used
3424 to be related to the handling of the user selector.
3426 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
3427 to make sure they can be removed.
3429 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
3430 populate the calendar entries based on the user settings plist.
3432 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3433 -selectForMailerAction]): restored method.
3435 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
3436 from a simplified version of the old UIxContactEditor (removed).
3438 * UI/Contacts/UIxContactsUserFolders.m: new template module for
3439 selecting users or user folders through an LDAP search of which
3440 the results are displayed as a tree.
3442 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
3443 method "onContactAdd" here since the Mailer is now the only module
3444 to use it when composing emails.
3446 * UI/WebServerResources/generic.js: added code for handling the
3447 new scheme used for describing SOGo folders, common code to handle
3448 folder addition or removal.
3450 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3451 -activateFolderAction]): new method that change the "active"
3452 settings in the folder-related fields in the user settings.
3453 ([UIxFolderActions -deactivateFolderAction]): see above.
3455 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3456 -checkRightsAction]): removed method.
3458 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3459 -updateAdditionalAddressBooksAction]): removed method.
3461 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3462 -updateCalendarsAction]): removed method.
3464 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3466 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3467 -checkRightsAction]): removed method.
3469 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3470 -canAccessContentAction]): new method designed to replace
3471 [UIxCalMainView checkRightsAction] in a more universal way.
3473 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3475 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3476 -roleOfUser:uidinContext:context]): take all the subkeys into
3477 account, not only the "personal" folder.
3479 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3480 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
3481 to the new components.
3483 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
3486 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3487 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
3488 field of the sogo_user_profile table, where the user-customizable
3489 changes will be saved.
3490 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
3491 similar to the one above, using the "settings" field where the
3492 automatic settings will be saved.
3494 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
3495 module to bind the userdefaults to a property list contained in a
3496 specified field of the sogo_user_profile table.
3497 ([AgenorUserDefaults
3498 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
3499 added a "fieldName" parameter.
3501 * UI/Common/UIxFolderActions.m: new module implementing web
3502 actions common to all GCS-based folders.
3504 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3506 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
3507 put a carriage return after the day name.
3509 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3510 -readFreeBusyAction]): restored method.
3512 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3514 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3515 -defaultAction]): remade module to redirect automatically to the
3518 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
3520 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3522 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3523 -deleteAction]): new web method to delete personal addressbook
3526 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3527 -delete]): override method to refuse the deletion of the folder if
3528 its nameInContainer is "personal".
3530 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
3531 that forwards the deletion request to the folder manager.
3533 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3535 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
3536 -zoomList]): new method that returns the list of available zoom factors.
3538 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3539 -changeStatusAction]): rewrote method.
3541 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3542 -_handleAttendeesEdition]): make sure "attendeesNames" has a
3543 length > 0 before computing the attendees. Otherwise there will be
3544 an invalid empty entry.
3545 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
3546 organizer when there are attendees and remove it when the
3547 attendees are removed.
3549 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3551 * UI/Scheduler/UIxAttendeesEditor.m): new component.
3553 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
3554 the task and appointment editors. Now a container component
3555 handling the common elements of tasks and events.
3557 * UI/Scheduler/UIxTaskEditor.m: same as below.
3559 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
3560 a subclass of UIxComponentEditor but a subcomponent of it.
3562 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
3563 toolbar can have the special value "none" to indicate there is
3564 none attached to the window.
3566 * SoObjects/Appointments/SOGoCalendarComponent.m
3567 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
3569 ([SOGoCalendarComponent -isParticipant:email]): new method.
3570 ([SOGoCalendarComponent -calendar:create]): takes one parameter
3571 "create" which is a boolean indicating whether we want to create
3572 the calendar if it does not exist.
3574 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3576 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
3577 of a table, the same way the dayly and weekly views have been for
3580 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
3582 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
3585 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
3586 property to point at the user folder
3588 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3590 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3591 -userInContext:]): returns "SOGoUser".
3593 * SoObjects/Appointments/SOGoCalendarComponent.m
3594 ([SOGoCalendarComponent -contentAsString]): overriden method that
3595 takes the privacy into account and discard the relevant fields if
3596 needed by generating a new content string and caching it.
3597 ([SOGoCalendarComponent
3598 -saveContentString:contentStringbaseVersion:baseVersion]): if the
3599 new method above has cached a content string, release it and set
3600 it to nil so that it will have to be regenerated in the case it is
3602 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
3603 discard the fields that have to be hidden when the card is
3606 * SoObjects/Appointments/SOGoAppointmentFolder.m
3607 ([SOGoAppointmentFolder
3608 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
3609 sure the cards are now handled as instances of
3610 SOGoCalendarComponent instead of SOGoContentObject so that their
3611 content string is taking the privacy classifiction into account.
3612 ([SOGoAppointmentFolder -_privacySqlString]): new method that
3613 generates a query to determine what information can be given and
3614 if the card itself has to be shown.
3616 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3617 -getICalPersonsFromValue:selectorValue]): removed useless
3618 "isAccessRestricted" method.
3620 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3621 -setStyle:_style]): test whether the values of orgmail and
3622 partmails are null before manipulating them, otherwise SOGo sends
3623 a "rangeOfString:" message to an NSNull, which makes it crashes.
3625 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3626 -extractQuickFieldsFromEvent:_event]): we now use the new
3627 "symbolicAccessClass" method from iCalEntity to determine the
3628 value of the "classifiction" field.
3629 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
3632 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3634 * SoObjects/Appointments/SOGoAppointmentFolder.m
3635 ([SOGoAppointmentFolder
3636 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
3637 see below, the query is adapted consequently.
3639 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3640 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
3641 renamed to "classification" and can any integer as value.
3642 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
3645 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3647 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3648 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
3649 don't prepend anything to the class and id named. Instead, we
3650 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
3653 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3655 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
3656 -rolesOfUser:logininContext:context]): if object does not exists
3657 (for example when it's being created), the current user has the
3658 same rights on it than he/she has on its parent container.
3660 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3661 -nameExistsInFolder:objectName]): methods that tests if a c_name
3662 corresponding to the name passed as parameter is present in the db
3665 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3667 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3668 -rolesForObject:objectinContext:context]): test for
3669 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
3671 * SoObjects/Appointments/SOGoCalendarComponent.m
3672 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
3673 returns the roles of the user on the container object if the event
3676 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3678 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
3679 alternativeViewer a multipart/related message is being handled.
3681 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
3684 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
3685 text/html component before text/plain.
3687 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3688 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
3689 fetching of HTML parts.
3691 * SoObjects/Appointments/SOGoCalendarComponent.m
3692 ([SOGoCalendarComponent -componentTag]): new template method that
3693 returns the vcalendar tag of the current object.
3694 ([SOGoCalendarComponent -component]): new method that returns the
3695 first object matching [self componentTag] within the current
3696 calendar object. This method replaces 'firstEventInCalendar:' as
3697 well as "firstTaskInCalendar:".
3698 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
3699 moved method from SOGoAppointmentObject.m.
3701 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3703 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
3704 module which shows each selected user's calendar in a different
3705 column instead of mixing their events together.
3707 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
3708 replaced use of [NSString stringByTrimmingWhiteSpaces] with
3709 [NSString stringByTrimmingSpaces].
3711 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
3712 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
3715 * UI/Scheduler/UIxCalDayOverview.m,
3716 UI/Scheduler/UIxCalDayChartview.m,
3717 UI/Scheduler/UIxCalDayListview.m,
3718 UI/Scheduler/UIxCalWeekOverview.m,
3719 UI/Scheduler/UIxCalWeekChartview.m,
3720 UI/Scheduler/UIxCalWeekListview.m,
3721 UI/Scheduler/UIxCalInlineMonthOverview.m,
3722 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
3724 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3726 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3727 -appendPersonalSourcesInContext:context]): release connectoin
3728 channel when everything is done.
3730 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3731 -newAbAction]): new action method to crate a new contact folder
3734 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
3735 that requests the folder manager to create a folder table with the
3736 specified type at the specified path. The type is taken from [self
3739 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3740 -folderType]): implemented.
3742 * SoObjects/Appointments/SOGoAppointmentFolder.m
3743 ([SOGoAppointmentFolder -folderType]): implemented.
3745 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3746 -appendPersonalSourcesInContext:context]): we now fetch all
3747 folders with type "Contact" that belong to the current user.
3748 ([SOGoContactFolders -newFolderWithName:name]): new method to
3749 create a new contact folder.
3751 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
3752 resulting url with [NSString+Utilities hostlessURL] instead of
3753 using NSURL. This is because the url in question sometimes has a
3754 hostname and sometimes not. "hostlessURL" ensure the hostname is
3756 ([UIxComponent -applicationPath]): same as above.
3758 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
3760 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
3761 folders before doing the one on messages.
3763 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3765 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
3766 makeObjectsPerform:withObject:withObject: for GNUstep
3769 * OGoContentStore/GNUmakefile, Protocols/common.make,
3770 SoObjects/common.make, UI/common.make: install in
3771 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
3773 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
3775 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
3778 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3780 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
3781 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
3784 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3785 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
3786 password would be accepted anyway as long as its length was > 0.
3787 This can be the case ONLY when LDAP is disabled otherwise we have
3788 a serious security issue...
3790 * SoObjects/Appointments/SOGoAppointmentObject.m
3791 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
3792 user is not an organizer nor a participant, he is declared as
3793 "Owner" if he owns the calendar the entry where the entry is
3794 contained. Other cases should not be possible.
3796 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3798 * UI/Contacts/UIxContactEditor.m: display and handle the new
3801 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3802 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
3805 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3806 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
3809 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3811 * SoObjects/Appointments/SOGoCalendarComponent.m
3812 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
3813 returns the value of ud "SOGoAppointmentSendEMailNotifications"
3815 ([SOGoCalendarComponent
3816 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
3818 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3820 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3821 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
3822 so that the mailbox cache is refreshed everytime the user presses
3823 on "get mail". I doubt a mailbox cache really is useful in general
3826 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3828 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3829 -userInContext:]): if the lookup is on "freebusy.ifb" and the
3830 username is "anonymous" the user is automatically set to
3833 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3835 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3836 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
3837 user with password "freebusy".
3839 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
3840 -contentAsString]): the default timerange is now 14 days before
3841 currentday and 1 month after.
3843 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3845 * SoObjects/Appointments/SOGoAppointmentFolder.m
3846 ([SOGoAppointmentFolder
3847 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
3848 escape the record string in a way suitable with XML encoding.
3850 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3852 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
3853 calendar view would not be updated properly.
3855 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3857 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3858 -newStartDate]): fix the handling of the component start date
3859 depending on the "hm" and the "day" parameters.
3861 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3862 -roleOfUser:uidinContext:context]): set role of current user to
3863 "Assistant" if the object that is accessed is "freebusy.ifb".
3865 * SoObjects/Appointments/SOGoAppointmentFolder.m
3866 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
3867 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
3868 ([SOGoAppointmentFolder
3869 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
3870 lookupCalendarFolderForUID: method, which doesn't do security
3873 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3875 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
3876 accessor that returns the comma-separated list of users with role
3878 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
3879 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
3880 "checkedUsers". Instead, each user is either classified in the
3881 list of assistants or the list of delegates.
3883 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3885 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
3886 -composeAction]): method imported from removed container modules.
3887 ([UIxMailMainFrame -mailFolderName]): method imported from removed
3890 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
3891 for wrapping UIxMailView with the "popupview" action.
3893 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
3894 since its the component that displays the same splash screen than
3895 the one in Thunderbird/Icedove.
3897 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
3898 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
3899 UI/MailerUI/UIxMailListViewContainer.[hm],
3900 UI/MailerUI/UIxMailViewContainer.[hm]: removed
3902 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3904 * UI/WebServerResources/HTMLElement.js: replaced the functional
3905 selectNode() and deselectNode() functions with select() and
3906 deselect() methods of HTMLElement.
3908 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
3909 events are initialized from here now instead of in the HTML code.
3911 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3912 -checkRightsAction]): new method similar to the one with the same
3913 name in UIxCalMainView.m.
3915 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
3916 code to handle the publishing of freebusy information.
3918 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3920 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3921 -checkRightsAction]): new action method that returns a
3922 comma-separated list of boolean values matching the right of the
3923 current user to "view" (as a permission) each foreign calendar
3924 stored in his preferences.
3926 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
3927 new method that sets a customOwner, which can be returned with
3928 ownerInContext it set.
3930 * SoObjects/Appointments/SOGoAppointmentFolder.m
3931 ([SOGoAppointmentFolder
3932 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
3934 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3936 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
3937 below, but for the Contacts and Calendar collections.
3939 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
3940 new acl facilities method from sope-gdl/GCSFolder.m.
3942 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3943 -roleOfUser:uidinContext:context]): new method that returns
3944 SOGoRole_Assistant when the user is an assistant or a delegate on
3945 the "personal" ab object. This is so that setting roles on the
3946 SOGoContactFolders object is not required.
3948 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3950 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
3952 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
3953 to the handling of the user selection for the acls.
3955 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
3956 values from SoPermissions with ones specific to SOGo.
3958 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
3959 handles the storage for the acls.
3961 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
3962 class for SOGoAppointmentObject and SOGoTaskObject.
3964 * UI/Common/UIxAclEditor.[hm]: new component that provides a
3965 general editor for folder acls.
3967 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
3969 ([NSString -davMethodToObjC]): method that returns the method name
3970 for a DAV property implementation.
3972 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
3974 ([NSArray -stringsWithFormat:format]): new method that returns
3975 formatted occurences of the strings stored in the array.
3977 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
3978 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
3979 subclass module of SoWebDAVValue that supports collections of
3980 properties of the same type.
3982 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3984 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3985 -lookupFolder:ofClassNamed:inContext:]): added the ability to
3986 configure the name of the SOGoDraftFolders with the ud var
3987 "SOGoDraftsFolderName".
3989 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3991 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
3992 -userTimeZone:username]): new method that returns the timezone for
3993 the specified user depending on his preferences and the server
3996 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3997 -stringForData:partInfo:]): take the encoding into account and
3998 translate the text to "normal" before processing the charset data.
4000 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4002 * UI/WebServerResources/generic.js: the progress indicator is on
4003 when loading the page so we turn it off, and we turn it back on
4004 whenever we switch to another module...
4006 * UI/WebServerResources/SchedulerUI.js: make sure the day view
4007 synchronization mechanism works everywhere.
4009 * UI/WebServerResources/generic.js: the log window is not only
4010 visible when UIxDebugEnabled is set.
4012 * UI/WebServerResources/SchedulerUI.js: the month overview's day
4013 cells are now initialized with the DOM event interface methods
4014 instead of with html attributes.
4016 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
4017 headers (should be made configurable at some point)...
4019 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
4020 "not null" constraint on startdate, enddate, isopaque,
4021 participants and partmails.
4023 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4025 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
4026 -hoursToDisplay]): prevent a crash by retaining the
4027 "hoursToDisplay" array after it's created.
4028 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
4029 clickable hours DIV.
4031 * UI/WebServerResources/SchedulerUI.js: made the event
4032 participation status modification asynchronous, which also fixes a
4033 bug where the window would sometimes close before the accept or
4034 decline action was completed. Also, adapted the event handling
4035 related to the days or weeks view with the new DIV-based layout.
4037 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
4039 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
4040 DIV-based presentation of the days and weeks.
4042 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
4044 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
4045 might return an exception so we have to handle it if we don't
4048 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4050 * UI/WebServerResources/SchedulerUI.js: updated the list
4051 initialization code to use the new event management scheme, adding
4052 what was missing to be able to delete events and tasks again.
4054 * UI/WebServerResources/MailerUI.js: added code to activate the
4055 "Get mails" button. Fixed a bug which prevented messages to be
4058 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
4059 navigation and focus handling of INPUTs.
4061 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4063 * UI/WebServerResources/MailerUI.js: added code to handle the
4064 possible drag and drop events to manager in the mail module.
4065 Moving messages, opening parent folders, ...
4067 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
4068 the drag and drop manager as well as the interface to HTMLElement
4069 to trigger drag and drop events.
4071 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
4072 action to move the current message to the mailbox named after the
4073 value of parameter "tofolder".
4075 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
4076 -moveToFolderNamed:folderNameinContext:]): new method base on
4079 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4081 * UI/WebServerResources/generic.js: added and activated many
4082 "load" handlers to configure generic widgets used across the
4083 modules. More events are now handled in a DOM-fashion way instead
4084 of by setting the relative attributes in the templates.
4086 * UI/Templates/UIxSortableTableHeader.wox: all the events are
4087 declared from the javascript DOM onload handlers.
4089 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
4092 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
4093 declared from the javascript DOM onload handlers.
4095 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
4096 we want everything to be separated from each other, as much as
4099 * UI/WebServerResources/SOGoDragHandles.js: new module containing
4100 the "SOGoDragHandlesInterface", implementing methods that can be
4101 attributed to DIV so that they can be used as drag handles.
4103 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
4104 -asQPSubjectString]): initialize the tmp strings with '0' to make
4105 sure they don't contain garbage.
4107 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4109 * UI/WebServerResources/MailerUI.js: register the messageList
4110 table as a dragging source and the leaf of the navigation tree as
4111 dnd destinations to the DNDManager.
4113 * UI/WebServerResources/generic.js: initialize tabs from the
4114 "unload" event listener that is added programmatically instead of
4115 from the template... Also, added the new DNDManager object.
4117 * UI/WebServerResources/HTMLTableElement.js: added code to
4118 simulate XUL drag n drop events. This code will possibly be moved
4119 to HTMLElement.js instead later...
4121 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4122 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
4125 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4126 -_qualifierForFilter:filter]): only search records which starts
4127 with the specified pattern.
4129 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4131 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
4132 -asQPSubjectString]): new method that returns the special QP
4133 string with its qp declaration for email subjects.
4134 ([SOGoDraftObject -bodyPartForText])
4135 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
4136 double-encode data in UTF-8.
4138 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4139 -newStartDate]): new method to determine the start date depending
4140 on the URL parameters, the current day and the current time.
4141 ([UIxComponentEditor -toolbar]): new method to determine the
4142 filename of the toolbar that should be drawn depending on the
4143 ownership and the list of attendees of the task/event wrt to the
4146 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4147 -setDayStartHour:aStartHour]): adjust the minutes to the next
4148 quarter of hour, if not already set to a quarter.
4150 * UI/WebServerResources/UIxAppointmentEditor.js,
4151 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
4154 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4156 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4157 -loadValuesFromComponent:component]): handles access class
4158 (privacy) and status.
4160 * UI/Contacts/UIxContactsListViewContainer.m
4161 ([UIxContactsListViewContainer -additionalFolders]): return nil if
4162 [self additionalAddressBooks] returns an empty string.
4164 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4166 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
4167 rangesOf7Days]): enhanced and debugged algorithm to feed the array
4168 with slices where the first day is still in the requested month.
4170 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
4173 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
4174 of events in the day boxes of the calendar's monthly view.
4176 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
4177 -davContentType]): declare "text/calendar".
4179 * SoObjects/Appointments/SOGoAppointmentObject.m
4180 ([SOGoAppointmentObject -davContentType]): declare
4183 * SoObjects/Appointments/SOGoAppointmentFolder.m
4184 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
4185 HTTP methods are handled by SOPE and requires nil to be returned,
4186 this method now invokes the new
4187 "requestNamedIsHandledLater:inContext:" method to check that.
4188 ([SOGoAppointmentFolder
4189 -requestNamedIsHandledLater:nameinContext:context]): new methods
4190 that returns "YES" only for the "OPTIONS" http method (for now...).
4191 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
4192 overloaded method to append the "access-control" and
4193 "calendar-access" DAV abilities to the initial declaration.
4195 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
4196 imitate the look of Sunbird/Lightning's monthly view.
4198 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
4199 UIxCalMonthViewOld.[hm].
4201 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4203 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
4204 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
4206 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
4207 returns an image name based on the participation status of the
4210 * UI/WebServerResources/SchedulerUI.js: same strip down as for
4213 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
4214 ([UIxContactsListViewContainer -additionalFolders])
4215 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
4216 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
4217 methods to handle the external addressbooks a user has subscribed
4218 too, by retriving them from his preferences.
4220 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4221 -updateAdditionalAddressBooksAction]): new method that updates the
4222 user settings with the list of addressbook he has subscribed to.
4224 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
4225 module for the address book selector.
4227 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
4228 a toolbar with two buttons ("add" and "remove") to manage the
4229 additional addressbooks a user might subscribe to.
4231 * UI/WebServerResources/ContactsUI.js: added code to handle
4232 "external addressbooks" from the Javascript point-of-view, by
4233 extending existing methods and adding code for the "add ab" and
4234 "remove ab" buttons.
4236 * UI/WebServerResources/generic.js: moved extensions methods to
4237 DOM elements to separate files for better clarity.
4239 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
4240 new method that returns "pageContent" as class, but also "popup"
4241 for the DIV where the page content lies, so that we can manipulate
4242 the content of popup's with CSS identifiers.
4244 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4246 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4247 -displayStyle]): new method that returns a string containing the
4248 css style relative to the current appointment cell. This code is
4249 currently inactive but might be reused later.
4251 * UI/WebServerResources/SchedulerUI.js: added code to handle the
4252 display of the selected day (the day pointed by the mouse, or the
4253 current day when changing the view).
4255 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
4256 -dayCellClasses]): new method that returns a string containing the
4257 css classes applicable to the current cell, depending on the
4258 position of the day in the week, the day of today and the
4261 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
4262 -currentContactAptBorder]): new method that returns the
4263 appropriate border color for the specified user.
4265 * SoObjects/Appointments/SOGoAppointmentObject.m
4266 ([SOGoAppointmentObject
4267 -saveContentString:contentStringbaseVersion:baseVersion]):
4268 overloaded method that parse new events and detects if they have
4269 an organizer or not. If they are new and have no organizer set
4270 (Sunbird/Lightning...), the owner of the event is set as
4273 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
4274 category that provides facility methods and interfaces to the
4277 * SoObjects/Contacts/product.plist: give full access to ANY
4278 authenticated user, not just the owner (to every objects...).
4280 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4282 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
4283 every replica widgets are declared as such to their master
4284 counterpart. Take the days into account when displaying the time
4285 range taken by the appointment.
4287 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
4288 -getICalPersonsFromValue:selectorValue]): method taken from
4289 UIxFreeBusyUserSelector, that is shared both by
4290 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
4292 * SoObjects/Appointments/SOGoAppointmentFolder.m
4293 ([SOGoAppointmentFolder
4294 -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.
4296 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
4297 derived and taken as a subset of UIxFreeBusyUserSelector that
4298 implements the table part of the FreeBusy view. Most of the
4299 methods of UIxFreeBusyUserSelector relative to that table were
4300 moved into UIxFreeBusyUserSelectorTable, which can also be used as
4301 a standalone view for AJAX operations.
4303 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4305 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4306 -vCard]): change reverted.
4308 * UI/Contacts/UIxContactEditor.m: check whether the client contact
4309 folder has selector "globallyUniqueObjectId" before calling that
4312 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4313 -vCard]): the "setVClass" NGVCard method really is "setClass"
4316 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4317 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
4318 request the "streetAddress" instead of the "streetaddress".
4319 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
4320 mails that *contain*, and not just *start with* the search
4323 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4324 -vCard]): mark address returned from LDAP as the work address.
4326 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
4327 span covered with the anchor, not only the textual information
4330 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
4331 argument (event or task) to newEvent in the appointmentListMenu.
4332 Make the appointmentsListView display the appointmentsListMenu.
4334 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
4335 12 to 50 before displaying "...".
4336 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
4337 if its length > 0, whether location itself is nil or not...
4338 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
4339 of which the length > 0.
4341 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4343 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
4344 french and ISO dates.
4346 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
4347 from UIxContactSelector to handle contact lists (current and
4348 additional contacts).
4350 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4351 -_freeBusyAsText]): added handling of an "additional"-named query
4352 parameter that describe the number of additional days after
4353 enddate that should be returned.
4355 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4356 -_responseForResults:results]): give priority to results with
4357 "c_uid" fields. If none returned, use the first contact received.
4359 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4360 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
4361 2 and "CANCELLED" to 0.
4363 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4365 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
4366 of start and end dates to short string dates.
4368 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4369 -readFreeBusyAction]): new method that returns an array of numbers
4370 corresponding to the state in the freebusy of each "quarter of an
4371 hour" between the "sday" and "eday" date parameters passed in the
4372 url. This permits to handle the display of the freebusy with Ajax
4374 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
4375 since the free busy displays 2 days ahead.
4377 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4378 -contactSearchAction]): new action that returns the uid and the
4379 username + email of the user whose name contain the value of the
4380 "search" url parameter.
4382 * SoObjects/Appointments/SOGoAppointmentFolder.m
4383 ([SOGoAppointmentFolder
4384 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
4385 useful for the computing of the status of the freebusy.
4387 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
4388 -init]): new component that incarnates a user selector for events
4389 inspired by the new one found in Thunderbird Lightning.
4391 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4393 * UI/WebServerResources/generic.js: added code to enable or
4394 disable anchor visually (following our internal algorithm).
4396 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
4397 added new "url" ivar with its classic accessors.
4398 ([UIxComponentEditor -urlButtonClasses]): new method that returns
4399 the class strings for the url button on the appointment/task
4400 editor (depending on the validity of the url).
4402 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
4403 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
4404 the template to match the Lightning's new task/appointment editor.
4406 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
4408 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
4410 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4412 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4413 ([SOGoContactLDAPFolder
4414 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
4416 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
4417 iCalEntityObject instances instead of just iCalEvent's.
4419 * SoObjects/Appointments/SOGoAppointmentFolder.m
4420 ([SOGoAppointmentFolder
4421 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
4423 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
4424 bad way of handling ownership that way.
4426 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4427 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
4428 on "cn", just like Mozilla.
4430 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4432 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
4433 "to" should be retained, otherwise it will be autoreleased and a
4436 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4437 -writeAction]): updated method to fetch the card before initing
4440 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4441 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
4444 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
4445 -iCalStringTemplate]): start and due date are now optional.
4447 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4448 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
4449 appropriate accessors to be settable through the templates.
4451 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
4452 new "isDisabled" ivar with appropriate accessors to be
4453 settable through the templates.
4455 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4456 -availableCalendars]): new method that list the calendars to which
4457 the user has subscribed.
4458 ([UIxComponentEditor -componentOwner]): returns the owner of the
4461 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4462 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
4463 quickentries to null whenever each or all of them are null, by
4464 providing an impossible timestamp from with NSNotFound as value.
4466 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4468 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
4469 that handles the creation of new fields with the new APIs and the
4470 new node structure on the page.
4472 * UI/Scheduler/UIxAppointmentEditor.m,
4473 UI/Scheduler/UIxTaskEditor.m:
4474 refactored to user UIxComponentEditor as parent class.
4476 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
4477 containing the methods common to the UIxTaskEditor and the
4478 UIxAppointmentEditor.
4480 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4482 * SoObjects/Appointments/SOGoAppointmentFolder.m
4483 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
4484 the handling of time-ranges.
4486 * UI/WebServerResources/ContactsUI.js: specify a notification type as
4487 parameters when onConfirmContactSelection in invoked.
4489 * UI/WebServerResources/generic.js: specify a notification type as
4490 parameters when onContactRemove in invoked.
4492 * UI/WebServerResources/SchedulerUI.js: when the user deselects
4493 all calendars, select his entry.
4495 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4497 * UI/WebServerResources/SchedulerUI.js: edit and delete events
4498 with their owner-relative urls. Generate a correct entry in the
4499 css color table when a user is added to the calendars list. Put
4500 the same color next to the user id.
4502 * UI/WebServerResources/generic.js: implemented some new helper
4505 * SoObjects/Appointments/SOGoAppointmentFolder.m
4506 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
4507 entries if their owner is not the current user.
4509 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4510 -displayClasses]): return the correct class for the current event
4511 representation depending on its owner.
4513 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
4514 and associate a color for each user login depending on its
4515 position in the list.
4517 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
4518 -currentRowCSSClass]): return the correct class for the current
4519 row depending on the owner of the event.
4521 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4522 -setColors:colors]): new method to associate a color table with
4523 each user in the list.
4525 * SoObjects/Appointments/SOGoAppointmentFolder.m
4526 ([SOGoAppointmentFolder
4527 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
4529 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
4530 NSObject to associate an instance with a user.
4532 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4534 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
4537 * UI/WebServerResources/ContactsUI.js: added handling of
4538 notification of changes to contact selectors.
4540 * UI/WebServerResources/generic.js: added handling of notification
4541 of changes to contact selectors.
4543 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4544 -updateCalendarsAction]): proxy method to update the user
4545 preference table with the new selected calendar uids.
4547 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
4548 -calendarsContactsAction]): new method.
4550 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
4551 ([UIxContactSelector -setHasCheckBoxes:aBool])
4552 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
4553 permit the drawing of checkboxes instead of card icons.
4555 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
4556 wrap a selector the the "Calendars" tab.
4558 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
4559 new user calendar selector.
4561 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4563 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
4564 may cover hour 0 to hour 23.
4566 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4567 -iCalStringFromQueryParameter:format:]): dates explicitly set to
4570 * UI/WebServerResources/SchedulerUI.js: manage both lists of
4571 objects wrt to the toolbar actions.
4573 * UI/WebServerResources/generic.js: added code to the "String"
4574 class to decode number-encoded char entities.
4576 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4577 -batchDeleteAction]): new method to delete selected entries in the
4580 * SoObjects/Appointments/SOGoAppointmentFolder.m
4581 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
4582 that delete identified entries in batch.
4584 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4585 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
4587 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
4588 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4589 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
4590 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4592 return a UIxJSClose component if everything went fine.
4594 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
4597 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
4598 UIxAppointmentEditor.m.
4600 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
4601 a very light page with javascript code to close a window, by
4602 calling a method on the opener if specified. This component is
4603 designed to work as a response to form postings.
4605 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4607 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
4608 SOGoAppointmentObject adapted for the handling of tasks.
4610 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
4611 extracted from SOGoAppointmentObject.
4613 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4614 -saveUrl]): returns the url needed to POST the new form to.
4615 redirect the user to <aptid>/editAsAppointment instead of /edit,
4616 so that SOGoAppointmentFolder can return the correct object type.
4618 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
4619 -compareAptsAscending:_other]): accept empty start or end dates.
4621 * SoObjects/Appointments/SOGoAppointmentFolder.m
4622 ([SOGoAppointmentFolder
4623 -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.
4624 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
4625 components of type "vtodo" as well as "vevent".
4626 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
4627 url specified ends with AsTask or AsAppointment, returns the
4628 an object of the appropriate class, otherwise deduce it from its
4629 content if the HTTP method is "PUT", otherwise read its type from
4632 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4633 -extractQuickFieldsFromTodo:_task]): extract quick fields from
4636 * UI/Scheduler/UIxCalView.m ([UIxCalView
4637 -fetchCoreAppointmentsInfos]): replacement methods for
4638 fetchCoreInfos but by retrieving object with component "vevent".
4639 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
4642 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
4643 UIxCalAptListView adapted for the handling of tasks.
4645 * UI/Scheduler/UIxTaskProposal.[hm],
4646 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
4647 clones of the UIxAppointment* classes for the handling of tasks.
4649 * UI/WebServerResources/UIxTaskEditor.js: clone of
4650 UIxAppointmentEditor adapted for the handling of tasks.
4652 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
4653 Scroll the daily view to the appropriate hour when an appointment
4654 is selected in the appointments list.
4656 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4658 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4659 -setDayStartHour:aStartHour]): specifies the user timezone on the
4662 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
4665 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
4666 ([NSCalendarDate -driftedDate]): methods made useless by a better
4667 comprehension of the NSTimeZone API...
4669 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4671 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
4672 new methods from the NSCalendarDate methods.
4674 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
4675 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
4677 +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).
4678 ([NSCalendarDate -adjustedDate]): this method returns another
4679 instance set to the correct hour after the original date was set
4680 from a non-GMT timezone. This date can be used for storage.
4681 ([NSCalendarDate -driftedDate]): this method does exactly the
4682 opposite of -adjutedDate, that is, it enables the method
4683 hourOfDay, minuteOfHour etc... to return the values according to
4684 the original date's timezone. This date CANNOT be used for storage.
4686 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
4687 -shortDateString]): new method that will return a "short date
4688 string" (yyyymmdd) from a calendar date object.
4690 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4691 -_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.
4693 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
4694 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
4696 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4698 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
4699 view of the day at the height of hour 8:00.
4701 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
4702 ([UIxCalView -dayEndHour]): returns 24.
4704 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
4705 ([UIxContactFoldersView -newAction]): invoke
4706 _selectActionForApplication: on self with the proper attribute too.
4708 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
4709 we now use the action mechanism in UIxContactsListView to keep the
4710 same view for the contact selectors and the regular contact view.
4712 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
4713 UIxContactsListViewContainerBase.[hm]
4715 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
4717 * UI/WebServerResources/generic.js: generalized emailstring
4718 handling functions. Generalized address book access functions.
4720 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4721 -isPopup]): return YES if the "popup" query parameter is set.
4723 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4724 -defaultAction]): keep the url parameters when redirecting.
4725 ([UIxContactFoldersView -selectForSchedulerAction])
4726 ([UIxContactFoldersView -selectForMailerAction]): new action
4727 methods for the /scheduler-contacts and /mailer-contacts invocations.
4729 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
4730 newly available NSString+URL category.
4732 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
4733 -asURLParameters]): handle dictionary entries which could be
4734 instances of NSArray rather than NSString.
4736 * SoObjects/SOGo/NSString+URL.m ([NSString
4737 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
4738 ([NSString -urlWithoutParameters]): new method that returns the
4739 url without its parameters.
4741 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
4743 * SoObjects/SOGo/NSDictionary+URL.[hm],
4744 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
4746 * UI/WebServerResources/UIxMailEditor.js: add support for
4747 additions of different types (to, cc, bcc) of recipients from the
4750 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
4753 * UI/Contacts/UIxContactsMailerSelection.m,
4754 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
4755 UI/Contacts/UIxContactsSelectionView.m to provide a different set
4756 of widgets depending on the application invoking the contact list.
4758 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4760 * UI/WebServerResources/ContactsUI.js: hide the current contact
4761 whenever the user changes of contact folder.
4763 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
4764 now provided by the template when loading the page.
4766 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4767 -iCalPersonWithUid:uid]): new method taken from removed module
4770 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4772 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
4773 -categoriesAsString]): same as below.
4775 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
4776 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
4778 * SoObjects/Appointments/SOGoAppointmentObject.m
4779 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
4780 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
4783 * SoObjects/Appointments/SOGoAppointmentFolder.m
4784 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
4785 hackish test to detect whether the request concernes VEVENT's or
4786 anything else. Return events only in the former case.
4787 ([SOGoAppointmentFolder
4788 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
4789 c_name quickfield so that the calendar list can identify the
4790 appointments with their complete "filename".
4792 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
4793 groupsOfClass:fromSource: to parse the given vcalendar.
4795 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
4797 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
4799 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
4802 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
4804 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4806 * SoObjects/Appointments/SOGoAppointmentFolder.m
4807 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
4808 sensitive to the CalDAV method names.
4809 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
4810 "calendar-query" CalDAV method name.
4812 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
4813 code coming originally from MailerUI.js.
4815 * UI/WebServerResources/UIxContactEditor.js: imitate the
4816 Thunderbird address book by completing the display name with the
4817 content of the first and last name fields, until the display name
4818 is modified manually.
4820 * UI/WebServerResources/generic.js: added a "trim" method to the
4823 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4824 -displayName]): new method that returns the display name from "cn"
4825 or from the "displayName" key if found.
4827 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4828 -initSnapshot]): check if "[card n]" returns anything to avoid a
4831 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
4832 that returns an unparsed doctype definition for the pages.
4834 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4835 -vCard]): set the card's fn to attribute "displayName" if found
4838 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4840 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4841 -vCard]): handle the "streetAddress" and "l" fields.
4843 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
4844 header fields by converting the tables to DIVs and SPANs.
4846 * UI/WebServerResources/generic.css: attempted unification of font
4847 families and size across all the elements. changed the
4848 logConsole's "position" from "fixed" to "absolute" to avoid
4851 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4853 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
4854 empty the contact view when the current contact is being deleted.
4856 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
4857 parse the email field and provide the address full name if found
4858 as the "contactFN" parameter.
4860 * UI/WebServerResources/generic.js (openMailTo): do not give a
4861 name to the opened window so that serveral ones can be opened at
4864 * UI/MailPartViewers/UIxMailPartTextViewer.m
4865 ([UIxMailPartTextViewer -flatContentAsString]): override method by
4866 replacing carriage returns with "<br />" in the result string from
4867 super's implementation.
4869 * UI/Contacts/UIxContactView.m ([UIxContactView
4870 -_urlOfType:aType]): don't manage non-mailto urls through
4871 javascript, let the user decide what's best for him.
4873 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4874 -newAction]): transfer all the query parameters by using the
4875 "asURLParameters"'s result string from [self queryParameters].
4877 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4878 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
4879 query parameters and put their values (if any) into the snapshot.
4881 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
4882 carriage-returns to "<br />".
4883 ([UIxContactView -workCompany]): explicitly initialize company to
4884 nil if org is nil or empty.
4886 * UI/WebServerResources/UIxContactEditor.js: updated validation
4887 code after we added and renamed some fields.
4889 * UI/WebServerResources/ContactsUI.js: added code to cache contact
4890 cards and to handle card updates.
4892 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4894 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
4895 test the length of the returned string since they will never be
4898 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
4899 return self if the process went successful, returns an exception
4900 otherwise (and only otherwise...).
4902 * OGoContentStore/OCSContactFieldExtractor.m
4903 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
4904 adapted method to the new VCard api. Since the cards are stored in
4905 vcard format, we no longer deal with a dictionary but with a
4908 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4910 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
4911 return a string with a "mailto" url.
4912 ([UIxContactView -_urlOfType:aType]): generic method to return a
4913 url string with a html anchor pointing to it.
4915 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
4916 since subclass "UIxContactEditor" did nothing. Implemented code to
4917 display and modify the values parsed from the vcards, displayed in
4918 a way similar to the Thunderbird addressbook.
4920 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4921 -save]): new dummy method.
4923 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4924 -save]): made method void.
4926 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4928 * UI/Contacts/UIxContactView.m: added many wrapper methods to
4929 display blocks of data à la Thunderbird Addressbook. If data is
4930 available, those wrappers (around the NGVCard methods) will
4931 enclose the results in a proper HTML output with the correct label
4932 (if present), otherwise it will return an empty string.
4933 ([UIxContactView -vcardAction]): new action to return the contact
4934 as text/vcard (for exporting).
4936 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4937 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
4939 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4940 -vCard]): create a new NGVCard instance when no data is available
4942 ([SOGoContactGCSEntry -save]): save the vCard using the new
4943 "versitString" API method/message.
4945 * UI/Contacts/UIxContactView.h: separated interface from
4948 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
4949 views and display them beneath the list.
4951 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4953 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
4954 the timezone even when it's the server timezone.
4956 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4957 -privateContacts:inContext:]): no long configure the calendar
4958 object with the user's timezone since it's now accessible
4959 application-wide throught the SOGoObject methods.
4961 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
4962 method. Removed the "backendTimeZone" method.
4964 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
4965 instead of SoComponent.
4967 * SoObjects/Appointments/SOGoAppointmentObject.m:
4968 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
4969 [self serverTimeZone] instead of "EST" (which was removed).
4971 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
4972 "timeZone" ivar and its accessors.
4974 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
4975 centralized method returing the timezone configured in the
4976 userdefaults db or "Canada/Eastern" if missing.
4977 ([SOGoObject -userTimeZone]): new centralized method returing the
4978 timezone of the current user or the server timezone if missing
4979 from the user configuration table.
4981 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4983 * UI/WebServerResources/SchedulerUI.js: implemented caching of
4986 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
4987 return a path based on the object's context instead of the first
4988 level in SOGo's object hierarchy...
4990 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4992 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
4995 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
4996 timezone ([self viewTimeZone]) to the WEMonthOverview component to
4997 avoid a confusion with the days.
4999 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
5002 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
5003 imitate Sunbird's synchronization between the 3 visible views.
5005 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
5006 sure the numbers in dateString are formatted so as to take 4 chars
5007 for the year and 2 for the day and the month, otherwise
5008 NSCalendarDate will return a nil date.
5009 ([UIxComponent -applicationPath]): return a path based on the
5010 object's context instead of the second level in SOGo's object
5013 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5015 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
5016 user's timezone abbreviation to the date string passed as parameter to
5017 NSCalendarDate to generate an accurate date instance. Do the same
5018 when no date is specified and today is chosen.
5020 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
5021 form's time values to integers before comparing them.
5023 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
5024 ([UIxCalAptListView -currentEndTime]): initialize the resulting
5025 dates timezone with [self viewTimeZone].
5027 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
5028 "viewTimeZone" ivar destined to hold an instance of the user's
5030 ([UIxComponent -viewTimeZone]): take the timezone from the user's
5033 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5035 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
5036 rearranged the layout.
5038 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
5039 manage showing and hiding appointment details.
5041 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5042 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
5043 timezone by taking the current user's timezone setting.
5045 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
5047 * SoObjects/Appointments/SOGoAppointmentObject.m
5048 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
5049 set default timezone to EST, although this code should be
5050 rewritten to handle a system and a user default value.
5052 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
5053 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
5054 take the values from the hour and minute INPUTs when data is
5055 POSTed since we no longer use the UIxTimeSelector component.
5056 ([UIxTimeDateControl -selectableHours])
5057 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
5058 template SELECTs to display reasonable and acceptable values
5059 instead of all the possibilities.
5061 * UI/WebServerResources/generic.js: adapted code for the new
5062 implementation of the UIxContactSelector component (added a
5063 "remove" button, removed the previous INPUT and replaced them with
5064 links of class "button").
5066 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
5067 UIxTimeDateControl.m.
5069 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
5070 ([UIxCalDayTable -currentAppointmentHour]): new methods that
5071 returns correctly formatted values used as attributes for JS code.
5073 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
5074 -initialContactsAsString]): renamed implementation of
5075 initialParticipants.
5076 ([UIxContactSelector -currentContactId])
5077 ([UIxContactSelector -currentContactName]): new methods used when
5078 listing the initial contacts in the widget. Currently, both return
5079 the person's cn but the latter should ultimately return a user
5082 * UI/Contacts/UIxContactSelector.h: separated interface from
5083 UIxContactSelector.m.
5085 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
5086 all javascript code is now put in Scheduler.js/generic.js.
5088 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
5089 moved into NSCalendarDate+Scheduler instead.
5091 * SoObjects/Appointments/SOGoAppointmentFolder.m
5092 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
5093 configure the timezone from SOGoUserFolder when the instance is
5095 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
5096 the value of the new "timezone" ivar.
5098 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5100 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
5101 the date selector in the first page and the container of the
5102 future calendar selector in the second page.
5104 * UI/WebServerResources/generic.js: added code for handling tabbed
5107 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
5108 returns the bundle name associated to the current running product.
5110 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5112 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
5113 exception by invoking a timeout on the opener rather than invoking
5114 the list refresh method.
5116 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
5119 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
5120 ([UIxCalWeekView -prevWeekQueryParameters])
5121 ([UIxCalWeekView -nextWeekQueryParameters])
5122 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
5123 that return the dates relatively to the current day.
5124 ([UIxCalWeekView -lastWeekName])
5125 ([UIxCalWeekView -currentWeekName])
5126 ([UIxCalWeekView -nextWeekName])
5127 ([UIxCalWeekView -weekAfterNextWeekName])
5128 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
5129 methods that returns the label for the corresponding weeks.
5131 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
5132 used by UIxCalDayView and UIxCalWeekView to display the events
5133 occuring in one or more days.
5135 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5137 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
5138 entries in the new "monthMenu" and "yearMenu".
5140 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
5141 method to return the current day as a string formatted depending
5142 on the current locale.
5144 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
5145 ([UIxCalAptListView -endDate]): "today" is now the default filter
5146 for displayed events.
5147 ([UIxCalAptListView -currentSerialDay]): new method returning the
5148 date of the current enumerated appointment in serial form
5151 * UI/WebServerResources/SchedulerUI.js: added code to select the
5152 relevant day when an appointment is selected. Added code to popup
5153 a month and a year menu whenever the header entries are clicked in
5154 the calendar widget.
5156 * UI/WebServerResources/generic.js: made addClassName and
5157 removeClassName methods of HTMLElement.
5159 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5161 * UI/WebServerResources/MailerUI.js: fixed the contact creation
5162 from email addresses.
5164 * UI/WebServerResources/generic.js: centralized the search-related
5165 functions here since the same code was used across the 3
5168 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
5169 ([UIxCalAptListView -endDate]): return the required dates needed
5170 depending on the value given to the "filterpopup" url parameter.
5172 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
5173 code by invoking UIxComponent's labelForKey:.
5175 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
5176 [self pageResourceManager] instead of [self resourceManager].
5178 * UI/Contacts/UIxContactEditorBase.m: invokes
5179 globallyUniqueObjectId on the clientobject's class instead of the
5180 hardcoded "SOGoFolder".
5182 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
5183 -newAction]): redirect the "new" action to the personal (default)
5186 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
5187 +objectWithName:inContainer:]): new constructor.
5189 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
5190 -lookupContactWithId:recordId]): always create a contact object,
5191 even if it does not exist.
5193 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5195 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
5196 component that lays out the different components of SOGoCalendar.
5197 Only serves as an Objective-C counterpart to its xml template.
5199 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
5202 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
5203 display a widget to handle the information displayed in the
5204 appointments list. Not currently used, lacks implementation.
5206 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
5207 display a calendar as a dynamic widget from where one can select
5208 the current visible day.
5210 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
5211 extracted from UIxCalInlineMonthOverview.m.
5213 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
5214 calendarPageURL methods. The javascript code is handled by .js
5215 files as much as possible...
5217 * UI/WebServerResources/ContactsUI.js,
5218 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
5221 * UI/WebServerResources/SchedulerUI.js: implemented functions to
5222 handle the new widgets. XmlHTTPRequest code taken from
5225 * UI/WebServerResources/generic.js: put some functions related to
5226 element selections as methods to HTMLElement and HTMLTableElement.
5228 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
5229 display the list of appointments (embodies the code-size of
5230 UIxCalAptListView; answers to the "aptlist" method).
5232 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5234 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
5235 -correctURLAction]): new short action method replacing the method
5236 below by taking far less code.
5238 * SoObjects/Appointments/SOGoAppointmentFolder.m
5239 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
5240 with an action in the view-related code.
5242 * UI/Scheduler/UIxAppointmentEditor.m: invoke
5243 "stringByEscapingHTMLString" on the resulting value to avoid
5244 issues with accented characters.
5245 ([-jsCode]): removed method since the javascript code was merged
5246 into SchedulerUI.js.
5248 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5250 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
5251 new class method that returns an iCalPerson based on the UID given
5254 * UI/Contacts/UIxContactsListViewContainerBase.m:
5255 UIxContactsListViewContainer renamed to serve as a base class for
5256 the contact lists in both the contact editor and the contact
5259 * SoObjects/Contacts/SOGoContactLDAPFolder.m
5260 ([SOGoContactLDAPFolder
5261 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
5262 setUserIdentifier:setRootDN:]): an LDAP field specifying the
5263 loginname of the users can now be specified.
5265 * UI/WebServerResources/generic.js: added code to manage contact
5266 lists through the new implementation of the UIxContactSelector.
5268 * UI/Templates: put the templates related to SchedulerUI in its
5271 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
5272 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
5273 entry for "uid" with the field name representing the login name of
5274 the user in the corresponding LDAP branch.
5276 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5278 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
5279 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
5280 request is a PUT, always create an entry, even if we're not sure
5283 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5285 * UI/WebServerResources/ContactsUI.js: implemented live-search.
5287 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
5288 -appendSystemSourcesInContext:context]): populated method with
5289 code that creates entries mapped to instances SOGoContactFolder,
5290 based on the configuration found in the NSUserDefaults under the
5291 key "SOGoLDAPAddressBooks".
5292 ([SOGoContactFolders
5293 -lookupName:nameinContext:contextacquire:acquire]):
5294 "contactsources" do not exist anymore, SOGoContactFolder was split
5295 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
5296 and one protocol: SOGOContactFolder, instead.
5297 ([SOGoContactFolders -contactFolders]): new accessor used by the
5298 views of SOGoContactXXXFolder to list the possible sources.
5300 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
5301 defines the methods that UIxContactsView, ..Editor and so on...
5304 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
5305 defines the methods that UIxContactsListViewBase expects as well
5306 as the data fields returned in the contact lists.
5308 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
5309 returns entries an LDAP server. Conforms to the new
5310 SOGOContactFolder protocol.
5312 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
5313 returns a vCard based on contact entries from an LDAP server.
5314 Conforms to the new SOGOContactObject protocol.
5316 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
5317 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
5318 entry for the textual representation of the vCard.
5320 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
5323 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
5324 "SOGoContactObject".
5326 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
5327 method that generates a textual representation of the vcard.
5329 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
5331 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
5332 "SOGoContactFolder".
5334 * SoObjects/Contacts/SOGoContactSource.h,
5335 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
5338 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
5339 -singleAttributeWithName:key]): new method that returns the first
5340 object associated with an ldap key (where generally one value is
5343 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
5344 map the entry into an NSDictionary for processing by
5345 UIxContactsListViewBase.m with the least possible overhead.
5347 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
5350 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5352 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5353 -privateContacts:inContext:]): now returns an instance of
5356 * UI/Contacts/UIxContactsListViewContainer.m
5357 ([UIxContactsListViewContainer -contactFolderName]): new method to
5358 return the absolute path to the current contact folder, called
5359 from within the template.
5361 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
5362 JS code to initialize the 'currentContactFolder' generic var.
5364 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
5365 +contactFolderWithSource:inContainer:andName:]): new class
5366 method meant to return an instance connected to the specified
5367 source. Currently useless but won't be anymore in the next few
5370 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
5371 the "lookupFreeBusyObject" method since it does not exist.
5373 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
5374 as a "view" for the SOGoContactFolders object. Does nothing but
5375 redirect the browser to the URL of the personal address book of
5376 the user. It does not even have a template.
5378 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
5379 implementing the SOGoContactSource protocol. Does nothing
5380 currently but will be used to implement access to the personal
5381 address book of the user stored in the SOGo database.
5383 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
5384 protocol defining an API common to all possible types of contact
5387 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
5388 serving as the root of the contact folders available to the
5389 current user. Correctly lists the contact sources in webdav.
5391 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5393 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
5394 -composeAction]): new action method that permits external object
5395 to write a message from the default (primary) account.
5397 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5398 -initSnapshot]): new method with code taken from "defaultAction"
5399 but needed for others.
5400 ([UIxContactEditorBase -writeAction]): new action designed to
5401 compose the correct URL needed to obtain the MailerUI's email
5402 editor with the correct "mailto" parameter.
5404 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
5405 Common so that other modules can use it.
5407 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
5408 easier to manage both ajax and non-ajax requests.
5410 * UI/Contacts/UIxContactsFilterPanel.m: clone of
5411 UIxMailFilterPanel, but applicable to contact lists.
5413 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
5414 -vcardContentFromSOGoContactRecord]): use the new standard methods
5415 created for each type of entry. If a line is determined to not
5416 contain information, it will be skipped.
5418 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
5419 +initialize]): init defaultMailDomain with the user default
5420 "SOGoDefaultMailDomain".
5422 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5424 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5425 -saveAction]): reorganized methods to only have ONE return point.
5426 Invoke saveRecord: directly on the clientObject instead of
5427 saveContentString, which does the same thing anyway.
5429 * SoObjects/Contacts/NSDictionary+Contact.m
5430 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
5431 method to convert the dictionary returned with the user submission
5432 to a record in VCARD format to be stored in the database.
5434 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5436 * UI/WebServerResources/MailerUI.js: when opening the context menu
5437 of the message list, select the message below the mouse cursor and
5438 deselect the other selected messages temporarily. This mimics the
5439 behaviour of Thunderbird for that matter and was already
5440 implemented for the entries of the folder tree.
5442 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
5443 -iconForMenuItem]): new method that returns the fully qualified
5444 relative URL to the icon representing the mailbox, or the default
5445 mailbox icon if needed.
5447 * UI/SOGoUI/UIxComponent.m ([UIxComponent
5448 -urlForResourceFilename:filename]): automatically return an empty
5449 string whenever the filename passed as argument is nil.
5451 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
5452 "desc" parameter set to 1 so that they are sorted in descending
5453 order by default. Also, added "onHeaderClick()", triggered by
5454 clicking on the message list header elements.
5456 * UI/MailerUI/UIxMailSortableTableHeader.m
5457 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
5459 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5460 -isSortedDescending]): defaults to "YES" when the sort order is
5463 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5465 * UI/WebServerResources/MailerUI.js:
5466 - message cache: set the max num of cached messages to 20. Limit
5467 the cached message size to 30000 bytes.
5468 - ajax: when a message request is called while one is already
5469 being performed, the latter will be cancelled. Idem when
5470 retrieving the content of a mailbox.
5471 - folder tree: when a mailbox is selected because of the URL
5472 requested (initMailboxSelection), the dtree is expanded throughout
5473 the mailbox entry's parent hierarchy to ensure it is made visible
5474 when the page is being displayed. (new function: expandUpperTree).
5475 - mailbox loading: when loading a mailbox where a message was
5476 previously selected, we invoke its url with the "pageforuid"
5477 parameter correctly specified. During callback processing, we scan
5478 the table for the related row and reselect it.
5479 Also, the message area is set blank before loading any mailbox.
5481 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5482 -defaultAction]): if the "pageforuid" parameter is passed in the
5483 url, take its value and invoke [self firstMessageOfPageFor:]
5484 consequently to deduce the first message to display. Otherwise,
5485 set it to "idx", otherwise set it to 0.
5486 ([UIxMailListView -firstMessageOfPageFor:]): new method
5487 that determines the first message of the page where the message
5488 passed as parameter is contained.
5490 * UI/WebServerResources/UIxMailListView.js: removed this module,
5491 its code was put in MailerUI.js instead.
5493 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5495 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
5496 which returns the nodes for the parent specified in "parentMenu".
5497 Used to generate the javascript code for the folder dtree.
5499 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
5500 using that container-template are now using UIxMailMainFrame
5501 since UIxMailPanelFrame had no real interest. File removed.
5503 * UI/WebServerResources/dtree.{css,js}: new files to handle
5504 javascript-generated mailbox tree. Modified from original version
5505 by integrating the previous code with the one we are using for
5506 selections and mailbox handling. Minor visual enhancements too...
5508 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5510 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
5511 returned, put it in an NSArray before returning it (fixes
5514 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5516 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
5517 that returns a url string stripped from its "http://hostname"
5520 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
5522 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
5524 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5526 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
5527 -mailDateFormatter]): retrieve the timezone from the user settings
5528 and pass it to the returned dateFormatter. Also, the dateFormatter
5529 is kept in a static variable to avoid useless
5530 creations/destructions.
5532 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
5533 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
5535 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
5536 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
5537 s/Criteria/Text/ to handle the "criteria" form parameter.
5539 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5541 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
5542 to integrate better with the firefox look&feel. Added entries for
5543 the new "menu" DIV class (popup menus).
5545 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
5546 takes any chunk of text as param, detects the user email and the
5547 optional first and last names and return them in a well-formatted
5548 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
5549 namespace conflict. Added "onMenuClick(node, event, menuId)" to
5550 handle popup menus through "onclick" element attributes (node =
5551 this, event = event and menuId = name of the menu DIV id to
5554 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5555 -snapshot]): add an entry for "email" into the snapshot
5556 dictionary if a "contactEmail" URL parameter was detected and if
5557 the entry for "email" is empty.
5559 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
5560 button now invokes the newContact() js function in ContactsUI.js
5561 instead of opening "new" directly. newContact() pops up a window
5562 stripped from its navigation bar.
5564 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
5565 bundle (AddressBook).
5567 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
5568 "menu" and id "addressMenu" have the header email addresses
5569 display it with the new menu code in generic.js.
5571 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
5572 replaced the body tables with a div of class "pageContent"
5573 (standardization across the page templates).
5575 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
5576 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
5577 those are now inherited from UIxPageFrame.
5579 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
5581 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
5582 a "mailto" URL parameter is detected and the "to" array is empty,
5583 initialize "to" with the value of "mailto" before returning it.
5585 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
5586 -composeAction]): rewrote method in a cleaner way and with usage
5587 of the URL extensions to NSString and NSDictionary (see below).
5588 Also, if a "mailto" url parameter is detected, pass it to the
5591 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
5594 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
5595 returns a parameter string to add to a base URL.
5597 * UI/Common/NSString+URL.m ([NSString
5598 -composeURLWithAction:parameters:andHash:useHash]): new method to
5599 compose a complete URL from an object URL with parameters and an
5600 optional '#' character.
5602 * UI/Common/UIxPageFrame.h: separated interface from
5605 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
5607 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
5609 * UI/WebServerResources/generic.js: added code to manage
5610 selections within HTML containers.
5612 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
5613 added method to determine the possible URL for a product-specific
5614 javascript filename of the forme <productname>.js.
5615 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
5616 ([UIxPageFrame -isPopup]): new method to determine whether the
5617 application navigator bar should be displayed (main page) or not
5620 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
5621 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
5622 the user through LDAP.
5624 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5626 * The toolbar code from the MailerUI product was taken, renamed as
5627 "UIxToolBar" and put into UI/Common. Toolbar plists were created
5628 for the Contacts and Scheduler products and put in their respectir
5629 Toolbars/ subdirectories. Finally,
5630 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
5631 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
5632 and an invocation to the UIxToolbar component was put at the top
5633 of UI/Templaces/UIxPageFrame.wox.
5635 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
5636 within the templates whether a separator should be displayed.
5638 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
5639 that returns NO if the toolbar is empty.
5641 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5643 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
5645 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
5646 new toolbar objects.
5648 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
5650 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
5651 linkbanner as a DIV instead of a TABLE.
5653 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
5655 returns 'YES' to request the display of the navigation bar between
5658 2006-06-15 ludovic@inverse.ca
5660 * It's now possible to set the default
5661 domain using for email using the
5662 SOGoDefaultMailDomain preference key.
5664 2006-06-15 ludovic@inverse.ca
5666 * Initial import of SOGo from trunk.