1 2007-11-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
4 -appendSubscribedSources]): don't include sources for which we
5 don't have the SOGoPerm_AccessObject permission.
7 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
8 -rfc822DateString]): we want positive timezones to be specified
9 with a leading "+" too.
11 2007-11-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
13 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
14 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
15 return nil if the subscribed folder has no display name (meaning
18 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
19 -appendPersonalSources]): don't include sources which are no
22 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
23 -ocsPathOfContainer]): return the intended value, not that of
26 * SoObjects/Appointments/SOGoCalendarComponent.m
27 ([SOGoCalendarComponent -sendResponseToOrganizer]): send the
28 message only of sendEMailNotifications is set.
30 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -subscriptionRoles]):
31 new method that returns the roles that qualifies for adding the
32 special "authorized subscribed" sogo role.
34 2007-11-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
36 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
37 -aclsForUser:uid]): copy all the roles from the container. If the
38 object is new, make sure the roles contain "ObjectEditor" if and
39 only if "ObjectCreator" is present.
41 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
42 -aclsForUser:uid]): no longer take the "ObjectReader" role into
45 * UI/Common/UIxFolderActions.m ([UIxFolderActions
46 -canAccessContentAction]): always return HTTP status 204. We want
47 this because we are relying on the SOPE access control manager to
48 grant access to this method. This requires a fine-tuned access
49 control in SOGo itself...
51 * UI/Contacts/UIxContactsUserRightsEditor.m ([-userCanReadObjects])
52 ([-setUserCanReadObjects:userCanReadObjects]): removed methods.
54 * UI/MailerUI/UIxMailUserRightsEditor.m ([UIxMailUserRightsEditor
55 -updateRights]): no longer take the "ObjectReader" role into account.
56 ([-userCanReadMails], [-setUserCanReadMails:userCanReadMails]):
59 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
60 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): specify context
61 when looking up the Calendar folder.
63 2007-11-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
65 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): same as below.
67 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
68 -event]): create the event if it doesn't exist.
70 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -userHasCalendarAccess])
71 ([UIxPreferences -userHasMailAccess]): same as below, for
72 displaying preference tabs.
74 * UI/Common/UIxPageFrame.m ([UIxPageFrame
75 -userHasCalendarAccess]): new accessor for the link banner.
76 ([UIxPageFrame -userHasMailAccess]): same as above.
78 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
79 -toManyRelationshipKeys]): do not report the path to modules to
80 which the user has no access. No longer cache this information
81 statically, the array will be generated at each call.
82 ([SOGoUserFolder -lookupName:_keyinContext:_ctxacquire:_flag]):
83 ignore the path to modules to which the user has no access.
85 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -canAccessModule:module]):
86 new method that returns whether the user has access to the
89 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
90 -initFromUDSource:udSource]): take a new parameter named
91 'ModulesContraints' that defines a set of constraints for
92 accessing specified named modules. This is an optout, meaning the
93 modules will be present unless a constraint is specified.
95 * SoObjects/Appointments/SOGoAppointmentFolder.m
96 ([SOGoAppointmentFolder
97 -roleForComponentsWithAccessClass:accessClassforUser:uid]): cache
98 acl to reduce method calls.
99 ([SOGoAppointmentFolder
100 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
101 if the user is not the current user, we strip the useless info
104 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
105 -labelForKey:key]): new category method.
107 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
108 -event]): same as below.
110 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): request a
111 secured version of the component.
113 * UI/MailPartViewers/UIxMailPartViewer.m
114 ([-fallbackStringEncoding]): removed method.
115 ([UIxMailPartViewer -flatContentAsString]): we no longer use [self
116 fallbackStringEncoding]. Instead we directly specify
117 NSISOLatin1StringEncoding if UTF-8 has failed.
119 * UI/MailPartViewers/UIxMailPartICalViewer.m
120 ([-fallbackStringEncoding]): removed method.
122 2007-11-25 Ludovic Marcotte <ludovic@inverse.ca>
124 * SoObjects/Mailer/SOGoMailForward.m
125 Use [sourceMail decodedSubject] instead of [sourceMail subject]
126 Signature fix in -signature - see the comment
129 * SoObjects/Mailer/SOGoMailObject.m
130 Improved -stringFromData: to try UTF-8 then fallback to Latin1
132 * SoObjects/Mailer/SOGoMailReply.m
133 Modified -messageBody to strip the signature from the reply.
134 Also modified -signature to add "-- \n%@" instead of the
135 broken ""--\r\n%@" pattern.
137 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m
138 We now favor text/calendar parts over text/html and
139 text/plain parts when viewing a multipart/alternative mail.
140 This allows us to show the email invitations coming from
143 * UI/MailerUI/UIxMailAccountActions.m
144 Signature fix in -composeAction - see the comment
147 * UI/MailPartViewers/UIxMailPartViewer.m
148 Modified -flatContentAsString to use UTF-8 as the
149 default fallback encoding for 8-bit content.
151 * SoObjects/Mailer/SOGoDraftObject.m
152 Modified _fillInReplyAddresses:replyToAll:envelope:
153 so that if there's no recipient, we add at least
155 Fixed a mem leak in the same method.
157 2007-11-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
159 * UI/MailPartViewers/UIxMailRenderingContext.m
160 ([UIxMailRenderingContext -viewerForBodyInfo:_info]): same as below.
162 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
163 -plainTextContentFetchKeys]): same as below.
165 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
166 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): accept the
167 application/ics type from Google Calendar.
169 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
170 +distantFuture]): rewrote method to return an object that is
171 compatible with NSCalendarDate, unlike the implementation in
173 ([NSCalendarDate +distantPast]): same as above.
175 2007-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
177 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: fixed infinite loop
178 when charset is us-ascii, match it to ascii rather than none.
180 * SoObjects/Appointments/SOGoAppointmentFolder.m
181 ([SOGoAppointmentFolder
182 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
183 added search on the c_title column too.
185 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
186 -eventsListAction]): take the "search" url parameter into account.
187 ([UIxCalListingActions -eventsListAction]): fetch events matching
188 the title filter too.
190 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -connectAction]): the
191 user infos are now posted as "application/x-www-form-urlencoded".
192 So we have to have like a form has been posted.
194 2007-11-21 Francis Lachapelle <flachapelle@inverse.ca>
196 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
197 -calendarList]): also returns the calendar of the current
198 event. This is required so the proper calender is selected when
199 you view an event to which you don't have write access.
201 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
202 also returns true for super users.
204 2007-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
206 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
207 -lookupImap4BodyPartKey:inContext:]): return a correct body part
208 when "0" is requested, taking its mime-type into account.
210 * UI/MailPartViewers/UIxMailRenderingContext.m
211 ([UIxMailRenderingContext -flatContentForPartPath:_partPath]):
212 return content for part "0", which would be the message body.
214 2007-11-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
216 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
217 ([_UIxHTMLMailContentHandler
218 -setContentEncoding:newContentEncoding]): new method that
219 specifies an xml charset to return to the parser.
220 ([UIxMailPartHTMLViewer -flatContentAsString]): specifies the
221 charset to the content handler before parsing.
223 * SoObjects/Appointments/SOGoAppointmentObject.m: don't take an
224 empty c_name as a valid response when looking up an event. Create
225 one in that case instead.
227 2007-11-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
229 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -signature]):
230 returns the signature for the default identity of the default
232 ([UIxPreferences -setSignature:newSignature]): accessor that sets
233 the default signature.
235 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
236 -composeAction]): append the message signature to the new draft.
238 * SoObjects/Mailer/SOGoMailReply.m ([SOGoMailReply -signature]):
241 * SoObjects/Mailer/SOGoMailForward.m ([SOGoMailForward
242 -signature]): new method that takes the user's signature and put
243 it at the end of the message, if exists.
245 * UI/Common/UIxPageFrame.m ([UIxPageFrame -isSuperUser]): new
246 accessor that forwards the call to the active user.
248 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -signature]): returns the
249 user default signature.
250 ([SOGoUser -isSuperUser]): declares whether the user is listed
251 among the super users.
253 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
254 -setComponent:newComponent]): retain the component object.
255 ([UIxComponentEditor -organizerIdentity]): new accessor method to
256 handle list of possible organizers.
258 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
259 -event]): retain the returned event object.
261 * SoObjects/Appointments/SOGoAppointmentObject.m
262 ([SOGoAppointmentObject -saveComponent:newEvent]): reset the
263 organizer only if there are no attendees AND the owner of the
264 component is not the organizer him-/herself.
266 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
267 -toolbar]): rewrote in a way that ensures that each case is
270 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -isEqual:otherUser]): new
273 * UI/Scheduler/UIxTaskEditor.m ([-acceptAction])
274 ([-declineAction]): commented out unused methods.
276 * UI/MailPartViewers/UIxMailPartICalActions.m
277 ([UIxMailPartICalActions -deleteFromCalendarAction]): actually
278 delete the found object.
280 2007-11-18 Ludovic Marcotte <ludovic@inverse.ca>
282 * SoObjects/Mailer/SOGoMailBodyPart.m
283 SoObjects/Mailer/SOGoMailObject.m
284 UI/MailPartViewers/UIxMailPartViewer.m
285 Added support of messages containing non-textual
286 content and no parts.
288 * UI/MailerUI/UIxMailView.m
289 SoObjects/Mailer/SOGoMailObject.m
290 UI/Templates/MailerUI/UIxMailView.wox
291 Added support for the Reply-To header upon
294 2007-11-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
296 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]):
297 invoke saveComponent:.
299 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -hasOrganizer])
300 ([UIxComponentEditor -organizerName]): new template accessor
301 related to displaying the event's organizer.
302 ([-containsConflict:_component]): removed method.
303 ([UIxComponentEditor -takeValuesFromRequest:_rqinContext:_ctx]):
304 set RSVP to "TRUE" on each attendee.
306 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
307 -saveAction]): invoke saveComponent:.
309 * UI/MailPartViewers/UIxMailPartICalViewer.m
310 ([UIxMailPartICalViewer -isLoggedInUserTheOrganizer]): make use of
311 the -userIsOrganizer: category method.
312 ([-isLoggedInUserAnAttendee]): make use of -userIsParticipant:.
313 ([UIxMailPartICalViewer -hasSenderStatusChanged]): new template
314 accessor that determines whether the "Update" button should be
317 * UI/MailPartViewers/UIxMailPartICalActions.m
318 ([UIxMailPartICalActions -deleteFromCalendarAction]): implemented
320 ([UIxMailPartICalActions -updateUserStatusAction]): implemented
323 * UI/Common/UIxPageFrame.m ([UIxPageFrame
324 -setCssFiles:newCSSFiles]): new accessor that enables the
325 sub-templates to specify extra CSS files to load.
327 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
328 -homeFolderInContext:context]): cache the home folder of the user
329 object instead of the current user.
331 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
332 -deleteEntriesWithIds:ids]): invokes the "prepareDelete" optional
333 method if the child object implements it.
335 * SoObjects/SOGo/SOGoContentObject.m ([-setContentString:])
338 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
339 -setBaseDN:newBaseDNIDField:newIDFieldCNField:newCNFieldUIDField:newUIDFieldmailFields:newMailFieldsandBindFields:newBindFields]):
340 take a new "mailFields" parameter defining an array of fields
341 where to look at when searching the user's emails. It defaults to
342 the standard "mail" LDAP field.
344 * SoObjects/Appointments/SOGoAptMailICalReply.[hm]: new
345 SoComponent implementing a template for ITIP replies.
347 * SoObjects/Appointments/iCalPerson+SOGo.m ([iCalPerson
348 -mailAddress]): new method that returns a properly formatted email
349 address for the specified person entry.
350 ([iCalPerson -uid]): new method that tests whether the user is
351 known to the system and if so, returns its user id.
353 * SoObjects/Appointments/iCalPerson+SOGo.[hm]: new category module.
355 * SoObjects/Appointments/iCalEventChanges+SOGo.m
356 ([iCalEventChanges -sequenceShouldBeIncreased]): determine whether
357 the changes involved need a sequence inscrease, based on the
360 * SoObjects/Appointments/iCalEventChanges+SOGo.[hm]: new category
363 * SoObjects/Appointments/iCalEvent+SOGo.m ([iCalEvent
364 -isStillRelevant]): new overriden method determining the relevance
365 of the current event based on its end date.
367 * SoObjects/Appointments/iCalEvent+SOGo.[hm]: new category module.
369 * SoObjects/Appointments/iCalEntityObject+SOGo.m
370 ([iCalEntityObject -attendeeUIDs]): new category methods that
371 returns an array containing the uids of the system-know attendees.
372 ([iCalEntityObject -isStillRelevant]): new template method.
373 ([iCalEntityObject -itipEntryWithMethod:method]): clone the
374 current entry calendar with the specified ITIP method.
375 ([iCalEntityObject -attendeesWithoutUser:user]): returns an array
376 of attendees while making sure the specified user is not listed.
378 * SoObjects/Appointments/SOGoCalendarComponent.m
379 ([SOGoCalendarComponent -calendar:create:secure]): new name for
380 -calendar:. Added a "secure" parameter that specifies whether a
381 stripped calendar instance is needed or not. Also, we no longer
382 cache the content to simplify handling of new data.
383 ([SOGoCalendarComponent -component:create:secure]): same as above.
384 ([SOGoCalendarComponent
385 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
386 test whether the component is "still relevant" before sending an
388 ([SOGoCalendarComponent -sendResponseToOrganizer]): new method for
389 sending ITIP replies.
390 ([SOGoCalendarComponent -getUIDsForICalPerson:iCalPerson]):
391 removed method. Replaced with -[iCalPerson uid] category method.
393 * SoObjects/Appointments/SOGoAppointmentObject.[hm]: rewrote
394 class. No longer override saveContentString:,
395 saveContentString:baseSequence:, .... Implemented the
396 saveComponent: and the prepareDelete methods instead. Those
397 methods are called only from the web methods. This avoids the
398 risks related to email sending and changes propagation.
400 * UI/Common/UIxTabItem.m: removed useless class module.
402 * UI/Common/UIxTabView.[hm]: removed useless class module.
404 * UI/Common/UIxPrintPageFrame.m: removed useless class module.
406 * UI/Common/UIxAppNavView.m: removed useless class module.
408 2007-11-16 Ludovic Marcotte <ludovic@inverse.ca>
410 * SoObjects/Mailer/SOGoMailBaseObject.m
413 * SoObjects/Mailer/SOGoMailBodyPart.m
414 We also grok image/jpeg and return the SOGoMailBodyPart
415 for attachments fetching.
417 * SoObjects/Mailer/SOGoMailObject+Draft.m
418 Prevent a crash in case body decoding failed during
421 * SoObjects/Mailer/SOGoMailObject.m
422 Improved body decoding during a reply to also try
423 latin1 as an encoding.
425 * UI/MailPartViewers/UIxMailRenderingContext.m
426 Greatly improved the display mechanisms for emails.
427 Also properly consider the content disposition for
430 * UI/MailerUI/UIxMailToSelection.m
431 Removed worthless code.
433 * UI/WebServerResources/MailerUI.css
434 CSS fix for table views.
436 2007-11-15 Ludovic Marcotte <ludovic@inverse.ca>
438 * UI/WebServerResources/MailerUI.js
439 We now check for empty selection and warn the
440 user about it when deleting messages
442 * SoObjects/Mailer/SOGoDraftObject.m
443 Correctly check for the presence of a subject
444 before attempting to forward a message from
447 * SoObjects/Mailer/SOGoMailObject+Draft.m
448 We no longer use "[Fwd: ]" but simply "Fwd:"
449 when forwarding email messages.
451 * SoObjects/SOGo/SOGoUser.m
452 Modified the default forwarding format to be
453 inline instead of "attachment".
455 * SoObjects/Mailer/SOGoDraftObject.m
456 We now create and use a NGMimeContentDispositionHeaderField
457 in order to avoid encoding the whole Content-Disposition
458 header in case a non-ASCII char is present!
460 2007-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
462 * SoObjects/SOGo/iCalEntityObject+Utilities.m ([iCalEntityObject
463 -findParticipant:user]): new method based on the one removed from
464 SOGoCalendarComponent below.
466 * SoObjects/SOGo/iCalEntityObject+Utilities.[hm]: new category
467 module for iCalEntityObject.
469 * SoObjects/Appointments/SOGoCalendarComponent.m
470 ([-findParticipant:user]): removed method.
472 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
473 -setContentString:newContent]): new accessor method.
475 -saveContentString:newContentbaseVersion:newBaseVersion]): invoke
476 -[self setContentString:].
478 * UI/MailPartViewers/UIxMailPartICalViewer.m
479 ([UIxMailPartICalViewer -authorativeEvent]): returns the most
481 ([-isLoggedInUserTheOrganizer]): make use of -[SOGoUser
484 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
485 -stringByConvertingCRLNToHTML]): fixed crashes due to overflows in
486 temporary buffer we are handing.
488 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
489 -setComponent:newComponent]): check that newComponent is non-nil
490 before replacing the default values.
491 ([UIxComponentEditor -calendarList]): privacy is already an ivar.
492 We don't need to refetch it.
494 2007-11-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
496 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
497 -fetchMailForReplying:sourceMailtoAll:toAll]): remove the current
498 user from the list of recipients and make sure no other address is
501 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
502 -stringByConvertingCRLNToHTML]): build the returned NSString
503 without the ending \0.
505 2007-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
507 * UI/MailPartViewers/UIxMailPartICalViewer.m
508 ([UIxMailPartICalViewer -acceptLink])
509 ([UIxMailPartICalViewer -declineLink])
510 ([UIxMailPartICalViewer -tentativeLink]): removed useless methods.
512 * UI/MailPartViewers/UIxMailPartICalAction.m
513 ([UIxMailPartICalAction -addToCalendarAction])
514 ([UIxMailPartICalAction -deleteFromCalendarAction]): new stub
517 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
518 -lookupImap4BodyPartKey:]): make use of the new method below.
520 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
521 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): new method
522 that returns an appropriate Class depending on a given mime type.
524 * UI/SOGoUI/UIxComponent.m ([UIxComponent -canCreateOrModify]):
525 new boolean accessor that determines whether someone can create
526 (i.e. modify a new entry) or modify an existing entry.
528 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
529 -lookupName:lookupNameinContext:localContextacquire:acquire]):
530 overriden method to bind looked up keys to So methods but by
531 avoiding a call to toOneRelationshipKeys. This will be the top
532 method of the chain, meant to override SoObject's behaviour.
534 * SoObjects/Contacts/SOGoContactLDAPFolder.m
535 ([SOGoContactLDAPFolder
536 -lookupName:objectNameinContext:lookupContextacquire:acquire]):
537 removed hack to prevent [super lookupName...] to read the entire
538 LDAP directory when looking up a record.
540 2007-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
542 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
543 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
546 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
547 ([UIxMailPartHTMLViewer -_attachmentIds]): the reference was one
548 character too short, which cause the images not to be displayed
549 sometimes and crashes to happen whenever the references on a
550 message were wrong (due to bugs in SOPE).
552 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
553 -hasMessageAttachment]): consider an attachment any content that
554 has a non-nil disposition.
556 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
557 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
558 fixed method to make use of the parameters instead of the useless
559 remains that weren't even initialized.
561 * SoObjects/Appointments/SOGoAppointmentObject.m
562 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
563 don't propagate the event among the attendees if this is not an
565 ([SOGoAppointmentObject -deleteWithBaseSequence:]): same as above.
567 * Main/SOGo.m ([SOGo -authenticatorInContext:context]): make use
568 of the new category method below.
570 * SoObjects/SOGo/WORequest+SOGo.m ([WORequest
571 -handledByDefaultHandler]): new method that returns whether this
572 is an "so" or alike request.
574 * SoObjects/SOGo/WORequest+SOGo.[hm]: new category module.
576 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
577 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
578 write the new folder's name in the folder cache.
580 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
581 -calendars]): same as below.
583 * UI/Contacts/UIxContactsListViewContainer.m
584 ([UIxContactsListViewContainer -currentContactFolderName]):
585 translate the display name if its the default one.
587 * SoObjects/Appointments/SOGoAppointmentFolder.m
588 ([SOGoAppointmentFolder -create]): overriden method that invokes
589 its ancestor and then activate itself within the user settings.
591 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
592 -appendPersonalSources]): when the user is the owner of the
593 current folder, we create the "personal" folder if it doesn't
594 exist by invoking "create".
596 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
597 -primaryFetchProfile]): when no row is returned, we initialize
598 "values" to a new dictionary. This solves a bug where the defaults
599 would not be initialized properly.
601 2007-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
603 * SoObjects/SOGo/SOGoGCSFolder.m ([-compare:otherFolder]): method
604 moved into the SOGoFolder class.
606 * SoObjects/Appointments/SOGoAppointmentObject.m
607 ([SOGoAppointmentObject -saveContentString:_iCalinUIDs:_uids]):
608 simplified method by directly building a similar appointment
609 object with the current folder as container.
611 * SoObjects/Contacts/SOGoContactLDAPFolder.m
612 ([SOGoContactLDAPFolder
613 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
614 take the content of an object returned by
615 lookupName:inContext:acquire: instead of the dictionary passed as
616 parameter since it represents a flattened entry return by
617 lookupContactsWithFilter...
619 * SoObjects/Contacts/SOGoFolder+CardDAV.m: NSObject+CardDAV
620 category renamed to SOGoFolder+CardDAV.
622 * SoObjects/SOGo/SOGoParentFolder.m: no longer a subclass of
623 SOGoObject, but of SOGoFolder instead.
625 * SoObjects/SOGo/SOGoUserFolder.m: no longer a subclass of
626 SOGoGCSFolder, but of SOGoFolder instead.
628 * SoObjects/Appointments/SOGoAppointmentFolder.m
629 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): fixed
630 to take the new SOGoParentFolder class into account. Also, create
631 the personal folder if it doesn't exist.
633 * SoObjects/SOGo/SOGoFolder.[hm]: new class module implementing
634 the parent of all SOGo containers.
636 * SoObjects/SOGo/SOGoGCSFolder.[hm]: SOGoFolder class renamed to
639 2007-11-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
641 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection
642 -getAddressesFromFormValues:_dict]): take NSString and NSArray
643 values. Ignore addresses with a length of 0.
645 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -mailAccounts]): we now
646 fetch the accounts from the user defaults and create default
649 2007-11-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
651 * UI/MailPartViewers/UIxMailPartTextViewer.m
652 ([UIxMailPartTextViewer -flatContentAsString]): re-added
653 conversion of line-break to sequences of HTML "BR", with a fast
656 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
657 -flatContentAsString]): simplified method now that we know
658 -[NSString stringWithData:usingEncodingNamed:] has a more robust
661 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
662 -showToAddress]): the answer is cached.
664 * UI/Common/UIxObjectActions.m ([UIxObjectActions +initialize]):
665 read "SOGoACLsSendEMailNotifications" from the user defaults to
666 determiner whether to send an email when a user is added or
667 removed from an object's acl.
669 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
670 -contentForEditing]): make sure the htmlContent flag is set to NO
671 when we select the textual part. Also we select only the relevant
674 * UI/MailerUI/WOContext+UIxMailer.m ([-mailSubjectFormatter]):
677 * UI/MailerUI/UIxMailView.m ([UIxMailView -messageSubject]): new
678 method replacing -objectTitle, written like the ones below.
680 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
681 -messageSubject]): rewrote method to act the one below.
683 * UI/MailPartViewers/UIxMailPartMessageViewer.m
684 ([UIxMailPartMessageViewer -messageSubject]): new method that
685 returns the decoded mail subject or "Untitled" if the subject is
688 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
689 -decodedSubject]): new method that invoke -decodedSubject from the
690 NSString and NSData class, depending on the identity of the
691 subject obtained from the envelope.
693 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
694 -subjectForReply]): take the value of -[SOGoMail decodedSubject]
695 instead of the subject of the envelope.
696 ([SOGoMailObject -filenameForForward]): same as above.
697 ([SOGoMailObject -subjectForForward]): same as above.
699 * SoObjects/Mailer/NSString+Mail.m ([NSString -decodedSubject]):
700 same as below for NSString.
702 * SoObjects/Mailer/NSData+Mail.m ([NSData -decodedSubject]): new
703 method that decodes the subject of a mail taken as an NSData
704 instance. Handling the exceptions and the badly formatted headers.
706 * UI/MailerUI/UIxSubjectFormatter.[hm]: dropped class module.
708 2007-11-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
710 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
711 -deleteEntriesWithIds:ids]): make sure the objects returned by
712 lookupName:... are not instances of NSException.
714 2007-11-03 Ludovic Marcotte <ludovic@inverse.ca>
716 * UI/Scheduler/UIxAppointmentEditor.m
717 Fixed monthly recurrences support.
719 2007-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
721 * SoObjects/Appointments/SOGoAppointmentObject.m
722 ([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
723 sent when modifying an event, when the event was considered
724 relevant. The same thing is now implemented for event deletion.
726 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
727 -primaryFetchProfile]): make sure that the deserialized "values"
728 is an instance of NSMutableDictionary, otherwise we override it
731 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
732 -contentForReply]): make use of the SOGoMailReply WO page.
734 * SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
735 from SOGoMailForward to handle mail replies instead. Only three
736 methods remaining: date, from and messageBody. The latter is
739 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
740 -fetchMailForForwarding:sourceMail]): fetch attachments for
743 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
744 -hasMessageAttachment]): initialize hasAttachment with "NO" to
745 avoid false positives.
747 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
748 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
749 set title to an empty string where the event/task summary is null.
751 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
752 -setHeaders:newHeaders]): make sure there is a message id in the
753 headers dictionary, if not, generate one.
754 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
755 message id from the existing draft.
756 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
757 message id in the header map.
759 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
760 -deleteFolderAction]): no longer prefix the target folder with
763 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
764 -listMailboxesAction]): base the folder type on the folder
767 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
768 -lookupName:_keyinContext:acquire:_acquire]): compare the full
769 traversal to the potential looked up folder with the special
770 folder names and return an object with the appropriate
771 SOGoMailFolder subclass.
773 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
774 -traversalFromMailAccount]): don't prepend the whole string with
777 * SoObjects/Mailer/SOGoMailAccount.m
778 ([-lookupSentFolder:_keyinContext:_ctx])
779 ([-lookupDraftsFolder:_keyinContext:_ctx])
780 ([-lookupTrashFolder:_keyinContext:_ctx])
781 ([-lookupFiltersFolder:_key:_ctx]): removed methods.
782 ([SOGoMailAccount -inboxFolderNameInContext:])
783 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
784 ([SOGoMailAccount -sentFolderNameInContext:])
785 ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
786 the resulting name with "prefix" since we might return a nested
788 ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
789 names with "/". Sorts the resulting folder list with
790 localizedCaseInsensitiveCompare: instead of
791 caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
792 that were removed, instead, we choose the appropriate class
793 depending on the folder name. And since we are in SOGoMailAccount,
794 we don't have to compute a traversal path to match the key with
797 -folderWithTraversal:traversalandClassName:className]): new method
798 that returns an instance of the specified SOGoMailFolder subclass,
799 based on the traversal path passed as parameter.
800 ([SOGoMailAccount -inboxFolderInContext:_ctx])
801 ([SOGoMailAccount -draftsFolderInContext:_ctx])
802 ([-sentFolderInContext:_ctx])
803 ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
804 -folderWithTraversal:andClassName: method described above.
806 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
807 -primaryFetchProfile]): make use of -[NSPropertyListSerialization
808 propertyListFromData:mutabilityOption:format:errorDescription:] to
809 deserialize the plist. Removed variant for libFoundation since it
810 should support the above.
811 ([AgenorUserDefaults -generateSQLForInsert])
812 ([AgenorUserDefaults -generateSQLForUpdate]): make use of
813 -[NSPropertyListSerialization
814 dataFromPropertyList:format:errorDescription:] to serialize the
815 plist. Removed variant for libFoundation since it should support
816 the above. Escape the backslashes from the resulting string.
818 2007-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
820 * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
821 SOGoMailFolder: SOGoMailSpecialFolder.
823 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
824 -traversalFromMailAccount]): overridden method that returns the
825 initialized mutable string.
826 ([SOGoMailAccount -allFolderPaths]): take the special folder paths
827 with -traversalFromMailAccount and reposition them at the
828 beginning of the list. By creating the special folders during that
829 request, we also make sure that the folder exists thanks to the
830 new initialisation method of the new "SOGoSpecialMailFolder"
832 ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
834 ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
836 ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
837 longer use lookupImap4Folder.
838 ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
841 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
842 -traversalFromMailAccount]): new method that returns the full
843 IMAP4 path to the object.
845 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
846 "superUsernames" after fetching it from the ud.
848 2007-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
850 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
851 -eventsListAction]): substitude the start and end date with their
852 UTC counterpart, taking into account the offset from UTC related
853 to those dates instead of the current one. This renders
854 -[UIxCalMainView -userUTCOffset] obsolete because the computings
855 that occured in javascript are now done server-side.
857 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
858 removed obsolete method.
860 * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
861 method converting html content to plain text.
863 * SoObjects/Mailer/NSString+Mail.[hm]: new category module
864 enhancing NSString with utility methods pertaining to mail handling.
866 * SoObjects/Mailer/SOGoMailObject.m
867 ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
869 -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
870 modified method to be always recursive and to take an array of the
871 accepted mime-types as parameter. The returned array now contains
872 the mime-type as well as the part keys.
874 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
875 -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
876 ([SOGoMailObject -contentForEditing]): rewrote method to take into
877 account the first text/plain part or the first text/html part
878 converted to text/plain with our new -[NSString htmlToText]
881 * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
882 "replyToAll:" with YES as parameter instead of NO.
884 2007-10-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
886 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
887 -davContentType]): ignore any possible parameter taken from the
888 mime-info of the body part.
890 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
891 -lastFirstMessageNumber]): new accessor that returns the first
892 message number of the last series of messages.
893 ([UIxMailListView -fetchKeys]): request the bodystructure for each
895 ([UIxMailListView -hasMessageAttachment]): extract the attachment
896 information from the message bodystructure.
898 2007-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
900 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
901 -GETAction:]): use the "application/octet-stream" mime type for
902 elements of type "application/x-xpinstall" to avoid confusing
905 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
906 ([UIxPreferences -itemMessageCheckText])
907 ([UIxPreferences -userMessageCheck])
908 ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
909 methods for handling the retrieval of new messages automatically.
911 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
912 that returns the interval of time between automatic message
915 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
916 -defaultAction]): now expunges the last folder marked for expunge.
918 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
919 -trashInContext:_ctx]): now marks the container folder for
922 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
923 -markForExpunge]): new method that marks the folder for the next
924 automatic expunge operation in the user settings.
925 ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
926 takes the last folder marked for expunge, expunges it and removes
927 it from the user settings, if it exists.
929 2007-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
931 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
932 -messageSubjectCellStyleClass]): added support for replied,
933 forwarded, forwarded and replied mails.
935 * SoObjects/Mailer/NSData+Mail.m ([NSData
936 -bodyDataFromEncoding:encoding]): new utility method that decodes
937 the NSData instance properly depending on the encoding string
940 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
941 -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
943 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
944 -stringForData:_datapartInfo:_info]): simplified by invoking
945 -bodyDataFromEncoding: from our new NSData category methods.
947 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
948 -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
949 where only the body part of the first of the keys fetched was
950 returned. Also decodes the body parts properly following their
953 * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
954 extends the NSData class with utility methods useful for handling
957 2007-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
959 * SoObjects/SOGo/NSArray+Utilities.m
960 ([NSArray -stringsWithFormat:format]): replace instances of NSNull
963 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
964 -keysWithFormat:keyFormat]): replace instances of NSNull with
967 * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
968 empty, use "c_cn" instead.
970 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
971 ([SOGoMailAccount -draftsFolderInContext:_ctx])
972 ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
973 of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
974 no always be specified from the root instead of sometimes from the
977 2007-10-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
979 * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
980 ([UIxPageFrame -productLocalizableStrings]): invoke the new
981 +[SOGoUser language] method if the user is nil.
983 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
984 that returns any generically-found language.
985 ([SoUser -language]): modified to call the above.
986 ([SOGoUser -language]): modified to call the above if the user
987 language has a null length.
989 * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
990 -davEntityTag]): modified to return the "hash" of the vCard string.
992 * UI/MailerUI/UIxMailActions.m ([UIxMailActions
993 -removeAllLabelsAction]): new method that removes all label flags
994 from the associated message.
995 ([UIxMailActions -addLabel1Action]
996 [UIxMailActions -addLabel2Action]
997 [UIxMailActions -addLabel3Action
998 [UIxMailActions -addLabel4Action]
999 [UIxMailActions -addLabel5Action]): new methods that adds label
1000 flags to the associated message.
1001 ([UIxMailActions -removeLabel1Action]
1002 [UIxMailActions -removeLabel2Action]
1003 [UIxMailActions -removeLabel3Action
1004 [UIxMailActions -removeLabel4Action]
1005 [UIxMailActions -removeLabel5Action]): new methods that removes
1006 label flags from the associated message.
1008 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
1009 new accessor that returns the labels associated with the message.
1011 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1012 -allFolderPaths]): new method that returns all the paths of all
1013 the subfolders of the folder object.
1014 ([SOGoMailFolder -allFolderURLs]): new method replacing
1017 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1018 -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
1019 role from its parent folder.
1021 2007-10-19 Francis Lachapelle <flachapelle@inverse.ca>
1023 * SoObjects/SOGo/SOGoUser.m
1024 ([SOGoUser -rolesForObject:objectinContext:context]): allow
1025 multiple super usernames to be defined. The user default
1026 SOGoSuperUsername is renamed SOGoSuperUsernames and must be
1029 2007-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1031 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1032 -userInContext:]): override the super method by returning
1033 anonymous if the super returns nil.
1035 * UI/Common/UIxPageFrame.m ([UIxPageFrame
1036 -productLocalizableStrings]): new method that returns the
1037 product-specific translation dictionary as a JSON hash.
1038 ([UIxPageFrame -commonLocalizableStrings]): same as above but for
1039 the "Common" framework.
1040 ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
1041 the requestor components to require additional Javascript files.
1042 This is useful now that all the scripts are loaded at the end of
1044 ([UIxPageFrame -additionalJSFiles]): new getter related to the
1047 2007-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1049 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
1050 implemented new web method.
1052 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1053 -copyToFolderNamed:folderNameinContext:]): new method with the
1054 code cut/pasted from -moveToFolderNamed:inContext:.
1055 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
1056 modified to use the code from -copyToFolderNamed:inContext:, which
1057 is common between the two actions.
1059 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1060 ([SOGoMailAccount -sentFolderNameInContext:])
1061 ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
1062 the user settings into account.
1064 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
1065 ([UIxMailFolderActions -setAsSentFolderAction])
1066 ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
1067 that change the purpose of the active folder to "Sent", "Drafts"
1070 * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
1071 returns the subject as quoted-printable.
1073 * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
1074 SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
1075 the "aclMethod" method for the subsequent language-dependent
1078 * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
1079 returns the subject as quoted-printable.
1081 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1082 -dealloc]): release item, aptStartDate and aptEndDate.
1084 2007-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1086 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1087 -initWithName:newNameinContainer:newContainer]): the owner of a
1088 shared folder is set to "nobody" by default.
1090 * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
1091 that returns whether the object has an owner or not.
1093 2007-10-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1095 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1096 the folder even if the current user is not its owner.
1098 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
1100 * We now send advisory emails when folders
1101 are created / deleted.
1103 * Fixed the sending of advisory emails upon
1104 ACL changes on folders.
1106 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
1108 * UI/Scheduler/UIxComponentEditor.m
1109 Implemented event/task priority support.
1111 * SoObjects/Contacts/SOGoContactGCSFolder.m
1112 Added CardDAV support.
1114 * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
1115 Implemented From: based on LDAP results based on
1116 the MailFieldNames attribute (an array) specified
1117 in every LDAP-based authentication sources.
1119 * UI/MailPartViewers/UIxMailPartTextViewer.m and
1120 UI/WebServerResources/MailerUI.css
1121 We avoid replacing "\r\n" and "\n" with <br /> and
1122 rather use CSS capabilities for proper formatting.
1123 This is _WAY_ faster on very large mails.
1125 2007-10-10 Francis Lachapelle <flachapelle@inverse.ca>
1127 * UI/Scheduler/UIxComponentEditor.m
1128 ([UIxComponentEditor -componentCalendar]): returns the calendar
1129 object of the current event.
1131 2007-10-05 Ludovic Marcotte <ludovic@inverse.ca>
1133 * UI/WebServerResources/MailerUI.js
1134 We check if at least one message is selected
1135 before performing a Reply/Reply All/Forward
1137 * SoObjects/Appointments/SOGoAppointmentFolder.m
1138 and others - implemented support for recurring
1139 events (with some known limitations right now,
1140 all soon to be fixed).
1142 2007-10-04 Francis Lachapelle <flachapelle@inverse.ca>
1144 * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
1145 the constraint that a username can't start with a digit.
1147 2007-10-02 Francis Lachapelle <flachapelle@inverse.ca>
1149 * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
1150 repository to Inverse's branch.
1152 2007-09-28 Francis Lachapelle <flachapelle@inverse.ca>
1154 * SoObjects/Mailer/SOGoDraftObject.m
1155 ([SOGoDraftObject -isValidAttachmentName:_name]): removed
1156 constraint on space in file name.
1157 ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
1158 now removes from file name all characters preceding a backslash.
1159 This happens with IE7 because the complete attachment file path
1162 2007-09-25 Francis Lachapelle <flachapelle@inverse.ca>
1164 * SoObjects/Appointments/SOGoAptMailNotification.m
1165 ([SOGoAptMailNotification -appointmentURL]): set personal as the
1166 default calendar where to add the event.
1168 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1169 activate the SOGoUIxDefaultModule user defaults.
1171 2007-09-21 Francis Lachapelle <flachapelle@inverse.ca>
1173 * UI/SOGoUI/UIxComponent.m
1174 ([UIxComponent -shortUserNameForDisplay]): returns the string
1175 "wrongusernamepassword" when authentication failed.
1177 2007-09-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1179 * UI/MailPartViewers/UIxMailPartICalViewer.m
1180 ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
1181 entry of the Calendars parent folder.
1183 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1184 -messageSubject]): new accessor method to work-around a problem
1185 within SOPE where a subject could be returned as an NSData.
1187 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1188 -appendPersonalSources]): make sure the value of the "c_path4" of
1189 the returned rows are not NSNull, otherwise, discard them.
1191 2007-09-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1193 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1194 -compare:otherFolder]): new overriden method that compares two
1195 contact foldes based on their class and then transfer the control
1196 to the super method in SOGoFolder.
1198 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1199 ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
1200 compare two contact folders based on their class and then their
1203 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
1204 new method for sorting folders. The folders are compared based on
1205 their ownership, whether they are a main folder and finally
1206 depending on their display name.
1208 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1209 -pathArrayToSOGoObject]): do not reorder the paths if the third
1210 element is an instance of NSNull.
1212 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1213 -subFolders]): returns a sorted array using the "compare:"
1216 2007-09-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1218 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1219 -calendars]): also returns the owner of the listed folders.
1221 * SoObjects/Appointments/SOGoAppointmentFolder.m
1222 ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
1224 * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
1225 method into UIxFolderActions.
1227 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1228 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
1229 freebusy info from the "personal" calendar.
1231 * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
1232 -createFolderAction]): new standardized method for requesting
1233 folder creations among gcs-based modules.
1235 * UI/Common/UIxParentFolderActions.[hm]: new action class module.
1237 * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
1238 module, equivalent to the SOGoParentFolder's child
1239 SOGoContactFolders, but for calendars.
1241 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
1242 method that returns translated strings for controller bundles
1243 (same as what UIxComponent does for view bundles).
1244 ([SOGoObject -pathArrayToSOGoObject]): new method that returns
1245 the real path to a subscribed folder (if subscribed).
1246 ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
1247 ([SOGoObject -globallyUniqueObjectId]): new instance method
1248 calling its class equivalent.
1250 2007-09-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1252 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
1253 whether the user is logged in and if so, redirect to his/her
1255 ([SOGoRootPage -appendToResponse:inContext:]): removed useless
1258 2007-09-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1260 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1261 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1263 ([SOGoFolder -displayName]): new method.
1264 ([SOGoFolder -delete]): accept to proceed only if nameInContainer
1267 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1268 ([SOGoContactLDAPFolder
1269 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1270 renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
1272 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1273 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1274 removed method, reimplemented in SOGoFolder.
1275 ([SOGoContactGCSFolder -displayName]): removed method,
1276 reimplemented in SOGoFolder.
1277 ([-delete]): removed method, modified in SOGoFolder.
1279 * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
1280 a subclass of SOGoParentFolder.
1282 * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
1283 from SOGoContactFolders and modified to be more content-independent.
1285 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
1286 ([UIxMailActions -markMessageReadAction]): new methods moved from
1287 UIxMailListView and adapted to invoke the client object directly,
1288 since the previous versions had to to a lookup from the parent
1291 * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
1292 method into UIxMailActions.
1293 ([-markMessageReadAction]): same as above.
1294 ([-viewAction]): removed useless method.
1295 ([-javaScriptOK]): removed useless method.
1296 ([-isJavaScriptRequest]): removed useless method.
1297 ([-lookupActiveMessage]): removed useless method.
1299 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1300 -responseWithStatus:status]): new method that returns a WOResponse
1301 initialized with the specified status code.
1302 ([WODirectAction -responseWith204]): new method that invokes the
1303 above one with "204" as parameter.
1304 ([WODirectAction -redirectToLocation:newLocation]): rewrote method
1305 to make use of -responseWithStatus:.
1307 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
1308 method that returns a WOResponse initialized with the 204 status
1311 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
1312 always use a "not deleted" search qualifier along with the user
1313 qualifier (if present).
1315 2007-09-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1317 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1318 -contactSearchAction]): only return the records which have an
1321 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1322 -trashInContext:_ctx]): no longer expunge the mailbox after
1323 marking a message deleted.
1324 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
1327 * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
1328 ([-trashAction]): moved method into UIxMailActions.
1329 ([-moveAction]): moved method into UIxMailActions.
1331 2007-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1333 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1334 ([_UIxHTMLMailContentHandler
1335 -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
1336 comments from the CSS code, do not add the CSS code to the body
1337 content and remove references of body from the CSS declarations.
1338 ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
1339 ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
1340 common with cssContent in a different method and invoke it only
1343 * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
1344 instead of UIxPageFrame.
1346 2007-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1348 * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
1349 ([-appendToResponse:responseinContext:ctx]): commented out.
1350 ([SOGoRootPage -connectURL]): new accessor that returns the full
1351 url the the "connect" method.
1352 ([-connectAction]): rewrote method to return a properly formatted
1353 auth. cookie based on the username and password passed as
1356 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1357 set the value of the cookie to "discard" and set its expiration
1360 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1361 -preprocessCredentialsInContext:context]): consider the user
1362 anonymous if the cookie value is "discard".
1363 ([SOGoWebAuthenticator
1364 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1365 set the expiration date of the cookie to yesterday.
1367 * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
1368 returns the path to the application if the clientObject is not a
1371 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
1372 moved the requirement of authentication from the SOGo application
1375 * SoObjects/Appointments/SOGoAppointmentObject.m
1376 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
1377 check whether the new appointment object is still relevant before
1378 sending a notification.
1380 2007-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1382 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1383 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1384 render the login page through the SoDefaultRenderer.
1386 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
1387 -isPublicInContext:localContext]): new overriden method that
1390 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1391 -currentCalendarLogin]): replace css-unsafe characters with _.
1393 * UI/SOGoUI/UIxComponent.m ([UIxComponent
1394 -shortUserNameForDisplay]): simplified method.
1395 ([-user]): removed method since [context activeUser] is as useful.
1397 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1399 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1400 set the cookie path to "/".
1402 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
1403 authenticator based on the request handler key. "dav" returns the
1404 SOGoDAVAuthenticator, anything else returns the Web authenticator.
1406 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
1407 "SOGoAuthenticator".
1409 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
1410 implementing a subclass of SoCookieAuthenticator, designed for
1411 web-based cookie authentication of users.m
1413 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1414 new method that resets the authentification cookie.
1416 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1418 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
1419 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
1420 didBind to NO to make sure no false authentication is returned if
1421 the bind operation is not executed.
1423 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1425 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
1426 "In-Reply-To" header field when replying.
1428 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
1429 table field names that are queried.
1431 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1432 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
1433 add the "c_" prefix to the quick table field names that are
1436 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1438 * SoObjects/Appointments/SOGoAppointmentFolder.m
1439 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
1440 "personal" to the ocs path of the appointment folder.
1442 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1443 -flatContentAsString]): use latin1 when the encoding is not
1444 specified, and to reencode data chunk which were not correctly
1445 decoded with the original charset.
1447 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
1448 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
1449 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
1450 ([SOGoAppointmentFolder
1451 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
1452 override those methods to use the "personal" additional directory.
1454 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
1455 append "/personal" to the calendar path to simulate a single
1456 calendar in a choice of many.
1458 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1459 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
1460 methods back here. Moved the folder existence check here, and do
1461 it on self only when the lookup happens for a non-folder object.
1462 This permits to accept entries for folders with parents who
1465 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1467 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1468 -shouldTakeValuesFromRequest:requestinContext:context]): same as
1471 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1472 -shouldTakeValuesFromRequest:requestinContext:context]):
1473 redesigned method since any method called can be received from a
1474 POST or a GET. Instead we check the method call itself and we
1475 accept only if it has the "save" prefix.
1477 * SoObjects/Appointments/SOGoAptMailNotification.m
1478 ([SOGoAptMailNotification -getSubject]): returns the subject an a
1479 quoted-printable encoded string, if needed.
1481 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1482 -asQPSubjectString:encoding]): moved method into
1483 NSString+Utilities.m.
1485 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1487 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1488 -messageForwardingList])
1489 ([UIxPreferences -itemMessageForwardingText])D
1490 ([UIxPreferences -userMessageForwarding])
1491 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
1492 new template methods for manage the user preference regarding
1495 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
1496 algorithm to return, in order, the user's defined language or the
1497 first browser language or, finally, the default language.
1498 ([SOGoUser -messageForwarding]): new method that returns the user
1499 preference for message forwarding: "inline" or "attached",
1500 defaulting to "attached".
1502 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1503 -contentForInlineForward]): new method that returns the content of
1504 the message for inline forwarding based on the SOGoMailForward
1507 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1508 -fetchMailForForwarding:sourceMail]): check the user preference
1509 for message forwarding and compose inline forwarded messages if required.
1511 * SoObjects/Appointments/SOGoCalendarComponent.m
1512 ([SOGoCalendarComponent
1513 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1514 now use a template based on the language returned from the
1517 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
1518 a subclass of SOGoMailForward for English locale.
1520 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
1521 a subclass of SOGoMailForward for French locale.
1523 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
1524 helps build template for inline forwarded messages.
1526 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1528 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
1529 to handle "<var:if-ie>" template tags.
1531 * UI/SOGoElements: new extension bundle containing sogo-specific
1534 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1535 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
1536 selected in the dialog.
1537 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
1538 first category, if ever, of the calendar entity.
1540 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1541 -composeAction]): restored method since it is needed by the
1544 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1545 -composeAction]): the address fields should be arrays and not
1548 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
1549 that returns the build date of SOGo in the template.
1551 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1553 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1554 -_flattenedRecords:records]): when the c_cn field is empty,
1555 returns set a formatted string with the concatenation of
1556 c_givenname and c_sn as the displayName.
1558 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1559 -isValidMailAccountName:_key]): prevent unknown accounts from
1562 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1563 -pathToAttachmentObject]): we no longer need the filename
1564 extension for SoLookup...
1566 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1567 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
1568 filename to have an extension, and thus accept any filename.
1570 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1571 -currentCName]): new method that returns the c_name of the
1572 contact, correctly escaped to be passed by url afterwards.
1574 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1575 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
1576 instance of [self decodedFlatContent] instead of the buggy
1577 NSString from [super flatContentAsString] to the parser.
1579 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1581 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
1582 new category method to reponds to the "delete" web command on
1584 ([UIxMailActions -deleteAttachmentAction]): new category method to
1585 reponds to the "deleteAttachment" web command on drafts, taking
1586 the "filename" url parameter into account.
1588 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1589 -contentForEditing]): new method that retrieve the editable mail
1591 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
1592 returns the body keys for attached files (parts with a "filename"
1595 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1596 -asQPSubjectString:encoding]): do not change the string if the
1597 encoded string has the same length (which means it is already
1599 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
1600 that retrieve a draft along with its attachments for editing.
1601 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
1602 choke if the "to" header field is empty.
1603 ([SOGoDraftObject -delete]): new method to delete the draft folder
1604 whenever operations are done.
1606 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1608 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
1609 useless stub method, of which the intention was implemented in
1611 ([-lookupSentFolderUsingAccount]): removed obsolete method.
1612 ([-selectedMailIdentity]): removed obsolete method.
1613 ([-lookupSentFolderUsingFrom]): removed obsolete method.
1614 ([-storeMailInSentFolder:_path]): removed obsolete method, of
1615 which the mechanism has been put in -[SOGoDraftObject sendMail]
1617 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
1618 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
1619 adapted algorithms to the new SOGoDraftObject methods.
1620 ([-deleteAction]): removed method since local draft objects cannot
1621 be removed by the user.
1623 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1624 -expungeAction]): new method replacing the one previously found in
1626 ([UIxMailFolderActions -createFolderAction])
1627 ([UIxMailFolderActions -renameFolderAction])
1628 ([UIxMailFolderActions -deleteFolderAction])
1629 ([UIxMailFolderActions -emptyTrashAction])
1630 ([UIxMailFolderActions -subscribeAction])
1631 ([UIxMailFolderActions -unsubscribeAction]): error situations
1632 should have http return code 500 instead of 403.
1634 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1635 -composeAction]): new method replacing the one previously in
1638 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1639 -imap4URLString]): removed overriden method (see below).
1641 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
1642 cache the mailbox acl.
1643 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
1644 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
1646 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
1647 the new method of determining the users mail accounts.
1649 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
1650 longer adds a "/" at the end of the string (the default for
1651 folders), therefore this will be overriden in SOGoMailFolder
1652 rather than in SOGoMailObject.
1654 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
1655 method, moved into the new UIxMailActions module class.
1657 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
1658 -newDraft]): new method that returns a new SOGoDraftObject
1659 instance with a unique filename based on the current timestamp and
1660 the "newDraft" prefix.
1662 -lookupName:nameinContext:localContextacquire:acquire]): overriden
1663 method by detecting local drafts with their "newDraft" prefix.
1664 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
1666 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
1667 from scratch by making it a subclass of SOGoMailFolder.
1669 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
1672 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
1675 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
1678 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
1679 new method, initializing the new ivars: IMAP4ID, headers, text,
1680 sourceURL and sourceFlag.
1681 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
1682 ([-_ensureUserSpoolFolderPath])
1683 ([-saveMimeMessageToTemporaryFileWithHeaders:])
1684 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
1685 ([-deleteTemporaryMessageFile:], [-delete], [-content])
1686 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
1687 ([-uid], [-flags], [-size], [-envelope]): removed methods.
1688 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
1690 ([SOGoDraftObject -setSourceURL:newSourceURL])
1691 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
1692 methods to store the url of the original message between accesses
1693 so that, depending on the action taken (forward or reply), the
1694 correct flag can be given.
1695 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
1696 the imap4 id that is returned for the message whenever it is saved
1697 into the drafts folder.
1698 ([SOGoDraftObject -save]): new method that takes in charge the
1699 saving of the message in the IMAP drafts folder.
1700 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
1701 new method that fills the original data of the new message with
1702 the reply content of the original message.
1703 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
1704 above for message forwarding.
1705 ([-spoolFileManager]): removed useless method (only returned the
1706 default filemanager...)
1707 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
1708 the resulting message as an NSData chunk.
1710 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
1711 containing a rewrite of the mail action methods found in
1712 UI/Mailer/, that needed to be put in the SOGoMailObject class.
1713 ([SOGoMailObject -subjectForReply]): new method that returns a
1714 subject suitable for replies.
1715 ([SOGoMailObject -contentForReply]): new method that returns the
1716 textual content of an email, quoted for replying.
1717 ([SOGoMailObject -filenameForForward]): new method that returns
1718 the name of the filename that should contain the forwarded
1719 message, based on its subject.
1720 ([SOGoMailObject -subjectForForward]): explicit.
1722 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1724 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1725 -mailAccounts]): rewrote method to return the name of the mail
1726 accounts now available with the -[SOGoUser mailAccounts] method.
1727 ([UIxMailMainFrame -showLinkBanner]): removed method.
1728 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
1729 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
1730 ([UIxMailMainFrame -rootURL]): removed method.
1731 ([UIxMailMainFrame -userRootURL]): removed method.
1732 ([UIxMailMainFrame -calendarRootURL]): removed method.
1733 ([UIxMailMainFrame -contactsRootURL]): removed method.
1734 ([UIxMailMainFrame -hasErrorText])
1735 ([UIxMailMainFrame -errorText])
1736 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
1737 ([-composeAction]): removed method. Now provided by
1738 UIxMailAccountActions.
1739 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
1740 ([UIxMailMainFrame -hideFolderTree]): removed method.
1741 ([UIxMailMainFrame -treeRootClassName]): removed method.
1742 ([UIxMailMainFrame +initialize]): removed method.
1743 SOGoMailTreeRootClass userdefaults will no longer have any effect.
1745 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1746 -redirectToLocation:newLocation]): new method that implements the
1747 same functionality as WOComponent.
1749 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
1751 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
1752 method that returns whether the current mail is store in the
1753 drafts folder hierarchy.
1755 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
1756 ([-primaryEmail]): removed method.
1757 ([SOGoUser -primaryIMAP4AccountString]): removed method.
1758 ([SOGoUser -mailAccounts]): new method that returns an array
1759 containing description dictionaries for all the user mail
1760 accounts. Each account also contain the user's identities for that
1762 ([SOGoUser -allIdentities]): new utility method that returns all
1763 the user identities on all accounts.
1764 ([SOGoUser -primaryIdentity]): new method return the first
1765 identity of the first account.
1767 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
1769 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1770 -isInDraftsFolder]): returns NO.
1771 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
1773 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
1775 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1776 -isInDraftsFolder]): new method that detects if self is contained
1777 by the drafts folder by calling itself on the container object.
1779 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
1781 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
1782 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
1783 return the name of the mail accounts now available with the
1784 -[SOGoUser mailAccounts] method.
1786 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
1789 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
1792 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1793 -keysWithFormat:format]): method that forward the method of the
1794 same name to each member of the array, considering they all are
1795 instances of NSDictionary.
1796 ([NSArray -objectsForKey:key]): same principle as above.
1797 ([NSArray -flattenedArray]): new method that transforms an array
1798 of arrays into a single array containing all the elements of the
1801 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1802 -keysWithFormat:keyFormat]): new method inspired by the python
1803 string formatting system and which replaces occurences of "%{key}"
1804 by the corresponding keys.
1806 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1808 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
1809 sql script before the generic one when initializing mandatory
1812 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1814 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1815 -pureEMailAddress]): new utility method inspired by the
1816 "_rawSender" private method in SOGoDraftObject, which it now
1819 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
1820 provides a common API for sending emails, no matter what the
1823 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1825 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1826 -quotasAction]): invoke "relativeImap4Name" instead of
1827 "nameInContainer" since the latter also returns the "folder"
1830 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1831 -listMailboxesAction]): declare the output as text/plain in UTF-8.
1833 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1834 -deleteFolderAction]): fixed the url of the destination folder.
1836 * Main/SOGo.m ([SOGo +initialize]): show the build date and
1837 hostname at startup.
1839 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1841 * SoObjects/Appointments/SOGoCalendarComponent.m
1842 ([SOGoCalendarComponent
1843 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1844 set the mail date to the current date string returned by our
1845 rfc822DateString extension method.
1847 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1848 -_gcsFoldersFromFolder:): ignore the personal folders who are
1849 returned but don't really exist.
1851 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
1853 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
1854 has to return only one element.
1856 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1858 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1859 -content]): new method returning the decoded content of the
1860 corresponding attachment as an NSData instance.
1861 ([UIxMailPartViewer -filename]): if the "filename" parameter of
1862 the metadata parameterList is empty, try to find out the filename
1863 from the "disposition" metadata returned with the BODYSTRUCTURE
1866 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1867 -composeAction]): prefix the INBOX folder with "folder".
1869 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
1870 -relativeImap4Name]): return nameInContainer stripped from its
1871 first 6 characters since all folder names are prefixed with
1874 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1875 -imap4URLString]): invoke -relativeImap4Name instead of
1876 "nameInContainer" since the former will return the fixed IMAP4
1877 foldername and the latter the SoObject name.
1879 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1880 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
1882 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
1883 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1884 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
1885 ([SOGoMailAccount -sentFolderNameInContext:])
1886 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
1887 names with "folder".
1888 ([SOGoMailAccount -inboxFolderInContext:_ctx])
1889 ([SOGoMailAccount -sentFolderInContext:_ctx])
1890 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
1891 the folder names with "folder" since they are prefixed earlier.
1893 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1895 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1896 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
1897 all starts with "folder".
1899 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
1900 longer declare security info from here.
1902 * SoObjects/Mailer/SOGoMailFolder.m
1903 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
1904 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
1905 folder names now always start with "folder".
1907 * SoObjects/Mailer/SOGoMailAccount.m
1908 ([-lookupName:inContext:acquire:]): folder names now always start
1911 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1913 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
1914 -forwardAction]): adapted to the new saveAttachment:withMetadata:
1917 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
1918 code to save the attached filenames with the filename returned by
1919 the web server as well as their mime types.
1921 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
1922 ([UIxMailPartMessageViewer -toAddresses])
1923 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
1924 the corresponding fields separated with a ", " (if needed).
1926 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1927 -saveAttachment:_attachwithMetadata:metadata]): new method
1928 replacing -saveAttachment:withName: and which takes a dictionary
1929 as parameter with the filename and the mime type of the
1931 The mimetype is then saved in a hidden text file.
1932 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
1933 take the mime type from the hidden text file related to the
1936 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
1937 ([SOGoContactGCSFolder
1938 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1939 return records if the db records are > 0 and not just > 1...
1941 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1943 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
1945 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
1947 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1948 ([SOGoContactLDAPFolder
1949 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1950 translate the returned records to a normalized form.
1952 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1953 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1954 translate the returned records to a normalized form.
1956 * UI/Scheduler/UIxCalListingActions.m,
1957 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
1958 SoObjects/SOGo/AgenorUserDefaults.m,
1959 SoObjects/Contacts/SOGoContactGCSFolder.m,
1960 SoObjects/Appointments/SOGoAppointmentFolder.m,
1961 OGoContentStore/OCSiCalFieldExtractor.m,
1962 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
1963 table fields with "c_".
1965 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1967 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
1968 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
1969 the application settings. If set, both limit will influence the
1970 maximum size of the resultsets and the time taken to solve them.
1971 ([LDAPSource -_initLDAPConnection]): initialize the limits.
1973 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1975 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
1976 method that declares the DAV namespace related to CardDAV.
1977 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
1978 method that declares the "access-control" and "addressbook-access"
1979 classes to the list.
1981 * SoObjects/Appointments/SOGoAppointmentFolder.m
1982 ([-lookupActionForCalDAVMethod:]): removed method.
1983 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
1984 method that declares the DAV namespace related to CalDAV.
1986 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
1987 optional method for subclasses which handle specific extensions to
1988 the DAV protocol: CardDAV or CalDAV.
1990 -lookupName:lookupNameinContext:localContextacquire:acquire]):
1991 new overriden method that handles dav invocations for extensions
1992 to DAV by returning an appropriate SoSelectorInvocation.
1994 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1995 -asDavInvocation]): new method returning a dictionary with a "ns"
1996 key representing the dav namespace and a "method" key representing
1997 the dav method name of the request.
1999 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
2000 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
2002 ([UIxPreferences -shouldDisplayPasswordChange]): new template
2003 method that returns the value of SOGoUIxUserCanChangePassword.
2005 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
2006 scan the value of SOGoUIxDefaultModule. If not set, the default
2007 module defaults to "Calendar".
2008 ([SOGoUserHomePage -defaultAction]): redirect the user to the
2009 value of "SOGoUIxDefaultModule".
2011 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2013 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2014 -contactInfos]): cache the results to avoid multiple invocations.
2016 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2017 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
2018 really should return something or if we fake to return nil...
2020 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2022 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
2023 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
2024 default is set to "bypass".
2026 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2027 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
2028 when authMethod is set to "bypass" from now on. This would avoid a
2029 security concern with a default installation of SOGo.
2030 AuthentificationMethod is now prefixed with "SOGo" for better
2033 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2035 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2036 -quotasAction]): new method that returns a json representation of
2039 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2041 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2042 -imap4URL]): rewrote method to support accented mailbox names.
2043 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
2044 SOGoAuthenticator's passwordInContext:.
2046 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2047 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
2048 start and due dates to nil if hasStartDate and hasDueDate are
2051 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2052 -passwordInContext:context]): made method public.
2054 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2055 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
2056 to false to avoid a null violation.
2058 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2060 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2061 -contentAsString]): returns the message encoded in ISO Latin 1
2064 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
2065 SOGoSuperUsername user defaults.
2066 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
2068 ([SOGoUser -rolesForObject:objectinContext:context]): if the
2069 current user is the superuser, grant him/her the "owner" role.
2071 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
2072 the folder only if the current user is the owner of the future
2075 * SoObjects/Appointments/SOGoCalendarComponent.m
2076 ([SOGoCalendarComponent -contentAsString]): we return the content
2077 based on the permissions returned by the security manager instead
2078 of by looking at the user roles.
2080 * SoObjects/Appointments/SOGoAppointmentFolder.m
2081 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
2082 folders of the user to whom this folder belongs instead of the
2083 active user. This way, a delegate user will be able to have the
2084 same view that the original user has if he connects from his user
2087 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
2088 user exists before creating the SOGoUserFolder instance. If not,
2091 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
2092 return the message source code in plain text.
2094 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2095 -contentAsString]): returns the message encoded in UTF8.
2097 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2099 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
2100 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
2101 leading tagname into account when serializing the element values.
2103 * Main/SOGoProductLoader.m: only load bundle directories ending
2104 with the "SOGo" extension.
2106 * Main/SOGo.m ([SOGo
2107 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
2108 result set if the query has caused no exception. Otherwise we get
2109 an "evaluation is in progress exception".
2111 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2113 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2114 -generateSQLForInsert]): initialize error to nil before the
2115 serialization. Otherwise the method can get confused if it ever is
2116 initialized to something else.
2118 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
2119 -folderIsMandatory]): returns NO unconditionnally.
2121 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2122 -appendPersonalSources]): add the "personal" folder to the list of
2123 user folders even if it doesn't exist, so that it is created when
2124 the user accesses it.
2126 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2127 -folderIsMandatory]): returns YES if nameInContainer is set to
2128 "personal", which is the default address book.
2130 * SoObjects/Appointments/SOGoAppointmentFolder.m
2131 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
2132 users must have one Calendar folder (one and only one).
2133 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
2134 escaping '\' so make the carriage return a real one. This way,
2135 PgSQL 8 won't complain about escaping the string.
2137 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
2138 method that create the folder if considered mandatory.
2139 ([SOGoFolder -folderIsMandatory]): new method that determines
2140 whether the folder should be created automatically or not. To be
2141 overriden by subclasses.
2143 * Main/SOGo.m ([SOGo -run]): override method and create the
2144 missing system tables if needed.
2146 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2148 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
2149 -mailDateFormatter]): returns the user's date formatter.
2151 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
2152 applies the user timezone to the date object before returning it.
2154 * UI/Common/UIxSortButton.m: removed useless class module.
2156 * UI/Common/UIxSortableTableHeader.m: removed useless class
2159 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2160 -contactInfos]): use the "asc" url parameter instead of "desc" to
2161 determine the ordering.
2162 ([-sortOrdering]): removed method.
2163 ([UIxContactsListView -init]): removed the "searchText" ivar.
2164 (general): the template no longer use the UIxSortableTableHeader
2167 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
2168 -defaultSortKey]): default sort following the messages arrival
2169 instead of their date.
2170 ([-isSortedDescending]): removed method.
2171 ([-imap4SortOrdering]): use the "asc" url parameter instead of
2172 "desc" to determine the ordering.
2173 (general): the template no longer use the UIxSortableTableHeader
2176 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2178 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
2180 ([-setQualifier:_msg], [-qualifier]): removed methods.
2181 ([UIxMailListView -defaultAction]): added code to handle the
2182 search criteria and value passed as url parameters. Also, we now
2183 handle the same search criterias as Thunderbird/Icedove.
2185 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2187 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
2188 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
2189 the string instead of the string itself.
2190 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
2192 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
2193 bool var "acceptAnyUser" that is set when the AuthenticationMethod
2194 user default is nil.
2195 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
2196 unconditionnally returns an instance whenever acceptAnyUser is set.
2198 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2200 * Main/sogod.m (main): prevent SOGo from running as root.
2202 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2204 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2205 -setCurrentPassword:newPassword]): new stub method.
2206 ([SOGoUser -dateFormatterInContext:context]): new method that
2207 returns an instance of SOGoDateFormatter configured based on the
2210 * UI/Common/UIxPageFrame.m ([UIxPageFrame
2211 -relativePreferencesPath]): new method.
2213 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
2214 removed useless method.
2216 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
2217 different configurable formats (long and short date + time).
2219 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
2221 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2222 -isInternetRequest]): removed method.
2224 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2225 -jsonRepresentation]): new method with an explicit name.
2227 * UI/PreferencesUI/product.plist: new bundle that provides a web
2228 ui for handling user defaults.
2230 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
2232 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
2234 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
2236 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2238 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
2240 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2242 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
2243 -compareEventsAscending:otherEvent]): no longer use compare: on
2244 the time objects since one of them could be an NSNull, which
2245 crashes when comparing with anything.
2247 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2248 -eventsListAction]): sort events from here.
2249 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
2251 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
2252 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
2254 * SoObjects/Appointments/SOGoAppointmentFolder.m
2255 ([SOGoAppointmentFolder
2256 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
2257 no longer sort elements from here.
2259 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2261 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2262 -aclsForUser:uid]): implemented method by forwarding the request
2263 to the container. This fixes a bug where users could no longer
2264 read emails from shared folders.
2266 * SoObjects/Appointments/SOGoCalendarComponent.m
2267 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
2268 here, but rather in its parent class.
2270 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
2271 -stringForSecondsSinceThe70s:seconds]): new utility method.
2273 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2274 -eventsListAction]): no longer reduce the end day of one day for
2275 all day events since everything has been fixed in
2276 OCSiCalFieldExtractor.
2278 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2279 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
2280 the end date of all day events of 1 so that they stay on their
2283 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2285 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
2287 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
2289 ([-fetchCoreTasksInfos]): removed method.
2291 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2292 -init]): initialize an instance of SOGoDateFormatter.
2293 ([UIxCalListingActions -eventsListAction]): the display start and
2294 end dates are added to the listing for each event.
2296 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
2298 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2299 -isAllDay]): returns YES if the "hm" url parameter is set to
2301 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
2302 is displayed one day earlier.
2304 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2306 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2307 -_setupContext]): take the range of dates specified by the popup
2310 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
2311 WODirectAction that returns WOResponse objects with the events or
2312 todos satisfying the parameters passed in the url.
2314 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2315 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
2316 "isAllDay" into account and compute the amount of days to pass to
2319 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
2321 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
2322 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
2323 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
2324 new method that returns a json-formatted array of the visible tasks
2325 for the current user.
2327 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2329 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
2330 object must be present in the list of UIDs we delete the object
2331 from. Otherwise Calendar objects having no organizer and no
2332 attendees will remain in their owner's Calendar.
2334 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2335 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
2336 first 3 elements of the path array if the url returned by
2337 baseURLInContext: returns a hostname.
2339 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2340 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
2341 nil, in which case a crash happens when calling hasPrefix:.
2342 ([SOGoMailFolder -_sharesACLs]): same as above.
2343 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
2344 otherUsersFolderName is nil, we return nil.
2345 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
2346 nil from [self otherUsersPathToFolder], we return nil too.
2348 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2350 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2351 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
2352 the result of [self baseURLInContext:] to avoid a double escaping
2353 in the resulting string.
2355 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
2356 the user has the "ObjectReader" role on the parent container, then
2357 he is granted the "ObjectViewer" role on this object. Same for
2358 "ObjectEraser", although this might change later.
2360 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2361 -toolbar]): determine the toolbar filename based on the
2362 permissions declared by the securitymanager. The role mechanism
2363 has been adjusted on a lowerlevel so we can simplify the code.
2365 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2366 -initWithName:newNameinContainer:newContainer]): read the content
2367 directly from here. That way we can determine whether the object
2369 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
2370 the ObjectCreator role is enabled, we also grant the ObjectEditor
2371 role to the current user.
2373 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
2374 changed the method paradigm to only return HTTP code 204. Not test
2375 is done whatsoever since the security manager does it for us.
2377 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
2378 removed method because the same exists in UIxFolderActions.m
2380 * UI/Contacts/UIxContactsUserRightsEditor.m
2381 ([UIxContactsUserRightsEditor
2382 -setUserCanReadObjects:userCanReadObjects]): new method.
2384 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
2385 "FolderEraser" and special permission "Access Object". Removed
2386 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
2387 can be used instead. Removed "FolderReader" since it is useless.
2389 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2390 -vCard]): directly use the "content" ivar since it is initialized
2391 during object creation.
2393 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2394 ([SOGoContactLDAPFolder -init]): no longer handle the
2395 nameInContainer no the container ivars. They were removed because
2396 this class is a descendant of SOGoObject which already has them.
2397 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
2398 returning "displayName".
2399 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
2402 * SoObjects/Appointments/SOGoCalendarComponent.m
2403 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
2404 ([SOGoCalendarComponent -findParticipant:user]): new name for
2405 method "participant:".
2406 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
2407 findparticipant but taking a uid string as parameter.
2408 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
2409 iCalendar automatically. Instead, this is done only when the user
2410 is a "date and time viewer".
2411 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
2412 (modifier and responder) into account by compiling them with the
2415 * SoObjects/Contacts/SOGoContactFolder.h: removed
2416 "nameInContainer" from the list of required methods.
2418 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
2419 -davContentType]): returns "text/calendar".
2421 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2422 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
2423 groupdav resource-type.
2425 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2426 -davContentType]): same as below.
2428 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2429 -initWithName:newNameinContainer:newContainer]): new overriden
2430 method setting the custom owner directly.
2432 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2433 -davContentType]): same as below.
2435 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2436 -davContentType]): same as below.
2438 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
2439 declare "httpd/unix-directory".
2441 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
2442 "UTC" as fallback timezone instead of "Canada/Eastern".
2443 ([-hasEmail:email]): make use of the new NSArray's
2444 containsCaseInsensitiveString: method.
2446 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2447 -davContentType]): declare "message/rfc822" as content type.
2449 * SoObjects/Appointments/SOGoAppointmentFolder.m
2450 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
2452 ([SOGoAppointmentFolder
2453 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
2454 ([-fetchContentObjectNames]): commented out method since it was
2455 usefull only for testing Funambol.
2457 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
2458 -containsCaseInsensitiveString:match]): an enhanced version of
2461 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
2463 ([-showMarkDeletedButton]): removed useless method.
2464 ([-showTrashButton]): removed useless method.
2466 * SoObjects/Appointments/iCalEntityObject+SOGo.m
2467 ([iCalEntityObject -userIsParticipant:user]): new proxy method
2468 that invoked isParticipant on self for each possible email
2469 addresses of the user passed as parameter.
2470 ([iCalEntityObject -userIsOrganizer:user]): same as above.
2472 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
2475 * SoObjects/Appointments/SOGoAppointmentObject.m
2476 ([SOGoAppointmentObject
2477 -saveContentString:contentStringbaseVersion:baseVersion]): remove
2478 method since an event may not have an organizer.
2480 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2481 -GETAction:localContext]): clarified method. Added support for
2482 content-type (thanks to Helge Hess).
2483 ([SOGoObject -initWithName:_nameinContainer:_container]):
2484 initialize and retain the owner.
2485 ([SOGoObject -davContentType]): returns "text/plain".
2487 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2489 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2490 -addUserInAclsAction]): send an acl addition mail.
2491 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
2494 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2495 -_realActionWithFolderName:folderDict]): handle the possible
2496 presence of the "mail-invitation" url parameter. If present, the
2497 user will be redirected to the relevant folder.
2499 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
2500 ([SOGoUser -language]): new method that returns the user's
2501 preferred language, or the system's if none has been set yet.
2503 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
2504 that returns the full dav url to self.
2505 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
2506 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
2507 returns the full so url to the base of the SOGo module to which
2508 self belongs, and for the specified user.
2509 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
2510 but for the current user.
2511 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
2512 required by the acl advisory templates and which returns a link
2513 the target user can click to activate its new subscription.
2514 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
2515 but for inclusion of the application/x-sogo-notification part,
2516 which will be handled by the Lightning enhancer plugin.
2518 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
2519 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
2520 do nothing yet since imap folder subscription is not handled yet.
2522 * SoObjects/SOGo/SOGoContentObject.m
2523 ([-hasSupportForDefaultRoles]): removed method.
2525 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2526 -getFullEmailForUID:uid]): new method that returns the username +
2529 * SoObjects/Appointments/SOGoCalendarComponent.m
2530 ([SOGoCalendarComponent +initialize]): the default language for
2531 mail templates is now set to English.
2533 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
2534 SOGoACLAdvisory implementing the french template for user removal
2537 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
2538 SOGoACLAdvisory implementing the french template for user
2541 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
2542 SOGoACLAdvisory implementing the english template for user removal
2545 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
2546 SOGoACLAdvisory implementing the english template for user
2549 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
2550 supercall of all the acl advistory templates. The model is based
2551 on SOGoAptMailNotification except that the template encapsulates
2552 the message to be sent. Later, we might create a superclass common
2553 to all template-based emails.
2555 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2556 -addRange:newRange]): new method that store a string
2557 representation of the NSRange passed as parameter.
2558 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
2559 any range contained in self intersect with the one passed as parameter.
2561 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
2562 store ranges in an array to prevent them from intersecting with
2563 each other during the passes.
2565 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2567 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2568 -primaryFetchMailboxInfo]): useless method. Removed.
2570 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2572 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2573 -toManyRelationshipKeys]): invoke [self subfolders].
2574 ([SOGoMailFolder -subfolders]): new method containing what used to
2575 be in toManyRelationshipKeys.
2576 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
2579 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2580 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
2581 named and at the beginning of which we put the predefined folders.
2583 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2584 -emptyTrashAction]): new method inspired by a similar one from
2585 UIxMailListView, to which we added the ability to remove
2588 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
2589 method. Replaced with a similar one in UIxMailFolderActions.
2591 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2592 -renameFolderAction]): implemented method.
2593 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
2594 specified folder. Instead, we put it in the trash folder.
2596 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
2597 method, replaced with a similar method in the new
2598 UIxMailFolderAction class module.
2599 ([-deleteFolderAction]): idem.
2601 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2602 -createFolderAction]): new method implementing subfolder creation.
2603 ([UIxMailFolderActions -renameFolderAction]): new method
2604 implementing subfolder renaming (basic implementation to be
2606 ([UIxMailFolderActions -deleteFolderAction]): new method
2607 implementing folder deletion.
2609 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
2610 web actions related to the handling of imap folder.
2612 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2614 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2615 -ownerInContext:localContext]): overriden method because we are an
2616 IMAP4 client and we need a bit more intelligence to deduce the
2617 owner of the current folder.
2618 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
2619 return an NSException so we need to be careful here to avoid a
2621 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
2622 NSException so we need to be careful here to avoid a crash.
2624 * SoObjects/Mailer/SOGoMailAccounts.m
2625 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
2626 there is no longer any concept of Intranet or Internet connection
2629 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2630 -sharedFolderName]): new method.
2631 ([SOGoMailAccount -otherUsersFolderName]): new method.
2633 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
2634 new javascript code and the new UIxMailAccountActions class.
2636 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
2637 javascript code and the new UIxMailAccountActions class.
2639 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
2640 new javascript code and the new UIxMailAccountActions class.
2642 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2643 -listMailboxesAction]): new method that returns a json-formatted
2644 tree of all the mailboxes available to the current user.
2646 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
2647 web actions related to the handling of mail accounts.
2649 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
2652 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
2653 -jsonRepresentation]): new interface method meant to be overriden
2654 by the primitive classes.
2656 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2658 * UI/MailerUI/UIxMailSplashView.m: removed.
2660 * SoObjects/Appointments/SOGoCalendarComponent.m
2661 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
2662 the uid to the list only when the user email is recognized by the
2665 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2667 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2668 -isDeletionAllowed]): completed method with the new imap acl api.
2670 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
2673 * SoObjects/SOGo/SOGoPermissions.m: added the new role
2674 "SOGoMailRole_MessageEraser".
2676 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
2677 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
2678 "defaultUserID" method into account.
2680 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
2681 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
2682 "defaultUserID" method into account.
2684 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
2685 methods to support the IMAP acls mentionned in the RFC 4314,
2686 removed the ones specific to Cyrus.
2688 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
2689 mandatory method for subclasses. Removed the SOGoDefaultUserID
2692 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
2693 overriden method to return @"<default>".
2695 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2696 -defaultUserID]): overriden method to return @"<default>".
2698 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2699 -aclsForUser:uid]): overriden method.
2700 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
2701 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
2702 ([SOGoMailFolder -defaultUserID]): overriden method.
2703 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
2705 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2707 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2708 -aclUsersForObjectAtPath:objectPathArray]): new method that being
2709 forwarded the calles to aclUsers for the GCS-based subclasses of
2712 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
2713 methods that would have been used to support IMAP acls. Replaced
2714 them with the new protocol for them that has been implemented in
2715 SOGo during the last few weeks.
2717 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2718 -hasSupportForDefaultRoles]): override method by returning "YES".
2720 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2721 -addObjectUniquely:object]): new method with an explicit name.
2723 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
2724 "acl" to "aclUsers". Now designed to return only the uid of the
2725 users involved in an ACL.
2726 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
2727 "NO" by default. To indicate to the acl editor that we don't want
2728 to handle a default user.
2730 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
2731 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
2734 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
2735 provides a view to the IMAP acls.
2737 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
2739 * UI/WebServerResources/MailerUI.js: replaced all invocations of
2740 addEventListener to the use of prototype's Event object. Also,
2741 configured all menus programmatically following descriptions lists
2742 containing their callbacks, or nulls, submenus id or separators.
2744 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2746 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2747 -addUserInAclsAction]): save the previous roles of the user
2748 (unlikely) or the default roles, or None instead of saving the
2749 roles that should appear the first time in the role editor when no
2750 default has been set...
2752 * SoObjects/SOGo/SOGoObject.m: defined a new constant
2753 "SOGoDefaultUserID".
2755 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2756 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
2757 ignore the "AuthorizedSubscriber" role and add the "None" role
2758 when no other role is found.
2760 * UI/Common/UIxAclEditor.m: added a button for the new default
2763 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2764 -_initRights]): don't take the "None" role into account when
2765 initializing the list of current roles.
2767 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
2770 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2772 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2773 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
2774 There is no need to subscract the start from the length if a space
2775 is not found since the range has not changed either. Finally, the
2776 first character before the url might also be a tab or a cr, so we
2777 match it against the "urlAfterEndingChars" custom NSCharacterSet.
2778 ([NSString -stringByDetectingURLs]): modified to handle email
2779 addresses and add a correct "mailto:" link.
2781 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2783 * SoObjects/Appointments/SOGoAppointmentFolder.m
2784 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
2785 method to return the events in the range of 2 weeks ago up to 4
2788 * UI/MailPartViewers/UIxMailPartTextViewer.m
2789 ([UIxMailPartTextViewer -flatContentAsString]): use the new
2790 "stringByDetectingURLs" method to offer clickable urls.
2792 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2793 -stringByDetectingURLs]): this new method replaces passive URLS
2794 with active ones for HTML resolution of the text.
2796 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2798 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2799 -asQPSubjectString:encoding]): simplified method.
2800 The headers indicates "utf-8" again thank to our fix in
2803 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
2806 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2808 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2809 -removeUserFromAclsAction]): implemented this method which was
2810 missing and is required to remove users from ACLs.
2812 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2813 -subscribeAction]): folderDict was not autoreleased, resulting in
2816 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2817 -primaryFetchProfile]): when building with libFoundation, don't
2818 use the "propertyList" method from NSString. Rather, we convert
2819 the string to an NSData instance and passit as parameter to
2820 NSDeserializer. This way, we obtain a mutable dictionary rather
2821 than an immutable one.
2823 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
2824 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
2825 constant string "contentTypeValue".
2826 contentTypeValue is now set back to iso-8859-1 since NGMime
2827 converts extracts the data in that encoding.
2829 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2831 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2832 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
2833 "bindFields" value is present in the user defaults, use the
2834 specified fields to find the dn of the user to bind.
2835 ([LDAPSource -allEntryIDs])
2836 ([LDAPSource -fetchContactsMatching:match])
2837 ([LDAPSource -lookupContactEntry:entryID])
2838 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
2839 bind and unbind the connection on each request.
2841 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
2843 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2844 -contactSearchAction]): simplified method to use the facilities
2845 provided by the LDAPUserManager. No longer takes care of the
2846 "ldap-only" url parameter since all requests are handled by the
2849 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2850 -primaryFetchProfile]): check that the value returned is not null
2851 before interpreting it.
2853 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2854 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
2855 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
2856 system email is already present, remove it before adding it.
2858 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2859 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
2860 loginToCheck is not empty.
2861 ([LDAPSource -fetchContactsMatching:match]): check that match is
2863 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
2865 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
2868 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2870 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
2872 ([SOGoUser -systemEmail]): returns the email formed from the
2873 username and the default mail domain.
2874 ([SOGoUser -hasEmail:email]): test whether the user has the
2875 specified email, in a case-insensitive way.
2877 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2878 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
2879 check login information.
2881 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2882 ([SOGoContactLDAPFolder
2883 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
2884 no longer manage LDAP connections. The requests are forwarded to
2885 the relevant LDAPSource instead.
2887 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2888 -appendSystemSources]): pass LDAPSource objects to
2889 SOGoContactLDAPFolder instances.
2891 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
2892 address of the "from" field before sending the message. Otherwise,
2893 sending the mail won't work.
2895 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
2896 rewrote this method to request all the available email identities
2897 for the current user. Also, the from field also contains the full
2898 name of the user, not just his/her email address.
2900 * SoObjects/Appointments/SOGoCalendarComponent.m
2901 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
2902 from the previous module iCalEntityObject+Agenor.
2903 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
2904 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
2907 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
2908 replacing the SOGoContactLDAPEntry module. It was renamed as such
2909 because it now receives a dictionary instead of an NGLdapEntry.
2910 It thus can now handle data from any source of LDIF data, not
2911 only coming from LDAP.
2913 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
2914 implementing most of what used to be the AgenorUserManager class.
2915 The difference is that users are cached in the forme of
2916 dictionaries and many sources are used. Also, it can be used to
2917 search LDAP contacts.
2919 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
2920 the concept of "ldap source", to be used by all the classes
2921 needing access to LDAP-provided information: addressbooks and the
2922 user manager. Most the method thereing are transcriptions of
2923 methods previously found in SOGoContactLDAPFolder. It also contain
2924 utility methods for user matching and authentification.
2926 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
2927 module, rendered useless by code refactoring.
2929 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
2930 with the freshly written "LDAPUserManager".
2932 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2934 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
2935 SOGOContactLDIFEntry.
2937 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
2938 module, obsoleted by code in SOGo/LDAPSource.[hm].
2940 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2942 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
2943 new method with an explicit name.
2945 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2947 * SoObjects/Appointments/SOGoCalendarComponent.m
2948 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
2949 replacing "isOrganizer:orOwner:" by taking only one instance of
2950 SOGoUser as parameter.
2951 ([SOGoCalendarComponent -participant:user]): new method replacing
2952 the previous "isParticipant" boolean method by returning the first
2953 participant matching the user passed as parameter. This method is
2954 used so that both the regular email address and the "system email
2955 address" of the user are matched against the participants emails.
2957 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2958 -getSystemEMailForUID:uid]): new method that returns the email
2959 formed with the user's uid and the default mail domain.
2961 * SoObjects/Appointments/SOGoCalendarComponent.m
2962 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
2963 was previously commented out.
2965 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
2966 forwared to [AgenorUserManager getSystemEmailForUID:].
2968 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2969 -toolbar]): method replacing the one with the same name in the
2970 task and appointment editor classes. This method makes also use of
2971 the new method "isOrganizerOrOwner:" and "participant:" in
2972 SOGoCalendarComponent.
2974 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2975 -toolbar]): removed method, replaced with a method with the same
2976 name in UIxComponentEditor.
2978 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
2979 method, replaced with a method with the same name in
2982 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2983 -primaryFetchProfile]): the values returned from the database are
2984 converted to a put dictionary first, since the dictionary returned
2985 is actually an immutable one, which can cause a crash afterwards.
2987 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2989 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
2990 and "SOGoRole_ObjectEditor".
2992 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2993 -prepareRightsForm]): this method is no longer mandatory.
2995 * UI/Contacts/UIxContactsUserRightsEditor.m
2996 ([UIxContactsUserRightsEditor
2997 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
2998 module to handle acls related to the address books. Partial
3001 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3002 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
3005 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
3006 specified roles from cache.
3007 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
3008 put resulting roles in cache.
3010 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
3011 initWithName:inContainer:. Instead, directly initialize the ivars
3012 as it is supposed to be to avoid an infinite loop whenever one of
3013 those two methods are overriden.
3015 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
3018 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3019 -aclsForUser:uid]): override method so that SOGo won't crash when
3020 loading the contact card.
3022 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3024 * SoObjects/Appointments/SOGoAppointmentFolder.m
3025 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
3026 "freebusy" special user should only require opaque elements.
3028 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3030 * SoObjects/Appointments/SOGoAppointmentFolder.m
3031 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
3032 our double declaration where the resulting XML would be screwed.
3033 There is only one collection per namespace.
3035 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
3036 rfc822DateString]): new method that returns a string conform to
3037 rfc 822 and suitable for email headers.
3039 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
3040 "rfc822DateString" category method on the date we put in the
3043 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3045 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
3046 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
3047 which should never be overriden.
3048 ([UIxUserRightsEditor -appendRight:newRight])
3049 ([UIxUserRightsEditor -removeRight:right])
3050 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
3051 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
3052 methods that can be used by the subclasses.
3053 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
3054 mandatorily be overriden to prepare the elements of the subclassed
3056 ([UIxUserRightsEditor -updateRights]): new method that should
3057 mandatorily be overriden to update the user rights from the
3058 elements of the subclassed form.
3060 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
3061 check if the uid is already listed before adding it to our array.
3062 This is because the acl table can contain more than one record per
3063 user/object relationship.
3065 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3066 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
3067 "roles" parameter is now an NSArray instead of a string. Therefore
3068 we loop throughout the array to populate the table. All the
3069 relevant records are removed prior to the addition of the new
3072 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
3073 -aclsForUser:uid]): new override that returns nil until we add
3074 support for IMAP acls.
3076 * SoObjects/Mailer/SOGoMailAccounts.m
3077 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
3079 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3080 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
3082 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3083 -aclsForUser:uid]): override this method which will always return
3086 * SoObjects/SOGo/SOGoPermissions.[hm]: added
3087 [Public,Private,Confidential]
3088 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
3089 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
3090 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
3092 * SoObjects/Appointments/SOGoAppointmentFolder.m
3093 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
3094 that defines default roles for new elements in the acl.
3096 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
3097 module and subclass of UIxUserRightsEditor specific to the
3098 handling of user rights on calendar folders.
3100 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3102 * SoObjects/Appointments/SOGoAppointmentFolder.m
3103 ([SOGoAppointmentFolder -groupDavResourceType]): return both
3104 "vevent-collection" and "vtodo-collection".
3106 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
3107 that implements the detailed editor of user rights per-object.
3109 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3111 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3112 -rolesForObject:objectinContext:context]): no longer query objects
3113 for "roleForUser:". Instead, all objects should implement
3116 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
3117 new method to comply with the new acl "protocol" in SOGoObject.
3118 Uses SOGoFolder's new facilities for ACLS.
3119 ([SOGoContentObject -aclsForUser:uid]): idem.
3120 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
3121 ([SOGoContentObject -removeAclsForUsers:users]): idem.
3123 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3124 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
3125 based folders. This method is derived from the code that was in
3126 UIxAclFolder before its removal.
3127 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
3130 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
3132 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
3133 ([SOGoFolder -setRoleForUsers:uidsto:role])
3134 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
3136 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
3137 that requires overriding by subclasses.
3138 ([SOGoObject -aclsForUser:uid]): idem.
3139 ([SOGoObject -defaultAclRoles]): idem.
3140 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
3141 ([SOGoObject -removeAclsForUsers:users]): idem.
3143 * UI/Common/UIxObjectActions.m: new module implementing the web
3144 actions common to SOGoObject and all its subclasses.
3145 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
3146 user with the clientObject defaults user rights to the object's
3149 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
3150 to the point where it will only list the users (and their name)
3151 associated with an object acl.
3153 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
3154 methods have been moved into SOGoObject and SOGoFolder during a
3157 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3158 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
3159 method made useless by the programmatic handling of iCalendar
3161 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
3162 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
3163 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
3165 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
3166 drop on all folder nodes, not just on leaves.
3168 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3169 ([SOGoContactLDAPFolder
3170 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
3172 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3174 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
3175 debugging facilities when the SOGoDebugObjectAllocation user
3178 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3180 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
3181 method that SOGo will need with non-gnustep Foundation
3183 ([NSString -stringByAppendingPathComponent:component]): new method
3184 that SOGo will need when building with libFoundation. Method
3185 removed later since it is available from
3186 Foundation/NSPathUtilities.h.
3188 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
3191 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
3192 every subclass to access [WOApplication context] without having to
3193 invoke it more than once.
3195 * SoObjects/Appointments/SOGoCalendarComponent.m
3196 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
3197 moved method from SOGoTaskObject and SOGoAppointmentObject up to
3200 * UI/Scheduler/UIxCalSelectTab.m: removed module.
3202 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3204 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
3205 -vCard]): test the prefix of the card in a case-independent way.
3207 * OGoContentStore/OCSContactFieldExtractor.m
3208 ([OCSContactFieldExtractor
3209 -extractQuickFieldsFromContent:content]): we no longer accept
3210 records in a format other than versit vCard so we can get rid of a
3213 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3215 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3216 -selectorComponentClass]): restored method.
3218 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3220 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
3221 -shouldDisplayCurrentTask]): the current task is not displayed if
3222 it is NOT completed or if the "showCompletedTasks" flag is set.
3223 The logic was inverted in Lightning and is now in SOGo too.
3225 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3227 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
3228 want the "work" url instead of the "home".
3230 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3231 -_saveSnapshot]): save url values from snapshot.
3232 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
3234 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3235 -calendarList]): new method replacing "availableCalendars".
3237 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
3238 -calendarFolders]): we now take the list of subscribed calendar
3241 * SoObjects/Appointments/SOGoAppointmentFolder.m
3242 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
3243 method derived from and replacing [UIxCalView calendarFolders].
3245 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3247 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3248 -toManyRelationshipKeys]): don't put the predefined folders in the
3249 list if they are returned by the server.
3251 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
3252 longer store the "flattenedBlocks" in a dictionary since the
3253 object will be deleted anyway and we don't need to put the folders
3256 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3257 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
3258 attachment path into account when computing the part urls.
3260 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3262 * UI/Contacts/UIxContactsListViewContainer.m
3263 ([UIxContactsListViewContainer -additionalFolders]): take the list
3264 of subscribed folders from the new property list used for the user
3265 settings. The value of its key is SubscribedFolders for the
3266 dictionary entry named "Contacts".
3268 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3269 -canAccessContentAction]): new method to override the one from
3270 UIxFoldersActions by taking into account the fact that, this time,
3271 the clientObject is an ldap folder. Removed many method that used
3272 to be related to the handling of the user selector.
3274 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
3275 to make sure they can be removed.
3277 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
3278 populate the calendar entries based on the user settings plist.
3280 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3281 -selectForMailerAction]): restored method.
3283 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
3284 from a simplified version of the old UIxContactEditor (removed).
3286 * UI/Contacts/UIxContactsUserFolders.m: new template module for
3287 selecting users or user folders through an LDAP search of which
3288 the results are displayed as a tree.
3290 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
3291 method "onContactAdd" here since the Mailer is now the only module
3292 to use it when composing emails.
3294 * UI/WebServerResources/generic.js: added code for handling the
3295 new scheme used for describing SOGo folders, common code to handle
3296 folder addition or removal.
3298 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3299 -activateFolderAction]): new method that change the "active"
3300 settings in the folder-related fields in the user settings.
3301 ([UIxFolderActions -deactivateFolderAction]): see above.
3303 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3304 -checkRightsAction]): removed method.
3306 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3307 -updateAdditionalAddressBooksAction]): removed method.
3309 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3310 -updateCalendarsAction]): removed method.
3312 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3314 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3315 -checkRightsAction]): removed method.
3317 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3318 -canAccessContentAction]): new method designed to replace
3319 [UIxCalMainView checkRightsAction] in a more universal way.
3321 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3323 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3324 -roleOfUser:uidinContext:context]): take all the subkeys into
3325 account, not only the "personal" folder.
3327 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3328 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
3329 to the new components.
3331 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
3334 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3335 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
3336 field of the sogo_user_profile table, where the user-customizable
3337 changes will be saved.
3338 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
3339 similar to the one above, using the "settings" field where the
3340 automatic settings will be saved.
3342 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
3343 module to bind the userdefaults to a property list contained in a
3344 specified field of the sogo_user_profile table.
3345 ([AgenorUserDefaults
3346 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
3347 added a "fieldName" parameter.
3349 * UI/Common/UIxFolderActions.m: new module implementing web
3350 actions common to all GCS-based folders.
3352 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3354 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
3355 put a carriage return after the day name.
3357 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3358 -readFreeBusyAction]): restored method.
3360 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3362 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3363 -defaultAction]): remade module to redirect automatically to the
3366 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
3368 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3370 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3371 -deleteAction]): new web method to delete personal addressbook
3374 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3375 -delete]): override method to refuse the deletion of the folder if
3376 its nameInContainer is "personal".
3378 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
3379 that forwards the deletion request to the folder manager.
3381 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3383 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
3384 -zoomList]): new method that returns the list of available zoom factors.
3386 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3387 -changeStatusAction]): rewrote method.
3389 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3390 -_handleAttendeesEdition]): make sure "attendeesNames" has a
3391 length > 0 before computing the attendees. Otherwise there will be
3392 an invalid empty entry.
3393 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
3394 organizer when there are attendees and remove it when the
3395 attendees are removed.
3397 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3399 * UI/Scheduler/UIxAttendeesEditor.m): new component.
3401 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
3402 the task and appointment editors. Now a container component
3403 handling the common elements of tasks and events.
3405 * UI/Scheduler/UIxTaskEditor.m: same as below.
3407 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
3408 a subclass of UIxComponentEditor but a subcomponent of it.
3410 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
3411 toolbar can have the special value "none" to indicate there is
3412 none attached to the window.
3414 * SoObjects/Appointments/SOGoCalendarComponent.m
3415 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
3417 ([SOGoCalendarComponent -isParticipant:email]): new method.
3418 ([SOGoCalendarComponent -calendar:create]): takes one parameter
3419 "create" which is a boolean indicating whether we want to create
3420 the calendar if it does not exist.
3422 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3424 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
3425 of a table, the same way the dayly and weekly views have been for
3428 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
3430 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
3433 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
3434 property to point at the user folder
3436 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3438 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3439 -userInContext:]): returns "SOGoUser".
3441 * SoObjects/Appointments/SOGoCalendarComponent.m
3442 ([SOGoCalendarComponent -contentAsString]): overriden method that
3443 takes the privacy into account and discard the relevant fields if
3444 needed by generating a new content string and caching it.
3445 ([SOGoCalendarComponent
3446 -saveContentString:contentStringbaseVersion:baseVersion]): if the
3447 new method above has cached a content string, release it and set
3448 it to nil so that it will have to be regenerated in the case it is
3450 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
3451 discard the fields that have to be hidden when the card is
3454 * SoObjects/Appointments/SOGoAppointmentFolder.m
3455 ([SOGoAppointmentFolder
3456 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
3457 sure the cards are now handled as instances of
3458 SOGoCalendarComponent instead of SOGoContentObject so that their
3459 content string is taking the privacy classifiction into account.
3460 ([SOGoAppointmentFolder -_privacySqlString]): new method that
3461 generates a query to determine what information can be given and
3462 if the card itself has to be shown.
3464 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3465 -getICalPersonsFromValue:selectorValue]): removed useless
3466 "isAccessRestricted" method.
3468 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3469 -setStyle:_style]): test whether the values of orgmail and
3470 partmails are null before manipulating them, otherwise SOGo sends
3471 a "rangeOfString:" message to an NSNull, which makes it crashes.
3473 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3474 -extractQuickFieldsFromEvent:_event]): we now use the new
3475 "symbolicAccessClass" method from iCalEntity to determine the
3476 value of the "classifiction" field.
3477 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
3480 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3482 * SoObjects/Appointments/SOGoAppointmentFolder.m
3483 ([SOGoAppointmentFolder
3484 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
3485 see below, the query is adapted consequently.
3487 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3488 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
3489 renamed to "classification" and can any integer as value.
3490 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
3493 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3495 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3496 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
3497 don't prepend anything to the class and id named. Instead, we
3498 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
3501 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3503 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
3504 -rolesOfUser:logininContext:context]): if object does not exists
3505 (for example when it's being created), the current user has the
3506 same rights on it than he/she has on its parent container.
3508 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3509 -nameExistsInFolder:objectName]): methods that tests if a c_name
3510 corresponding to the name passed as parameter is present in the db
3513 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3515 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3516 -rolesForObject:objectinContext:context]): test for
3517 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
3519 * SoObjects/Appointments/SOGoCalendarComponent.m
3520 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
3521 returns the roles of the user on the container object if the event
3524 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3526 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
3527 alternativeViewer a multipart/related message is being handled.
3529 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
3532 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
3533 text/html component before text/plain.
3535 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3536 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
3537 fetching of HTML parts.
3539 * SoObjects/Appointments/SOGoCalendarComponent.m
3540 ([SOGoCalendarComponent -componentTag]): new template method that
3541 returns the vcalendar tag of the current object.
3542 ([SOGoCalendarComponent -component]): new method that returns the
3543 first object matching [self componentTag] within the current
3544 calendar object. This method replaces 'firstEventInCalendar:' as
3545 well as "firstTaskInCalendar:".
3546 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
3547 moved method from SOGoAppointmentObject.m.
3549 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3551 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
3552 module which shows each selected user's calendar in a different
3553 column instead of mixing their events together.
3555 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
3556 replaced use of [NSString stringByTrimmingWhiteSpaces] with
3557 [NSString stringByTrimmingSpaces].
3559 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
3560 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
3563 * UI/Scheduler/UIxCalDayOverview.m,
3564 UI/Scheduler/UIxCalDayChartview.m,
3565 UI/Scheduler/UIxCalDayListview.m,
3566 UI/Scheduler/UIxCalWeekOverview.m,
3567 UI/Scheduler/UIxCalWeekChartview.m,
3568 UI/Scheduler/UIxCalWeekListview.m,
3569 UI/Scheduler/UIxCalInlineMonthOverview.m,
3570 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
3572 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3574 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3575 -appendPersonalSourcesInContext:context]): release connectoin
3576 channel when everything is done.
3578 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3579 -newAbAction]): new action method to crate a new contact folder
3582 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
3583 that requests the folder manager to create a folder table with the
3584 specified type at the specified path. The type is taken from [self
3587 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3588 -folderType]): implemented.
3590 * SoObjects/Appointments/SOGoAppointmentFolder.m
3591 ([SOGoAppointmentFolder -folderType]): implemented.
3593 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3594 -appendPersonalSourcesInContext:context]): we now fetch all
3595 folders with type "Contact" that belong to the current user.
3596 ([SOGoContactFolders -newFolderWithName:name]): new method to
3597 create a new contact folder.
3599 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
3600 resulting url with [NSString+Utilities hostlessURL] instead of
3601 using NSURL. This is because the url in question sometimes has a
3602 hostname and sometimes not. "hostlessURL" ensure the hostname is
3604 ([UIxComponent -applicationPath]): same as above.
3606 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
3608 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
3609 folders before doing the one on messages.
3611 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3613 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
3614 makeObjectsPerform:withObject:withObject: for GNUstep
3617 * OGoContentStore/GNUmakefile, Protocols/common.make,
3618 SoObjects/common.make, UI/common.make: install in
3619 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
3621 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
3623 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
3626 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3628 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
3629 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
3632 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3633 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
3634 password would be accepted anyway as long as its length was > 0.
3635 This can be the case ONLY when LDAP is disabled otherwise we have
3636 a serious security issue...
3638 * SoObjects/Appointments/SOGoAppointmentObject.m
3639 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
3640 user is not an organizer nor a participant, he is declared as
3641 "Owner" if he owns the calendar the entry where the entry is
3642 contained. Other cases should not be possible.
3644 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3646 * UI/Contacts/UIxContactEditor.m: display and handle the new
3649 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3650 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
3653 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3654 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
3657 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3659 * SoObjects/Appointments/SOGoCalendarComponent.m
3660 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
3661 returns the value of ud "SOGoAppointmentSendEMailNotifications"
3663 ([SOGoCalendarComponent
3664 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
3666 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3668 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3669 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
3670 so that the mailbox cache is refreshed everytime the user presses
3671 on "get mail". I doubt a mailbox cache really is useful in general
3674 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3676 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3677 -userInContext:]): if the lookup is on "freebusy.ifb" and the
3678 username is "anonymous" the user is automatically set to
3681 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3683 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3684 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
3685 user with password "freebusy".
3687 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
3688 -contentAsString]): the default timerange is now 14 days before
3689 currentday and 1 month after.
3691 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3693 * SoObjects/Appointments/SOGoAppointmentFolder.m
3694 ([SOGoAppointmentFolder
3695 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
3696 escape the record string in a way suitable with XML encoding.
3698 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3700 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
3701 calendar view would not be updated properly.
3703 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3705 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3706 -newStartDate]): fix the handling of the component start date
3707 depending on the "hm" and the "day" parameters.
3709 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3710 -roleOfUser:uidinContext:context]): set role of current user to
3711 "Assistant" if the object that is accessed is "freebusy.ifb".
3713 * SoObjects/Appointments/SOGoAppointmentFolder.m
3714 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
3715 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
3716 ([SOGoAppointmentFolder
3717 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
3718 lookupCalendarFolderForUID: method, which doesn't do security
3721 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3723 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
3724 accessor that returns the comma-separated list of users with role
3726 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
3727 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
3728 "checkedUsers". Instead, each user is either classified in the
3729 list of assistants or the list of delegates.
3731 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3733 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
3734 -composeAction]): method imported from removed container modules.
3735 ([UIxMailMainFrame -mailFolderName]): method imported from removed
3738 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
3739 for wrapping UIxMailView with the "popupview" action.
3741 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
3742 since its the component that displays the same splash screen than
3743 the one in Thunderbird/Icedove.
3745 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
3746 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
3747 UI/MailerUI/UIxMailListViewContainer.[hm],
3748 UI/MailerUI/UIxMailViewContainer.[hm]: removed
3750 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3752 * UI/WebServerResources/HTMLElement.js: replaced the functional
3753 selectNode() and deselectNode() functions with select() and
3754 deselect() methods of HTMLElement.
3756 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
3757 events are initialized from here now instead of in the HTML code.
3759 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3760 -checkRightsAction]): new method similar to the one with the same
3761 name in UIxCalMainView.m.
3763 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
3764 code to handle the publishing of freebusy information.
3766 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3768 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3769 -checkRightsAction]): new action method that returns a
3770 comma-separated list of boolean values matching the right of the
3771 current user to "view" (as a permission) each foreign calendar
3772 stored in his preferences.
3774 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
3775 new method that sets a customOwner, which can be returned with
3776 ownerInContext it set.
3778 * SoObjects/Appointments/SOGoAppointmentFolder.m
3779 ([SOGoAppointmentFolder
3780 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
3782 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3784 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
3785 below, but for the Contacts and Calendar collections.
3787 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
3788 new acl facilities method from sope-gdl/GCSFolder.m.
3790 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3791 -roleOfUser:uidinContext:context]): new method that returns
3792 SOGoRole_Assistant when the user is an assistant or a delegate on
3793 the "personal" ab object. This is so that setting roles on the
3794 SOGoContactFolders object is not required.
3796 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3798 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
3800 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
3801 to the handling of the user selection for the acls.
3803 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
3804 values from SoPermissions with ones specific to SOGo.
3806 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
3807 handles the storage for the acls.
3809 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
3810 class for SOGoAppointmentObject and SOGoTaskObject.
3812 * UI/Common/UIxAclEditor.[hm]: new component that provides a
3813 general editor for folder acls.
3815 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
3817 ([NSString -davMethodToObjC]): method that returns the method name
3818 for a DAV property implementation.
3820 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
3822 ([NSArray -stringsWithFormat:format]): new method that returns
3823 formatted occurences of the strings stored in the array.
3825 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
3826 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
3827 subclass module of SoWebDAVValue that supports collections of
3828 properties of the same type.
3830 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3832 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3833 -lookupFolder:ofClassNamed:inContext:]): added the ability to
3834 configure the name of the SOGoDraftFolders with the ud var
3835 "SOGoDraftsFolderName".
3837 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3839 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
3840 -userTimeZone:username]): new method that returns the timezone for
3841 the specified user depending on his preferences and the server
3844 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3845 -stringForData:partInfo:]): take the encoding into account and
3846 translate the text to "normal" before processing the charset data.
3848 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3850 * UI/WebServerResources/generic.js: the progress indicator is on
3851 when loading the page so we turn it off, and we turn it back on
3852 whenever we switch to another module...
3854 * UI/WebServerResources/SchedulerUI.js: make sure the day view
3855 synchronization mechanism works everywhere.
3857 * UI/WebServerResources/generic.js: the log window is not only
3858 visible when UIxDebugEnabled is set.
3860 * UI/WebServerResources/SchedulerUI.js: the month overview's day
3861 cells are now initialized with the DOM event interface methods
3862 instead of with html attributes.
3864 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
3865 headers (should be made configurable at some point)...
3867 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
3868 "not null" constraint on startdate, enddate, isopaque,
3869 participants and partmails.
3871 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3873 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3874 -hoursToDisplay]): prevent a crash by retaining the
3875 "hoursToDisplay" array after it's created.
3876 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
3877 clickable hours DIV.
3879 * UI/WebServerResources/SchedulerUI.js: made the event
3880 participation status modification asynchronous, which also fixes a
3881 bug where the window would sometimes close before the accept or
3882 decline action was completed. Also, adapted the event handling
3883 related to the days or weeks view with the new DIV-based layout.
3885 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
3887 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
3888 DIV-based presentation of the days and weeks.
3890 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
3892 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
3893 might return an exception so we have to handle it if we don't
3896 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3898 * UI/WebServerResources/SchedulerUI.js: updated the list
3899 initialization code to use the new event management scheme, adding
3900 what was missing to be able to delete events and tasks again.
3902 * UI/WebServerResources/MailerUI.js: added code to activate the
3903 "Get mails" button. Fixed a bug which prevented messages to be
3906 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
3907 navigation and focus handling of INPUTs.
3909 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3911 * UI/WebServerResources/MailerUI.js: added code to handle the
3912 possible drag and drop events to manager in the mail module.
3913 Moving messages, opening parent folders, ...
3915 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
3916 the drag and drop manager as well as the interface to HTMLElement
3917 to trigger drag and drop events.
3919 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
3920 action to move the current message to the mailbox named after the
3921 value of parameter "tofolder".
3923 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3924 -moveToFolderNamed:folderNameinContext:]): new method base on
3927 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3929 * UI/WebServerResources/generic.js: added and activated many
3930 "load" handlers to configure generic widgets used across the
3931 modules. More events are now handled in a DOM-fashion way instead
3932 of by setting the relative attributes in the templates.
3934 * UI/Templates/UIxSortableTableHeader.wox: all the events are
3935 declared from the javascript DOM onload handlers.
3937 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
3940 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
3941 declared from the javascript DOM onload handlers.
3943 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
3944 we want everything to be separated from each other, as much as
3947 * UI/WebServerResources/SOGoDragHandles.js: new module containing
3948 the "SOGoDragHandlesInterface", implementing methods that can be
3949 attributed to DIV so that they can be used as drag handles.
3951 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3952 -asQPSubjectString]): initialize the tmp strings with '0' to make
3953 sure they don't contain garbage.
3955 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3957 * UI/WebServerResources/MailerUI.js: register the messageList
3958 table as a dragging source and the leaf of the navigation tree as
3959 dnd destinations to the DNDManager.
3961 * UI/WebServerResources/generic.js: initialize tabs from the
3962 "unload" event listener that is added programmatically instead of
3963 from the template... Also, added the new DNDManager object.
3965 * UI/WebServerResources/HTMLTableElement.js: added code to
3966 simulate XUL drag n drop events. This code will possibly be moved
3967 to HTMLElement.js instead later...
3969 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3970 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
3973 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3974 -_qualifierForFilter:filter]): only search records which starts
3975 with the specified pattern.
3977 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3979 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3980 -asQPSubjectString]): new method that returns the special QP
3981 string with its qp declaration for email subjects.
3982 ([SOGoDraftObject -bodyPartForText])
3983 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
3984 double-encode data in UTF-8.
3986 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3987 -newStartDate]): new method to determine the start date depending
3988 on the URL parameters, the current day and the current time.
3989 ([UIxComponentEditor -toolbar]): new method to determine the
3990 filename of the toolbar that should be drawn depending on the
3991 ownership and the list of attendees of the task/event wrt to the
3994 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3995 -setDayStartHour:aStartHour]): adjust the minutes to the next
3996 quarter of hour, if not already set to a quarter.
3998 * UI/WebServerResources/UIxAppointmentEditor.js,
3999 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
4002 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4004 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4005 -loadValuesFromComponent:component]): handles access class
4006 (privacy) and status.
4008 * UI/Contacts/UIxContactsListViewContainer.m
4009 ([UIxContactsListViewContainer -additionalFolders]): return nil if
4010 [self additionalAddressBooks] returns an empty string.
4012 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4014 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
4015 rangesOf7Days]): enhanced and debugged algorithm to feed the array
4016 with slices where the first day is still in the requested month.
4018 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
4021 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
4022 of events in the day boxes of the calendar's monthly view.
4024 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
4025 -davContentType]): declare "text/calendar".
4027 * SoObjects/Appointments/SOGoAppointmentObject.m
4028 ([SOGoAppointmentObject -davContentType]): declare
4031 * SoObjects/Appointments/SOGoAppointmentFolder.m
4032 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
4033 HTTP methods are handled by SOPE and requires nil to be returned,
4034 this method now invokes the new
4035 "requestNamedIsHandledLater:inContext:" method to check that.
4036 ([SOGoAppointmentFolder
4037 -requestNamedIsHandledLater:nameinContext:context]): new methods
4038 that returns "YES" only for the "OPTIONS" http method (for now...).
4039 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
4040 overloaded method to append the "access-control" and
4041 "calendar-access" DAV abilities to the initial declaration.
4043 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
4044 imitate the look of Sunbird/Lightning's monthly view.
4046 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
4047 UIxCalMonthViewOld.[hm].
4049 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4051 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
4052 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
4054 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
4055 returns an image name based on the participation status of the
4058 * UI/WebServerResources/SchedulerUI.js: same strip down as for
4061 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
4062 ([UIxContactsListViewContainer -additionalFolders])
4063 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
4064 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
4065 methods to handle the external addressbooks a user has subscribed
4066 too, by retriving them from his preferences.
4068 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4069 -updateAdditionalAddressBooksAction]): new method that updates the
4070 user settings with the list of addressbook he has subscribed to.
4072 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
4073 module for the address book selector.
4075 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
4076 a toolbar with two buttons ("add" and "remove") to manage the
4077 additional addressbooks a user might subscribe to.
4079 * UI/WebServerResources/ContactsUI.js: added code to handle
4080 "external addressbooks" from the Javascript point-of-view, by
4081 extending existing methods and adding code for the "add ab" and
4082 "remove ab" buttons.
4084 * UI/WebServerResources/generic.js: moved extensions methods to
4085 DOM elements to separate files for better clarity.
4087 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
4088 new method that returns "pageContent" as class, but also "popup"
4089 for the DIV where the page content lies, so that we can manipulate
4090 the content of popup's with CSS identifiers.
4092 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4094 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4095 -displayStyle]): new method that returns a string containing the
4096 css style relative to the current appointment cell. This code is
4097 currently inactive but might be reused later.
4099 * UI/WebServerResources/SchedulerUI.js: added code to handle the
4100 display of the selected day (the day pointed by the mouse, or the
4101 current day when changing the view).
4103 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
4104 -dayCellClasses]): new method that returns a string containing the
4105 css classes applicable to the current cell, depending on the
4106 position of the day in the week, the day of today and the
4109 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
4110 -currentContactAptBorder]): new method that returns the
4111 appropriate border color for the specified user.
4113 * SoObjects/Appointments/SOGoAppointmentObject.m
4114 ([SOGoAppointmentObject
4115 -saveContentString:contentStringbaseVersion:baseVersion]):
4116 overloaded method that parse new events and detects if they have
4117 an organizer or not. If they are new and have no organizer set
4118 (Sunbird/Lightning...), the owner of the event is set as
4121 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
4122 category that provides facility methods and interfaces to the
4125 * SoObjects/Contacts/product.plist: give full access to ANY
4126 authenticated user, not just the owner (to every objects...).
4128 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4130 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
4131 every replica widgets are declared as such to their master
4132 counterpart. Take the days into account when displaying the time
4133 range taken by the appointment.
4135 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
4136 -getICalPersonsFromValue:selectorValue]): method taken from
4137 UIxFreeBusyUserSelector, that is shared both by
4138 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
4140 * SoObjects/Appointments/SOGoAppointmentFolder.m
4141 ([SOGoAppointmentFolder
4142 -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.
4144 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
4145 derived and taken as a subset of UIxFreeBusyUserSelector that
4146 implements the table part of the FreeBusy view. Most of the
4147 methods of UIxFreeBusyUserSelector relative to that table were
4148 moved into UIxFreeBusyUserSelectorTable, which can also be used as
4149 a standalone view for AJAX operations.
4151 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4153 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4154 -vCard]): change reverted.
4156 * UI/Contacts/UIxContactEditor.m: check whether the client contact
4157 folder has selector "globallyUniqueObjectId" before calling that
4160 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4161 -vCard]): the "setVClass" NGVCard method really is "setClass"
4164 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4165 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
4166 request the "streetAddress" instead of the "streetaddress".
4167 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
4168 mails that *contain*, and not just *start with* the search
4171 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4172 -vCard]): mark address returned from LDAP as the work address.
4174 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
4175 span covered with the anchor, not only the textual information
4178 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
4179 argument (event or task) to newEvent in the appointmentListMenu.
4180 Make the appointmentsListView display the appointmentsListMenu.
4182 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
4183 12 to 50 before displaying "...".
4184 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
4185 if its length > 0, whether location itself is nil or not...
4186 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
4187 of which the length > 0.
4189 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4191 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
4192 french and ISO dates.
4194 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
4195 from UIxContactSelector to handle contact lists (current and
4196 additional contacts).
4198 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4199 -_freeBusyAsText]): added handling of an "additional"-named query
4200 parameter that describe the number of additional days after
4201 enddate that should be returned.
4203 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4204 -_responseForResults:results]): give priority to results with
4205 "c_uid" fields. If none returned, use the first contact received.
4207 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4208 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
4209 2 and "CANCELLED" to 0.
4211 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4213 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
4214 of start and end dates to short string dates.
4216 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4217 -readFreeBusyAction]): new method that returns an array of numbers
4218 corresponding to the state in the freebusy of each "quarter of an
4219 hour" between the "sday" and "eday" date parameters passed in the
4220 url. This permits to handle the display of the freebusy with Ajax
4222 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
4223 since the free busy displays 2 days ahead.
4225 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4226 -contactSearchAction]): new action that returns the uid and the
4227 username + email of the user whose name contain the value of the
4228 "search" url parameter.
4230 * SoObjects/Appointments/SOGoAppointmentFolder.m
4231 ([SOGoAppointmentFolder
4232 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
4233 useful for the computing of the status of the freebusy.
4235 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
4236 -init]): new component that incarnates a user selector for events
4237 inspired by the new one found in Thunderbird Lightning.
4239 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4241 * UI/WebServerResources/generic.js: added code to enable or
4242 disable anchor visually (following our internal algorithm).
4244 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
4245 added new "url" ivar with its classic accessors.
4246 ([UIxComponentEditor -urlButtonClasses]): new method that returns
4247 the class strings for the url button on the appointment/task
4248 editor (depending on the validity of the url).
4250 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
4251 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
4252 the template to match the Lightning's new task/appointment editor.
4254 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
4256 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
4258 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4260 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4261 ([SOGoContactLDAPFolder
4262 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
4264 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
4265 iCalEntityObject instances instead of just iCalEvent's.
4267 * SoObjects/Appointments/SOGoAppointmentFolder.m
4268 ([SOGoAppointmentFolder
4269 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
4271 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
4272 bad way of handling ownership that way.
4274 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4275 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
4276 on "cn", just like Mozilla.
4278 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4280 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
4281 "to" should be retained, otherwise it will be autoreleased and a
4284 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4285 -writeAction]): updated method to fetch the card before initing
4288 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4289 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
4292 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
4293 -iCalStringTemplate]): start and due date are now optional.
4295 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4296 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
4297 appropriate accessors to be settable through the templates.
4299 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
4300 new "isDisabled" ivar with appropriate accessors to be
4301 settable through the templates.
4303 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4304 -availableCalendars]): new method that list the calendars to which
4305 the user has subscribed.
4306 ([UIxComponentEditor -componentOwner]): returns the owner of the
4309 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4310 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
4311 quickentries to null whenever each or all of them are null, by
4312 providing an impossible timestamp from with NSNotFound as value.
4314 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4316 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
4317 that handles the creation of new fields with the new APIs and the
4318 new node structure on the page.
4320 * UI/Scheduler/UIxAppointmentEditor.m,
4321 UI/Scheduler/UIxTaskEditor.m:
4322 refactored to user UIxComponentEditor as parent class.
4324 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
4325 containing the methods common to the UIxTaskEditor and the
4326 UIxAppointmentEditor.
4328 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4330 * SoObjects/Appointments/SOGoAppointmentFolder.m
4331 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
4332 the handling of time-ranges.
4334 * UI/WebServerResources/ContactsUI.js: specify a notification type as
4335 parameters when onConfirmContactSelection in invoked.
4337 * UI/WebServerResources/generic.js: specify a notification type as
4338 parameters when onContactRemove in invoked.
4340 * UI/WebServerResources/SchedulerUI.js: when the user deselects
4341 all calendars, select his entry.
4343 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4345 * UI/WebServerResources/SchedulerUI.js: edit and delete events
4346 with their owner-relative urls. Generate a correct entry in the
4347 css color table when a user is added to the calendars list. Put
4348 the same color next to the user id.
4350 * UI/WebServerResources/generic.js: implemented some new helper
4353 * SoObjects/Appointments/SOGoAppointmentFolder.m
4354 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
4355 entries if their owner is not the current user.
4357 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4358 -displayClasses]): return the correct class for the current event
4359 representation depending on its owner.
4361 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
4362 and associate a color for each user login depending on its
4363 position in the list.
4365 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
4366 -currentRowCSSClass]): return the correct class for the current
4367 row depending on the owner of the event.
4369 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4370 -setColors:colors]): new method to associate a color table with
4371 each user in the list.
4373 * SoObjects/Appointments/SOGoAppointmentFolder.m
4374 ([SOGoAppointmentFolder
4375 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
4377 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
4378 NSObject to associate an instance with a user.
4380 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4382 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
4385 * UI/WebServerResources/ContactsUI.js: added handling of
4386 notification of changes to contact selectors.
4388 * UI/WebServerResources/generic.js: added handling of notification
4389 of changes to contact selectors.
4391 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4392 -updateCalendarsAction]): proxy method to update the user
4393 preference table with the new selected calendar uids.
4395 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
4396 -calendarsContactsAction]): new method.
4398 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
4399 ([UIxContactSelector -setHasCheckBoxes:aBool])
4400 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
4401 permit the drawing of checkboxes instead of card icons.
4403 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
4404 wrap a selector the the "Calendars" tab.
4406 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
4407 new user calendar selector.
4409 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4411 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
4412 may cover hour 0 to hour 23.
4414 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4415 -iCalStringFromQueryParameter:format:]): dates explicitly set to
4418 * UI/WebServerResources/SchedulerUI.js: manage both lists of
4419 objects wrt to the toolbar actions.
4421 * UI/WebServerResources/generic.js: added code to the "String"
4422 class to decode number-encoded char entities.
4424 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4425 -batchDeleteAction]): new method to delete selected entries in the
4428 * SoObjects/Appointments/SOGoAppointmentFolder.m
4429 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
4430 that delete identified entries in batch.
4432 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4433 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
4435 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
4436 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4437 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
4438 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4440 return a UIxJSClose component if everything went fine.
4442 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
4445 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
4446 UIxAppointmentEditor.m.
4448 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
4449 a very light page with javascript code to close a window, by
4450 calling a method on the opener if specified. This component is
4451 designed to work as a response to form postings.
4453 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4455 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
4456 SOGoAppointmentObject adapted for the handling of tasks.
4458 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
4459 extracted from SOGoAppointmentObject.
4461 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4462 -saveUrl]): returns the url needed to POST the new form to.
4463 redirect the user to <aptid>/editAsAppointment instead of /edit,
4464 so that SOGoAppointmentFolder can return the correct object type.
4466 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
4467 -compareAptsAscending:_other]): accept empty start or end dates.
4469 * SoObjects/Appointments/SOGoAppointmentFolder.m
4470 ([SOGoAppointmentFolder
4471 -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.
4472 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
4473 components of type "vtodo" as well as "vevent".
4474 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
4475 url specified ends with AsTask or AsAppointment, returns the
4476 an object of the appropriate class, otherwise deduce it from its
4477 content if the HTTP method is "PUT", otherwise read its type from
4480 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4481 -extractQuickFieldsFromTodo:_task]): extract quick fields from
4484 * UI/Scheduler/UIxCalView.m ([UIxCalView
4485 -fetchCoreAppointmentsInfos]): replacement methods for
4486 fetchCoreInfos but by retrieving object with component "vevent".
4487 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
4490 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
4491 UIxCalAptListView adapted for the handling of tasks.
4493 * UI/Scheduler/UIxTaskProposal.[hm],
4494 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
4495 clones of the UIxAppointment* classes for the handling of tasks.
4497 * UI/WebServerResources/UIxTaskEditor.js: clone of
4498 UIxAppointmentEditor adapted for the handling of tasks.
4500 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
4501 Scroll the daily view to the appropriate hour when an appointment
4502 is selected in the appointments list.
4504 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4506 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4507 -setDayStartHour:aStartHour]): specifies the user timezone on the
4510 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
4513 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
4514 ([NSCalendarDate -driftedDate]): methods made useless by a better
4515 comprehension of the NSTimeZone API...
4517 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4519 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
4520 new methods from the NSCalendarDate methods.
4522 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
4523 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
4525 +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).
4526 ([NSCalendarDate -adjustedDate]): this method returns another
4527 instance set to the correct hour after the original date was set
4528 from a non-GMT timezone. This date can be used for storage.
4529 ([NSCalendarDate -driftedDate]): this method does exactly the
4530 opposite of -adjutedDate, that is, it enables the method
4531 hourOfDay, minuteOfHour etc... to return the values according to
4532 the original date's timezone. This date CANNOT be used for storage.
4534 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
4535 -shortDateString]): new method that will return a "short date
4536 string" (yyyymmdd) from a calendar date object.
4538 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4539 -_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.
4541 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
4542 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
4544 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4546 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
4547 view of the day at the height of hour 8:00.
4549 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
4550 ([UIxCalView -dayEndHour]): returns 24.
4552 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
4553 ([UIxContactFoldersView -newAction]): invoke
4554 _selectActionForApplication: on self with the proper attribute too.
4556 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
4557 we now use the action mechanism in UIxContactsListView to keep the
4558 same view for the contact selectors and the regular contact view.
4560 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
4561 UIxContactsListViewContainerBase.[hm]
4563 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
4565 * UI/WebServerResources/generic.js: generalized emailstring
4566 handling functions. Generalized address book access functions.
4568 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4569 -isPopup]): return YES if the "popup" query parameter is set.
4571 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4572 -defaultAction]): keep the url parameters when redirecting.
4573 ([UIxContactFoldersView -selectForSchedulerAction])
4574 ([UIxContactFoldersView -selectForMailerAction]): new action
4575 methods for the /scheduler-contacts and /mailer-contacts invocations.
4577 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
4578 newly available NSString+URL category.
4580 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
4581 -asURLParameters]): handle dictionary entries which could be
4582 instances of NSArray rather than NSString.
4584 * SoObjects/SOGo/NSString+URL.m ([NSString
4585 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
4586 ([NSString -urlWithoutParameters]): new method that returns the
4587 url without its parameters.
4589 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
4591 * SoObjects/SOGo/NSDictionary+URL.[hm],
4592 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
4594 * UI/WebServerResources/UIxMailEditor.js: add support for
4595 additions of different types (to, cc, bcc) of recipients from the
4598 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
4601 * UI/Contacts/UIxContactsMailerSelection.m,
4602 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
4603 UI/Contacts/UIxContactsSelectionView.m to provide a different set
4604 of widgets depending on the application invoking the contact list.
4606 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4608 * UI/WebServerResources/ContactsUI.js: hide the current contact
4609 whenever the user changes of contact folder.
4611 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
4612 now provided by the template when loading the page.
4614 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4615 -iCalPersonWithUid:uid]): new method taken from removed module
4618 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4620 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
4621 -categoriesAsString]): same as below.
4623 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
4624 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
4626 * SoObjects/Appointments/SOGoAppointmentObject.m
4627 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
4628 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
4631 * SoObjects/Appointments/SOGoAppointmentFolder.m
4632 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
4633 hackish test to detect whether the request concernes VEVENT's or
4634 anything else. Return events only in the former case.
4635 ([SOGoAppointmentFolder
4636 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
4637 c_name quickfield so that the calendar list can identify the
4638 appointments with their complete "filename".
4640 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
4641 groupsOfClass:fromSource: to parse the given vcalendar.
4643 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
4645 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
4647 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
4650 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
4652 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4654 * SoObjects/Appointments/SOGoAppointmentFolder.m
4655 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
4656 sensitive to the CalDAV method names.
4657 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
4658 "calendar-query" CalDAV method name.
4660 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
4661 code coming originally from MailerUI.js.
4663 * UI/WebServerResources/UIxContactEditor.js: imitate the
4664 Thunderbird address book by completing the display name with the
4665 content of the first and last name fields, until the display name
4666 is modified manually.
4668 * UI/WebServerResources/generic.js: added a "trim" method to the
4671 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4672 -displayName]): new method that returns the display name from "cn"
4673 or from the "displayName" key if found.
4675 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4676 -initSnapshot]): check if "[card n]" returns anything to avoid a
4679 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
4680 that returns an unparsed doctype definition for the pages.
4682 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4683 -vCard]): set the card's fn to attribute "displayName" if found
4686 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4688 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4689 -vCard]): handle the "streetAddress" and "l" fields.
4691 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
4692 header fields by converting the tables to DIVs and SPANs.
4694 * UI/WebServerResources/generic.css: attempted unification of font
4695 families and size across all the elements. changed the
4696 logConsole's "position" from "fixed" to "absolute" to avoid
4699 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4701 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
4702 empty the contact view when the current contact is being deleted.
4704 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
4705 parse the email field and provide the address full name if found
4706 as the "contactFN" parameter.
4708 * UI/WebServerResources/generic.js (openMailTo): do not give a
4709 name to the opened window so that serveral ones can be opened at
4712 * UI/MailPartViewers/UIxMailPartTextViewer.m
4713 ([UIxMailPartTextViewer -flatContentAsString]): override method by
4714 replacing carriage returns with "<br />" in the result string from
4715 super's implementation.
4717 * UI/Contacts/UIxContactView.m ([UIxContactView
4718 -_urlOfType:aType]): don't manage non-mailto urls through
4719 javascript, let the user decide what's best for him.
4721 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4722 -newAction]): transfer all the query parameters by using the
4723 "asURLParameters"'s result string from [self queryParameters].
4725 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4726 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
4727 query parameters and put their values (if any) into the snapshot.
4729 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
4730 carriage-returns to "<br />".
4731 ([UIxContactView -workCompany]): explicitly initialize company to
4732 nil if org is nil or empty.
4734 * UI/WebServerResources/UIxContactEditor.js: updated validation
4735 code after we added and renamed some fields.
4737 * UI/WebServerResources/ContactsUI.js: added code to cache contact
4738 cards and to handle card updates.
4740 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4742 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
4743 test the length of the returned string since they will never be
4746 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
4747 return self if the process went successful, returns an exception
4748 otherwise (and only otherwise...).
4750 * OGoContentStore/OCSContactFieldExtractor.m
4751 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
4752 adapted method to the new VCard api. Since the cards are stored in
4753 vcard format, we no longer deal with a dictionary but with a
4756 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4758 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
4759 return a string with a "mailto" url.
4760 ([UIxContactView -_urlOfType:aType]): generic method to return a
4761 url string with a html anchor pointing to it.
4763 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
4764 since subclass "UIxContactEditor" did nothing. Implemented code to
4765 display and modify the values parsed from the vcards, displayed in
4766 a way similar to the Thunderbird addressbook.
4768 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4769 -save]): new dummy method.
4771 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4772 -save]): made method void.
4774 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4776 * UI/Contacts/UIxContactView.m: added many wrapper methods to
4777 display blocks of data à la Thunderbird Addressbook. If data is
4778 available, those wrappers (around the NGVCard methods) will
4779 enclose the results in a proper HTML output with the correct label
4780 (if present), otherwise it will return an empty string.
4781 ([UIxContactView -vcardAction]): new action to return the contact
4782 as text/vcard (for exporting).
4784 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4785 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
4787 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4788 -vCard]): create a new NGVCard instance when no data is available
4790 ([SOGoContactGCSEntry -save]): save the vCard using the new
4791 "versitString" API method/message.
4793 * UI/Contacts/UIxContactView.h: separated interface from
4796 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
4797 views and display them beneath the list.
4799 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4801 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
4802 the timezone even when it's the server timezone.
4804 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4805 -privateContacts:inContext:]): no long configure the calendar
4806 object with the user's timezone since it's now accessible
4807 application-wide throught the SOGoObject methods.
4809 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
4810 method. Removed the "backendTimeZone" method.
4812 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
4813 instead of SoComponent.
4815 * SoObjects/Appointments/SOGoAppointmentObject.m:
4816 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
4817 [self serverTimeZone] instead of "EST" (which was removed).
4819 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
4820 "timeZone" ivar and its accessors.
4822 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
4823 centralized method returing the timezone configured in the
4824 userdefaults db or "Canada/Eastern" if missing.
4825 ([SOGoObject -userTimeZone]): new centralized method returing the
4826 timezone of the current user or the server timezone if missing
4827 from the user configuration table.
4829 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4831 * UI/WebServerResources/SchedulerUI.js: implemented caching of
4834 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
4835 return a path based on the object's context instead of the first
4836 level in SOGo's object hierarchy...
4838 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4840 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
4843 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
4844 timezone ([self viewTimeZone]) to the WEMonthOverview component to
4845 avoid a confusion with the days.
4847 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
4850 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
4851 imitate Sunbird's synchronization between the 3 visible views.
4853 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
4854 sure the numbers in dateString are formatted so as to take 4 chars
4855 for the year and 2 for the day and the month, otherwise
4856 NSCalendarDate will return a nil date.
4857 ([UIxComponent -applicationPath]): return a path based on the
4858 object's context instead of the second level in SOGo's object
4861 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4863 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
4864 user's timezone abbreviation to the date string passed as parameter to
4865 NSCalendarDate to generate an accurate date instance. Do the same
4866 when no date is specified and today is chosen.
4868 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
4869 form's time values to integers before comparing them.
4871 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
4872 ([UIxCalAptListView -currentEndTime]): initialize the resulting
4873 dates timezone with [self viewTimeZone].
4875 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
4876 "viewTimeZone" ivar destined to hold an instance of the user's
4878 ([UIxComponent -viewTimeZone]): take the timezone from the user's
4881 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4883 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
4884 rearranged the layout.
4886 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
4887 manage showing and hiding appointment details.
4889 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4890 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
4891 timezone by taking the current user's timezone setting.
4893 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
4895 * SoObjects/Appointments/SOGoAppointmentObject.m
4896 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
4897 set default timezone to EST, although this code should be
4898 rewritten to handle a system and a user default value.
4900 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4901 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
4902 take the values from the hour and minute INPUTs when data is
4903 POSTed since we no longer use the UIxTimeSelector component.
4904 ([UIxTimeDateControl -selectableHours])
4905 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
4906 template SELECTs to display reasonable and acceptable values
4907 instead of all the possibilities.
4909 * UI/WebServerResources/generic.js: adapted code for the new
4910 implementation of the UIxContactSelector component (added a
4911 "remove" button, removed the previous INPUT and replaced them with
4912 links of class "button").
4914 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
4915 UIxTimeDateControl.m.
4917 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
4918 ([UIxCalDayTable -currentAppointmentHour]): new methods that
4919 returns correctly formatted values used as attributes for JS code.
4921 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4922 -initialContactsAsString]): renamed implementation of
4923 initialParticipants.
4924 ([UIxContactSelector -currentContactId])
4925 ([UIxContactSelector -currentContactName]): new methods used when
4926 listing the initial contacts in the widget. Currently, both return
4927 the person's cn but the latter should ultimately return a user
4930 * UI/Contacts/UIxContactSelector.h: separated interface from
4931 UIxContactSelector.m.
4933 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
4934 all javascript code is now put in Scheduler.js/generic.js.
4936 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
4937 moved into NSCalendarDate+Scheduler instead.
4939 * SoObjects/Appointments/SOGoAppointmentFolder.m
4940 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
4941 configure the timezone from SOGoUserFolder when the instance is
4943 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
4944 the value of the new "timezone" ivar.
4946 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4948 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
4949 the date selector in the first page and the container of the
4950 future calendar selector in the second page.
4952 * UI/WebServerResources/generic.js: added code for handling tabbed
4955 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
4956 returns the bundle name associated to the current running product.
4958 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4960 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
4961 exception by invoking a timeout on the opener rather than invoking
4962 the list refresh method.
4964 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
4967 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
4968 ([UIxCalWeekView -prevWeekQueryParameters])
4969 ([UIxCalWeekView -nextWeekQueryParameters])
4970 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
4971 that return the dates relatively to the current day.
4972 ([UIxCalWeekView -lastWeekName])
4973 ([UIxCalWeekView -currentWeekName])
4974 ([UIxCalWeekView -nextWeekName])
4975 ([UIxCalWeekView -weekAfterNextWeekName])
4976 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
4977 methods that returns the label for the corresponding weeks.
4979 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
4980 used by UIxCalDayView and UIxCalWeekView to display the events
4981 occuring in one or more days.
4983 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4985 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
4986 entries in the new "monthMenu" and "yearMenu".
4988 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
4989 method to return the current day as a string formatted depending
4990 on the current locale.
4992 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4993 ([UIxCalAptListView -endDate]): "today" is now the default filter
4994 for displayed events.
4995 ([UIxCalAptListView -currentSerialDay]): new method returning the
4996 date of the current enumerated appointment in serial form
4999 * UI/WebServerResources/SchedulerUI.js: added code to select the
5000 relevant day when an appointment is selected. Added code to popup
5001 a month and a year menu whenever the header entries are clicked in
5002 the calendar widget.
5004 * UI/WebServerResources/generic.js: made addClassName and
5005 removeClassName methods of HTMLElement.
5007 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5009 * UI/WebServerResources/MailerUI.js: fixed the contact creation
5010 from email addresses.
5012 * UI/WebServerResources/generic.js: centralized the search-related
5013 functions here since the same code was used across the 3
5016 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
5017 ([UIxCalAptListView -endDate]): return the required dates needed
5018 depending on the value given to the "filterpopup" url parameter.
5020 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
5021 code by invoking UIxComponent's labelForKey:.
5023 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
5024 [self pageResourceManager] instead of [self resourceManager].
5026 * UI/Contacts/UIxContactEditorBase.m: invokes
5027 globallyUniqueObjectId on the clientobject's class instead of the
5028 hardcoded "SOGoFolder".
5030 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
5031 -newAction]): redirect the "new" action to the personal (default)
5034 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
5035 +objectWithName:inContainer:]): new constructor.
5037 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
5038 -lookupContactWithId:recordId]): always create a contact object,
5039 even if it does not exist.
5041 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5043 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
5044 component that lays out the different components of SOGoCalendar.
5045 Only serves as an Objective-C counterpart to its xml template.
5047 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
5050 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
5051 display a widget to handle the information displayed in the
5052 appointments list. Not currently used, lacks implementation.
5054 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
5055 display a calendar as a dynamic widget from where one can select
5056 the current visible day.
5058 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
5059 extracted from UIxCalInlineMonthOverview.m.
5061 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
5062 calendarPageURL methods. The javascript code is handled by .js
5063 files as much as possible...
5065 * UI/WebServerResources/ContactsUI.js,
5066 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
5069 * UI/WebServerResources/SchedulerUI.js: implemented functions to
5070 handle the new widgets. XmlHTTPRequest code taken from
5073 * UI/WebServerResources/generic.js: put some functions related to
5074 element selections as methods to HTMLElement and HTMLTableElement.
5076 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
5077 display the list of appointments (embodies the code-size of
5078 UIxCalAptListView; answers to the "aptlist" method).
5080 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5082 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
5083 -correctURLAction]): new short action method replacing the method
5084 below by taking far less code.
5086 * SoObjects/Appointments/SOGoAppointmentFolder.m
5087 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
5088 with an action in the view-related code.
5090 * UI/Scheduler/UIxAppointmentEditor.m: invoke
5091 "stringByEscapingHTMLString" on the resulting value to avoid
5092 issues with accented characters.
5093 ([-jsCode]): removed method since the javascript code was merged
5094 into SchedulerUI.js.
5096 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5098 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
5099 new class method that returns an iCalPerson based on the UID given
5102 * UI/Contacts/UIxContactsListViewContainerBase.m:
5103 UIxContactsListViewContainer renamed to serve as a base class for
5104 the contact lists in both the contact editor and the contact
5107 * SoObjects/Contacts/SOGoContactLDAPFolder.m
5108 ([SOGoContactLDAPFolder
5109 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
5110 setUserIdentifier:setRootDN:]): an LDAP field specifying the
5111 loginname of the users can now be specified.
5113 * UI/WebServerResources/generic.js: added code to manage contact
5114 lists through the new implementation of the UIxContactSelector.
5116 * UI/Templates: put the templates related to SchedulerUI in its
5119 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
5120 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
5121 entry for "uid" with the field name representing the login name of
5122 the user in the corresponding LDAP branch.
5124 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5126 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
5127 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
5128 request is a PUT, always create an entry, even if we're not sure
5131 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5133 * UI/WebServerResources/ContactsUI.js: implemented live-search.
5135 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
5136 -appendSystemSourcesInContext:context]): populated method with
5137 code that creates entries mapped to instances SOGoContactFolder,
5138 based on the configuration found in the NSUserDefaults under the
5139 key "SOGoLDAPAddressBooks".
5140 ([SOGoContactFolders
5141 -lookupName:nameinContext:contextacquire:acquire]):
5142 "contactsources" do not exist anymore, SOGoContactFolder was split
5143 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
5144 and one protocol: SOGOContactFolder, instead.
5145 ([SOGoContactFolders -contactFolders]): new accessor used by the
5146 views of SOGoContactXXXFolder to list the possible sources.
5148 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
5149 defines the methods that UIxContactsView, ..Editor and so on...
5152 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
5153 defines the methods that UIxContactsListViewBase expects as well
5154 as the data fields returned in the contact lists.
5156 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
5157 returns entries an LDAP server. Conforms to the new
5158 SOGOContactFolder protocol.
5160 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
5161 returns a vCard based on contact entries from an LDAP server.
5162 Conforms to the new SOGOContactObject protocol.
5164 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
5165 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
5166 entry for the textual representation of the vCard.
5168 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
5171 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
5172 "SOGoContactObject".
5174 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
5175 method that generates a textual representation of the vcard.
5177 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
5179 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
5180 "SOGoContactFolder".
5182 * SoObjects/Contacts/SOGoContactSource.h,
5183 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
5186 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
5187 -singleAttributeWithName:key]): new method that returns the first
5188 object associated with an ldap key (where generally one value is
5191 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
5192 map the entry into an NSDictionary for processing by
5193 UIxContactsListViewBase.m with the least possible overhead.
5195 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
5198 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5200 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5201 -privateContacts:inContext:]): now returns an instance of
5204 * UI/Contacts/UIxContactsListViewContainer.m
5205 ([UIxContactsListViewContainer -contactFolderName]): new method to
5206 return the absolute path to the current contact folder, called
5207 from within the template.
5209 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
5210 JS code to initialize the 'currentContactFolder' generic var.
5212 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
5213 +contactFolderWithSource:inContainer:andName:]): new class
5214 method meant to return an instance connected to the specified
5215 source. Currently useless but won't be anymore in the next few
5218 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
5219 the "lookupFreeBusyObject" method since it does not exist.
5221 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
5222 as a "view" for the SOGoContactFolders object. Does nothing but
5223 redirect the browser to the URL of the personal address book of
5224 the user. It does not even have a template.
5226 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
5227 implementing the SOGoContactSource protocol. Does nothing
5228 currently but will be used to implement access to the personal
5229 address book of the user stored in the SOGo database.
5231 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
5232 protocol defining an API common to all possible types of contact
5235 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
5236 serving as the root of the contact folders available to the
5237 current user. Correctly lists the contact sources in webdav.
5239 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5241 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
5242 -composeAction]): new action method that permits external object
5243 to write a message from the default (primary) account.
5245 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5246 -initSnapshot]): new method with code taken from "defaultAction"
5247 but needed for others.
5248 ([UIxContactEditorBase -writeAction]): new action designed to
5249 compose the correct URL needed to obtain the MailerUI's email
5250 editor with the correct "mailto" parameter.
5252 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
5253 Common so that other modules can use it.
5255 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
5256 easier to manage both ajax and non-ajax requests.
5258 * UI/Contacts/UIxContactsFilterPanel.m: clone of
5259 UIxMailFilterPanel, but applicable to contact lists.
5261 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
5262 -vcardContentFromSOGoContactRecord]): use the new standard methods
5263 created for each type of entry. If a line is determined to not
5264 contain information, it will be skipped.
5266 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
5267 +initialize]): init defaultMailDomain with the user default
5268 "SOGoDefaultMailDomain".
5270 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5272 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5273 -saveAction]): reorganized methods to only have ONE return point.
5274 Invoke saveRecord: directly on the clientObject instead of
5275 saveContentString, which does the same thing anyway.
5277 * SoObjects/Contacts/NSDictionary+Contact.m
5278 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
5279 method to convert the dictionary returned with the user submission
5280 to a record in VCARD format to be stored in the database.
5282 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5284 * UI/WebServerResources/MailerUI.js: when opening the context menu
5285 of the message list, select the message below the mouse cursor and
5286 deselect the other selected messages temporarily. This mimics the
5287 behaviour of Thunderbird for that matter and was already
5288 implemented for the entries of the folder tree.
5290 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
5291 -iconForMenuItem]): new method that returns the fully qualified
5292 relative URL to the icon representing the mailbox, or the default
5293 mailbox icon if needed.
5295 * UI/SOGoUI/UIxComponent.m ([UIxComponent
5296 -urlForResourceFilename:filename]): automatically return an empty
5297 string whenever the filename passed as argument is nil.
5299 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
5300 "desc" parameter set to 1 so that they are sorted in descending
5301 order by default. Also, added "onHeaderClick()", triggered by
5302 clicking on the message list header elements.
5304 * UI/MailerUI/UIxMailSortableTableHeader.m
5305 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
5307 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5308 -isSortedDescending]): defaults to "YES" when the sort order is
5311 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5313 * UI/WebServerResources/MailerUI.js:
5314 - message cache: set the max num of cached messages to 20. Limit
5315 the cached message size to 30000 bytes.
5316 - ajax: when a message request is called while one is already
5317 being performed, the latter will be cancelled. Idem when
5318 retrieving the content of a mailbox.
5319 - folder tree: when a mailbox is selected because of the URL
5320 requested (initMailboxSelection), the dtree is expanded throughout
5321 the mailbox entry's parent hierarchy to ensure it is made visible
5322 when the page is being displayed. (new function: expandUpperTree).
5323 - mailbox loading: when loading a mailbox where a message was
5324 previously selected, we invoke its url with the "pageforuid"
5325 parameter correctly specified. During callback processing, we scan
5326 the table for the related row and reselect it.
5327 Also, the message area is set blank before loading any mailbox.
5329 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5330 -defaultAction]): if the "pageforuid" parameter is passed in the
5331 url, take its value and invoke [self firstMessageOfPageFor:]
5332 consequently to deduce the first message to display. Otherwise,
5333 set it to "idx", otherwise set it to 0.
5334 ([UIxMailListView -firstMessageOfPageFor:]): new method
5335 that determines the first message of the page where the message
5336 passed as parameter is contained.
5338 * UI/WebServerResources/UIxMailListView.js: removed this module,
5339 its code was put in MailerUI.js instead.
5341 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5343 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
5344 which returns the nodes for the parent specified in "parentMenu".
5345 Used to generate the javascript code for the folder dtree.
5347 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
5348 using that container-template are now using UIxMailMainFrame
5349 since UIxMailPanelFrame had no real interest. File removed.
5351 * UI/WebServerResources/dtree.{css,js}: new files to handle
5352 javascript-generated mailbox tree. Modified from original version
5353 by integrating the previous code with the one we are using for
5354 selections and mailbox handling. Minor visual enhancements too...
5356 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5358 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
5359 returned, put it in an NSArray before returning it (fixes
5362 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5364 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
5365 that returns a url string stripped from its "http://hostname"
5368 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
5370 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
5372 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5374 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
5375 -mailDateFormatter]): retrieve the timezone from the user settings
5376 and pass it to the returned dateFormatter. Also, the dateFormatter
5377 is kept in a static variable to avoid useless
5378 creations/destructions.
5380 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
5381 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
5383 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
5384 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
5385 s/Criteria/Text/ to handle the "criteria" form parameter.
5387 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5389 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
5390 to integrate better with the firefox look&feel. Added entries for
5391 the new "menu" DIV class (popup menus).
5393 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
5394 takes any chunk of text as param, detects the user email and the
5395 optional first and last names and return them in a well-formatted
5396 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
5397 namespace conflict. Added "onMenuClick(node, event, menuId)" to
5398 handle popup menus through "onclick" element attributes (node =
5399 this, event = event and menuId = name of the menu DIV id to
5402 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5403 -snapshot]): add an entry for "email" into the snapshot
5404 dictionary if a "contactEmail" URL parameter was detected and if
5405 the entry for "email" is empty.
5407 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
5408 button now invokes the newContact() js function in ContactsUI.js
5409 instead of opening "new" directly. newContact() pops up a window
5410 stripped from its navigation bar.
5412 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
5413 bundle (AddressBook).
5415 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
5416 "menu" and id "addressMenu" have the header email addresses
5417 display it with the new menu code in generic.js.
5419 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
5420 replaced the body tables with a div of class "pageContent"
5421 (standardization across the page templates).
5423 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
5424 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
5425 those are now inherited from UIxPageFrame.
5427 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
5429 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
5430 a "mailto" URL parameter is detected and the "to" array is empty,
5431 initialize "to" with the value of "mailto" before returning it.
5433 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
5434 -composeAction]): rewrote method in a cleaner way and with usage
5435 of the URL extensions to NSString and NSDictionary (see below).
5436 Also, if a "mailto" url parameter is detected, pass it to the
5439 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
5442 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
5443 returns a parameter string to add to a base URL.
5445 * UI/Common/NSString+URL.m ([NSString
5446 -composeURLWithAction:parameters:andHash:useHash]): new method to
5447 compose a complete URL from an object URL with parameters and an
5448 optional '#' character.
5450 * UI/Common/UIxPageFrame.h: separated interface from
5453 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
5455 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
5457 * UI/WebServerResources/generic.js: added code to manage
5458 selections within HTML containers.
5460 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
5461 added method to determine the possible URL for a product-specific
5462 javascript filename of the forme <productname>.js.
5463 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
5464 ([UIxPageFrame -isPopup]): new method to determine whether the
5465 application navigator bar should be displayed (main page) or not
5468 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
5469 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
5470 the user through LDAP.
5472 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5474 * The toolbar code from the MailerUI product was taken, renamed as
5475 "UIxToolBar" and put into UI/Common. Toolbar plists were created
5476 for the Contacts and Scheduler products and put in their respectir
5477 Toolbars/ subdirectories. Finally,
5478 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
5479 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
5480 and an invocation to the UIxToolbar component was put at the top
5481 of UI/Templaces/UIxPageFrame.wox.
5483 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
5484 within the templates whether a separator should be displayed.
5486 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
5487 that returns NO if the toolbar is empty.
5489 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5491 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
5493 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
5494 new toolbar objects.
5496 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
5498 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
5499 linkbanner as a DIV instead of a TABLE.
5501 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
5503 returns 'YES' to request the display of the navigation bar between
5506 2006-06-15 ludovic@inverse.ca
5508 * It's now possible to set the default
5509 domain using for email using the
5510 SOGoDefaultMailDomain preference key.
5512 2006-06-15 ludovic@inverse.ca
5514 * Initial import of SOGo from trunk.