1 2007-12-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3 * SoObjects/Appointments/SOGoAppointmentFolder.m
4 ([SOGoAppointmentFolder -davCalendarQuery:queryContext]): fixed a leak.
6 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder -davSubscribe:localContext])
7 ([SOGoGCSFolder -davUnsubscribe:localContext]): subscribe an
8 unsubscribe from DAV-based accesses. We could be compatible with
9 Microsoft's extensions but we have no need for a "subcription id",
10 so we implement our own.
12 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
13 -POSTAction:localContext]): new method to intercept DAV POSTs,
14 which we now use to implement certain custom commands such as
15 "subscribe" and "unsubscribe".
17 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
18 -davNamespaces]): declare the
19 "urn:inverse:params:xml:ns:inverse-dav" xml ns.
20 ([SOGoUserFolder -foldersOfType:folderTypeforUID:uid]): new method
21 designed to replace the UIxContactFoldersView.m mechanism for
22 displaying folders to subcribe to, as a common code base for both
23 Web and DAV-based subscriptions.
24 ([SOGoUserFolder -foldersOfType:typematchingUID:uid]): same as
26 ([SOGoUserFolder -davCollectionQuery:queryContext]): new method
27 that implement a custom DAV-based protocol query for querying
28 folder based on specified attributes.
30 2007-12-03 Ludovic Marcotte <ludovic@inverse.ca>
32 * Main/NSException+Stacktrace.{h,m} - new files
33 to handle automatic stack trace generation
34 upon an uncaught exception.
36 * Updated the templates and Localizable.string files
37 to fix typos and add new strings.
39 * SoObjects/Mailer/SOGoMailBodyPart.m
40 Fixed attachment retreival when the first character
43 * SoObjects/SOGo/SOGoGCSFolder.m
44 Fixed the sending of emails when folders are created/removed.
45 Notifications are sent if the defaults SOGoFoldersSendEMailNotifications
48 * UI/Common/UIxUserRightsEditor.m
49 * UI/Templates/SOGoACLEnglishModificationAdvisory.wox
50 * UI/Templates/SOGoACLFrenchModificationAdvisory.wox
51 * UI/Templates/SOGoACLGermanModificationAdvisory.wox
52 Added the capabilities to email notifications when ACLs have
53 changed on a DAV collection or an IMAP mailbox. Also added
54 new templates (3 .wox) to deal with this.
56 * UI/WebServerResources/ContactsUI.js
57 UI/WebServerResources/SchedulerUI.js
58 Added warnings on operations w/o selection.
60 2007-11-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
62 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
63 -appendSubscribedSources]): don't include sources for which we
64 don't have the SOGoPerm_AccessObject permission.
66 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
67 -rfc822DateString]): we want positive timezones to be specified
68 with a leading "+" too.
70 2007-11-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
72 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
73 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
74 return nil if the subscribed folder has no display name (meaning
77 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
78 -appendPersonalSources]): don't include sources which are no
81 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
82 -ocsPathOfContainer]): return the intended value, not that of
85 * SoObjects/Appointments/SOGoCalendarComponent.m
86 ([SOGoCalendarComponent -sendResponseToOrganizer]): send the
87 message only of sendEMailNotifications is set.
89 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -subscriptionRoles]):
90 new method that returns the roles that qualifies for adding the
91 special "authorized subscribed" sogo role.
93 2007-11-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
95 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
96 -aclsForUser:uid]): copy all the roles from the container. If the
97 object is new, make sure the roles contain "ObjectEditor" if and
98 only if "ObjectCreator" is present.
100 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
101 -aclsForUser:uid]): no longer take the "ObjectReader" role into
104 * UI/Common/UIxFolderActions.m ([UIxFolderActions
105 -canAccessContentAction]): always return HTTP status 204. We want
106 this because we are relying on the SOPE access control manager to
107 grant access to this method. This requires a fine-tuned access
108 control in SOGo itself...
110 * UI/Contacts/UIxContactsUserRightsEditor.m ([-userCanReadObjects])
111 ([-setUserCanReadObjects:userCanReadObjects]): removed methods.
113 * UI/MailerUI/UIxMailUserRightsEditor.m ([UIxMailUserRightsEditor
114 -updateRights]): no longer take the "ObjectReader" role into account.
115 ([-userCanReadMails], [-setUserCanReadMails:userCanReadMails]):
118 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
119 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): specify context
120 when looking up the Calendar folder.
122 2007-11-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
124 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): same as below.
126 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
127 -event]): create the event if it doesn't exist.
129 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -userHasCalendarAccess])
130 ([UIxPreferences -userHasMailAccess]): same as below, for
131 displaying preference tabs.
133 * UI/Common/UIxPageFrame.m ([UIxPageFrame
134 -userHasCalendarAccess]): new accessor for the link banner.
135 ([UIxPageFrame -userHasMailAccess]): same as above.
137 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
138 -toManyRelationshipKeys]): do not report the path to modules to
139 which the user has no access. No longer cache this information
140 statically, the array will be generated at each call.
141 ([SOGoUserFolder -lookupName:_keyinContext:_ctxacquire:_flag]):
142 ignore the path to modules to which the user has no access.
144 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -canAccessModule:module]):
145 new method that returns whether the user has access to the
148 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
149 -initFromUDSource:udSource]): take a new parameter named
150 'ModulesContraints' that defines a set of constraints for
151 accessing specified named modules. This is an optout, meaning the
152 modules will be present unless a constraint is specified.
154 * SoObjects/Appointments/SOGoAppointmentFolder.m
155 ([SOGoAppointmentFolder
156 -roleForComponentsWithAccessClass:accessClassforUser:uid]): cache
157 acl to reduce method calls.
158 ([SOGoAppointmentFolder
159 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
160 if the user is not the current user, we strip the useless info
163 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
164 -labelForKey:key]): new category method.
166 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
167 -event]): same as below.
169 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): request a
170 secured version of the component.
172 * UI/MailPartViewers/UIxMailPartViewer.m
173 ([-fallbackStringEncoding]): removed method.
174 ([UIxMailPartViewer -flatContentAsString]): we no longer use [self
175 fallbackStringEncoding]. Instead we directly specify
176 NSISOLatin1StringEncoding if UTF-8 has failed.
178 * UI/MailPartViewers/UIxMailPartICalViewer.m
179 ([-fallbackStringEncoding]): removed method.
181 2007-11-25 Ludovic Marcotte <ludovic@inverse.ca>
183 * SoObjects/Mailer/SOGoMailForward.m
184 Use [sourceMail decodedSubject] instead of [sourceMail subject]
185 Signature fix in -signature - see the comment
188 * SoObjects/Mailer/SOGoMailObject.m
189 Improved -stringFromData: to try UTF-8 then fallback to Latin1
191 * SoObjects/Mailer/SOGoMailReply.m
192 Modified -messageBody to strip the signature from the reply.
193 Also modified -signature to add "-- \n%@" instead of the
194 broken ""--\r\n%@" pattern.
196 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m
197 We now favor text/calendar parts over text/html and
198 text/plain parts when viewing a multipart/alternative mail.
199 This allows us to show the email invitations coming from
202 * UI/MailerUI/UIxMailAccountActions.m
203 Signature fix in -composeAction - see the comment
206 * UI/MailPartViewers/UIxMailPartViewer.m
207 Modified -flatContentAsString to use UTF-8 as the
208 default fallback encoding for 8-bit content.
210 * SoObjects/Mailer/SOGoDraftObject.m
211 Modified _fillInReplyAddresses:replyToAll:envelope:
212 so that if there's no recipient, we add at least
214 Fixed a mem leak in the same method.
216 2007-11-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
218 * UI/MailPartViewers/UIxMailRenderingContext.m
219 ([UIxMailRenderingContext -viewerForBodyInfo:_info]): same as below.
221 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
222 -plainTextContentFetchKeys]): same as below.
224 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
225 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): accept the
226 application/ics type from Google Calendar.
228 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
229 +distantFuture]): rewrote method to return an object that is
230 compatible with NSCalendarDate, unlike the implementation in
232 ([NSCalendarDate +distantPast]): same as above.
234 2007-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
236 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: fixed infinite loop
237 when charset is us-ascii, match it to ascii rather than none.
239 * SoObjects/Appointments/SOGoAppointmentFolder.m
240 ([SOGoAppointmentFolder
241 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
242 added search on the c_title column too.
244 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
245 -eventsListAction]): take the "search" url parameter into account.
246 ([UIxCalListingActions -eventsListAction]): fetch events matching
247 the title filter too.
249 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -connectAction]): the
250 user infos are now posted as "application/x-www-form-urlencoded".
251 So we have to have like a form has been posted.
253 2007-11-21 Francis Lachapelle <flachapelle@inverse.ca>
255 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
256 -calendarList]): also returns the calendar of the current
257 event. This is required so the proper calender is selected when
258 you view an event to which you don't have write access.
260 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
261 also returns true for super users.
263 2007-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
265 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
266 -lookupImap4BodyPartKey:inContext:]): return a correct body part
267 when "0" is requested, taking its mime-type into account.
269 * UI/MailPartViewers/UIxMailRenderingContext.m
270 ([UIxMailRenderingContext -flatContentForPartPath:_partPath]):
271 return content for part "0", which would be the message body.
273 2007-11-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
275 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
276 ([_UIxHTMLMailContentHandler
277 -setContentEncoding:newContentEncoding]): new method that
278 specifies an xml charset to return to the parser.
279 ([UIxMailPartHTMLViewer -flatContentAsString]): specifies the
280 charset to the content handler before parsing.
282 * SoObjects/Appointments/SOGoAppointmentObject.m: don't take an
283 empty c_name as a valid response when looking up an event. Create
284 one in that case instead.
286 2007-11-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
288 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -signature]):
289 returns the signature for the default identity of the default
291 ([UIxPreferences -setSignature:newSignature]): accessor that sets
292 the default signature.
294 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
295 -composeAction]): append the message signature to the new draft.
297 * SoObjects/Mailer/SOGoMailReply.m ([SOGoMailReply -signature]):
300 * SoObjects/Mailer/SOGoMailForward.m ([SOGoMailForward
301 -signature]): new method that takes the user's signature and put
302 it at the end of the message, if exists.
304 * UI/Common/UIxPageFrame.m ([UIxPageFrame -isSuperUser]): new
305 accessor that forwards the call to the active user.
307 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -signature]): returns the
308 user default signature.
309 ([SOGoUser -isSuperUser]): declares whether the user is listed
310 among the super users.
312 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
313 -setComponent:newComponent]): retain the component object.
314 ([UIxComponentEditor -organizerIdentity]): new accessor method to
315 handle list of possible organizers.
317 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
318 -event]): retain the returned event object.
320 * SoObjects/Appointments/SOGoAppointmentObject.m
321 ([SOGoAppointmentObject -saveComponent:newEvent]): reset the
322 organizer only if there are no attendees AND the owner of the
323 component is not the organizer him-/herself.
325 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
326 -toolbar]): rewrote in a way that ensures that each case is
329 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -isEqual:otherUser]): new
332 * UI/Scheduler/UIxTaskEditor.m ([-acceptAction])
333 ([-declineAction]): commented out unused methods.
335 * UI/MailPartViewers/UIxMailPartICalActions.m
336 ([UIxMailPartICalActions -deleteFromCalendarAction]): actually
337 delete the found object.
339 2007-11-18 Ludovic Marcotte <ludovic@inverse.ca>
341 * SoObjects/Mailer/SOGoMailBodyPart.m
342 SoObjects/Mailer/SOGoMailObject.m
343 UI/MailPartViewers/UIxMailPartViewer.m
344 Added support of messages containing non-textual
345 content and no parts.
347 * UI/MailerUI/UIxMailView.m
348 SoObjects/Mailer/SOGoMailObject.m
349 UI/Templates/MailerUI/UIxMailView.wox
350 Added support for the Reply-To header upon
353 2007-11-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
355 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]):
356 invoke saveComponent:.
358 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -hasOrganizer])
359 ([UIxComponentEditor -organizerName]): new template accessor
360 related to displaying the event's organizer.
361 ([-containsConflict:_component]): removed method.
362 ([UIxComponentEditor -takeValuesFromRequest:_rqinContext:_ctx]):
363 set RSVP to "TRUE" on each attendee.
365 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
366 -saveAction]): invoke saveComponent:.
368 * UI/MailPartViewers/UIxMailPartICalViewer.m
369 ([UIxMailPartICalViewer -isLoggedInUserTheOrganizer]): make use of
370 the -userIsOrganizer: category method.
371 ([-isLoggedInUserAnAttendee]): make use of -userIsParticipant:.
372 ([UIxMailPartICalViewer -hasSenderStatusChanged]): new template
373 accessor that determines whether the "Update" button should be
376 * UI/MailPartViewers/UIxMailPartICalActions.m
377 ([UIxMailPartICalActions -deleteFromCalendarAction]): implemented
379 ([UIxMailPartICalActions -updateUserStatusAction]): implemented
382 * UI/Common/UIxPageFrame.m ([UIxPageFrame
383 -setCssFiles:newCSSFiles]): new accessor that enables the
384 sub-templates to specify extra CSS files to load.
386 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
387 -homeFolderInContext:context]): cache the home folder of the user
388 object instead of the current user.
390 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
391 -deleteEntriesWithIds:ids]): invokes the "prepareDelete" optional
392 method if the child object implements it.
394 * SoObjects/SOGo/SOGoContentObject.m ([-setContentString:])
397 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
398 -setBaseDN:newBaseDNIDField:newIDFieldCNField:newCNFieldUIDField:newUIDFieldmailFields:newMailFieldsandBindFields:newBindFields]):
399 take a new "mailFields" parameter defining an array of fields
400 where to look at when searching the user's emails. It defaults to
401 the standard "mail" LDAP field.
403 * SoObjects/Appointments/SOGoAptMailICalReply.[hm]: new
404 SoComponent implementing a template for ITIP replies.
406 * SoObjects/Appointments/iCalPerson+SOGo.m ([iCalPerson
407 -mailAddress]): new method that returns a properly formatted email
408 address for the specified person entry.
409 ([iCalPerson -uid]): new method that tests whether the user is
410 known to the system and if so, returns its user id.
412 * SoObjects/Appointments/iCalPerson+SOGo.[hm]: new category module.
414 * SoObjects/Appointments/iCalEventChanges+SOGo.m
415 ([iCalEventChanges -sequenceShouldBeIncreased]): determine whether
416 the changes involved need a sequence inscrease, based on the
419 * SoObjects/Appointments/iCalEventChanges+SOGo.[hm]: new category
422 * SoObjects/Appointments/iCalEvent+SOGo.m ([iCalEvent
423 -isStillRelevant]): new overriden method determining the relevance
424 of the current event based on its end date.
426 * SoObjects/Appointments/iCalEvent+SOGo.[hm]: new category module.
428 * SoObjects/Appointments/iCalEntityObject+SOGo.m
429 ([iCalEntityObject -attendeeUIDs]): new category methods that
430 returns an array containing the uids of the system-know attendees.
431 ([iCalEntityObject -isStillRelevant]): new template method.
432 ([iCalEntityObject -itipEntryWithMethod:method]): clone the
433 current entry calendar with the specified ITIP method.
434 ([iCalEntityObject -attendeesWithoutUser:user]): returns an array
435 of attendees while making sure the specified user is not listed.
437 * SoObjects/Appointments/SOGoCalendarComponent.m
438 ([SOGoCalendarComponent -calendar:create:secure]): new name for
439 -calendar:. Added a "secure" parameter that specifies whether a
440 stripped calendar instance is needed or not. Also, we no longer
441 cache the content to simplify handling of new data.
442 ([SOGoCalendarComponent -component:create:secure]): same as above.
443 ([SOGoCalendarComponent
444 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
445 test whether the component is "still relevant" before sending an
447 ([SOGoCalendarComponent -sendResponseToOrganizer]): new method for
448 sending ITIP replies.
449 ([SOGoCalendarComponent -getUIDsForICalPerson:iCalPerson]):
450 removed method. Replaced with -[iCalPerson uid] category method.
452 * SoObjects/Appointments/SOGoAppointmentObject.[hm]: rewrote
453 class. No longer override saveContentString:,
454 saveContentString:baseSequence:, .... Implemented the
455 saveComponent: and the prepareDelete methods instead. Those
456 methods are called only from the web methods. This avoids the
457 risks related to email sending and changes propagation.
459 * UI/Common/UIxTabItem.m: removed useless class module.
461 * UI/Common/UIxTabView.[hm]: removed useless class module.
463 * UI/Common/UIxPrintPageFrame.m: removed useless class module.
465 * UI/Common/UIxAppNavView.m: removed useless class module.
467 2007-11-16 Ludovic Marcotte <ludovic@inverse.ca>
469 * SoObjects/Mailer/SOGoMailBaseObject.m
472 * SoObjects/Mailer/SOGoMailBodyPart.m
473 We also grok image/jpeg and return the SOGoMailBodyPart
474 for attachments fetching.
476 * SoObjects/Mailer/SOGoMailObject+Draft.m
477 Prevent a crash in case body decoding failed during
480 * SoObjects/Mailer/SOGoMailObject.m
481 Improved body decoding during a reply to also try
482 latin1 as an encoding.
484 * UI/MailPartViewers/UIxMailRenderingContext.m
485 Greatly improved the display mechanisms for emails.
486 Also properly consider the content disposition for
489 * UI/MailerUI/UIxMailToSelection.m
490 Removed worthless code.
492 * UI/WebServerResources/MailerUI.css
493 CSS fix for table views.
495 2007-11-15 Ludovic Marcotte <ludovic@inverse.ca>
497 * UI/WebServerResources/MailerUI.js
498 We now check for empty selection and warn the
499 user about it when deleting messages
501 * SoObjects/Mailer/SOGoDraftObject.m
502 Correctly check for the presence of a subject
503 before attempting to forward a message from
506 * SoObjects/Mailer/SOGoMailObject+Draft.m
507 We no longer use "[Fwd: ]" but simply "Fwd:"
508 when forwarding email messages.
510 * SoObjects/SOGo/SOGoUser.m
511 Modified the default forwarding format to be
512 inline instead of "attachment".
514 * SoObjects/Mailer/SOGoDraftObject.m
515 We now create and use a NGMimeContentDispositionHeaderField
516 in order to avoid encoding the whole Content-Disposition
517 header in case a non-ASCII char is present!
519 2007-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
521 * SoObjects/SOGo/iCalEntityObject+Utilities.m ([iCalEntityObject
522 -findParticipant:user]): new method based on the one removed from
523 SOGoCalendarComponent below.
525 * SoObjects/SOGo/iCalEntityObject+Utilities.[hm]: new category
526 module for iCalEntityObject.
528 * SoObjects/Appointments/SOGoCalendarComponent.m
529 ([-findParticipant:user]): removed method.
531 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
532 -setContentString:newContent]): new accessor method.
534 -saveContentString:newContentbaseVersion:newBaseVersion]): invoke
535 -[self setContentString:].
537 * UI/MailPartViewers/UIxMailPartICalViewer.m
538 ([UIxMailPartICalViewer -authorativeEvent]): returns the most
540 ([-isLoggedInUserTheOrganizer]): make use of -[SOGoUser
543 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
544 -stringByConvertingCRLNToHTML]): fixed crashes due to overflows in
545 temporary buffer we are handing.
547 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
548 -setComponent:newComponent]): check that newComponent is non-nil
549 before replacing the default values.
550 ([UIxComponentEditor -calendarList]): privacy is already an ivar.
551 We don't need to refetch it.
553 2007-11-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
555 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
556 -fetchMailForReplying:sourceMailtoAll:toAll]): remove the current
557 user from the list of recipients and make sure no other address is
560 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
561 -stringByConvertingCRLNToHTML]): build the returned NSString
562 without the ending \0.
564 2007-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
566 * UI/MailPartViewers/UIxMailPartICalViewer.m
567 ([UIxMailPartICalViewer -acceptLink])
568 ([UIxMailPartICalViewer -declineLink])
569 ([UIxMailPartICalViewer -tentativeLink]): removed useless methods.
571 * UI/MailPartViewers/UIxMailPartICalAction.m
572 ([UIxMailPartICalAction -addToCalendarAction])
573 ([UIxMailPartICalAction -deleteFromCalendarAction]): new stub
576 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
577 -lookupImap4BodyPartKey:]): make use of the new method below.
579 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
580 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): new method
581 that returns an appropriate Class depending on a given mime type.
583 * UI/SOGoUI/UIxComponent.m ([UIxComponent -canCreateOrModify]):
584 new boolean accessor that determines whether someone can create
585 (i.e. modify a new entry) or modify an existing entry.
587 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
588 -lookupName:lookupNameinContext:localContextacquire:acquire]):
589 overriden method to bind looked up keys to So methods but by
590 avoiding a call to toOneRelationshipKeys. This will be the top
591 method of the chain, meant to override SoObject's behaviour.
593 * SoObjects/Contacts/SOGoContactLDAPFolder.m
594 ([SOGoContactLDAPFolder
595 -lookupName:objectNameinContext:lookupContextacquire:acquire]):
596 removed hack to prevent [super lookupName...] to read the entire
597 LDAP directory when looking up a record.
599 2007-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
601 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
602 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
605 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
606 ([UIxMailPartHTMLViewer -_attachmentIds]): the reference was one
607 character too short, which cause the images not to be displayed
608 sometimes and crashes to happen whenever the references on a
609 message were wrong (due to bugs in SOPE).
611 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
612 -hasMessageAttachment]): consider an attachment any content that
613 has a non-nil disposition.
615 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
616 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
617 fixed method to make use of the parameters instead of the useless
618 remains that weren't even initialized.
620 * SoObjects/Appointments/SOGoAppointmentObject.m
621 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
622 don't propagate the event among the attendees if this is not an
624 ([SOGoAppointmentObject -deleteWithBaseSequence:]): same as above.
626 * Main/SOGo.m ([SOGo -authenticatorInContext:context]): make use
627 of the new category method below.
629 * SoObjects/SOGo/WORequest+SOGo.m ([WORequest
630 -handledByDefaultHandler]): new method that returns whether this
631 is an "so" or alike request.
633 * SoObjects/SOGo/WORequest+SOGo.[hm]: new category module.
635 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
636 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
637 write the new folder's name in the folder cache.
639 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
640 -calendars]): same as below.
642 * UI/Contacts/UIxContactsListViewContainer.m
643 ([UIxContactsListViewContainer -currentContactFolderName]):
644 translate the display name if its the default one.
646 * SoObjects/Appointments/SOGoAppointmentFolder.m
647 ([SOGoAppointmentFolder -create]): overriden method that invokes
648 its ancestor and then activate itself within the user settings.
650 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
651 -appendPersonalSources]): when the user is the owner of the
652 current folder, we create the "personal" folder if it doesn't
653 exist by invoking "create".
655 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
656 -primaryFetchProfile]): when no row is returned, we initialize
657 "values" to a new dictionary. This solves a bug where the defaults
658 would not be initialized properly.
660 2007-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
662 * SoObjects/SOGo/SOGoGCSFolder.m ([-compare:otherFolder]): method
663 moved into the SOGoFolder class.
665 * SoObjects/Appointments/SOGoAppointmentObject.m
666 ([SOGoAppointmentObject -saveContentString:_iCalinUIDs:_uids]):
667 simplified method by directly building a similar appointment
668 object with the current folder as container.
670 * SoObjects/Contacts/SOGoContactLDAPFolder.m
671 ([SOGoContactLDAPFolder
672 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
673 take the content of an object returned by
674 lookupName:inContext:acquire: instead of the dictionary passed as
675 parameter since it represents a flattened entry return by
676 lookupContactsWithFilter...
678 * SoObjects/Contacts/SOGoFolder+CardDAV.m: NSObject+CardDAV
679 category renamed to SOGoFolder+CardDAV.
681 * SoObjects/SOGo/SOGoParentFolder.m: no longer a subclass of
682 SOGoObject, but of SOGoFolder instead.
684 * SoObjects/SOGo/SOGoUserFolder.m: no longer a subclass of
685 SOGoGCSFolder, but of SOGoFolder instead.
687 * SoObjects/Appointments/SOGoAppointmentFolder.m
688 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): fixed
689 to take the new SOGoParentFolder class into account. Also, create
690 the personal folder if it doesn't exist.
692 * SoObjects/SOGo/SOGoFolder.[hm]: new class module implementing
693 the parent of all SOGo containers.
695 * SoObjects/SOGo/SOGoGCSFolder.[hm]: SOGoFolder class renamed to
698 2007-11-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
700 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection
701 -getAddressesFromFormValues:_dict]): take NSString and NSArray
702 values. Ignore addresses with a length of 0.
704 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -mailAccounts]): we now
705 fetch the accounts from the user defaults and create default
708 2007-11-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
710 * UI/MailPartViewers/UIxMailPartTextViewer.m
711 ([UIxMailPartTextViewer -flatContentAsString]): re-added
712 conversion of line-break to sequences of HTML "BR", with a fast
715 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
716 -flatContentAsString]): simplified method now that we know
717 -[NSString stringWithData:usingEncodingNamed:] has a more robust
720 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
721 -showToAddress]): the answer is cached.
723 * UI/Common/UIxObjectActions.m ([UIxObjectActions +initialize]):
724 read "SOGoACLsSendEMailNotifications" from the user defaults to
725 determiner whether to send an email when a user is added or
726 removed from an object's acl.
728 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
729 -contentForEditing]): make sure the htmlContent flag is set to NO
730 when we select the textual part. Also we select only the relevant
733 * UI/MailerUI/WOContext+UIxMailer.m ([-mailSubjectFormatter]):
736 * UI/MailerUI/UIxMailView.m ([UIxMailView -messageSubject]): new
737 method replacing -objectTitle, written like the ones below.
739 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
740 -messageSubject]): rewrote method to act the one below.
742 * UI/MailPartViewers/UIxMailPartMessageViewer.m
743 ([UIxMailPartMessageViewer -messageSubject]): new method that
744 returns the decoded mail subject or "Untitled" if the subject is
747 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
748 -decodedSubject]): new method that invoke -decodedSubject from the
749 NSString and NSData class, depending on the identity of the
750 subject obtained from the envelope.
752 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
753 -subjectForReply]): take the value of -[SOGoMail decodedSubject]
754 instead of the subject of the envelope.
755 ([SOGoMailObject -filenameForForward]): same as above.
756 ([SOGoMailObject -subjectForForward]): same as above.
758 * SoObjects/Mailer/NSString+Mail.m ([NSString -decodedSubject]):
759 same as below for NSString.
761 * SoObjects/Mailer/NSData+Mail.m ([NSData -decodedSubject]): new
762 method that decodes the subject of a mail taken as an NSData
763 instance. Handling the exceptions and the badly formatted headers.
765 * UI/MailerUI/UIxSubjectFormatter.[hm]: dropped class module.
767 2007-11-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
769 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
770 -deleteEntriesWithIds:ids]): make sure the objects returned by
771 lookupName:... are not instances of NSException.
773 2007-11-03 Ludovic Marcotte <ludovic@inverse.ca>
775 * UI/Scheduler/UIxAppointmentEditor.m
776 Fixed monthly recurrences support.
778 2007-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
780 * SoObjects/Appointments/SOGoAppointmentObject.m
781 ([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
782 sent when modifying an event, when the event was considered
783 relevant. The same thing is now implemented for event deletion.
785 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
786 -primaryFetchProfile]): make sure that the deserialized "values"
787 is an instance of NSMutableDictionary, otherwise we override it
790 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
791 -contentForReply]): make use of the SOGoMailReply WO page.
793 * SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
794 from SOGoMailForward to handle mail replies instead. Only three
795 methods remaining: date, from and messageBody. The latter is
798 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
799 -fetchMailForForwarding:sourceMail]): fetch attachments for
802 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
803 -hasMessageAttachment]): initialize hasAttachment with "NO" to
804 avoid false positives.
806 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
807 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
808 set title to an empty string where the event/task summary is null.
810 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
811 -setHeaders:newHeaders]): make sure there is a message id in the
812 headers dictionary, if not, generate one.
813 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
814 message id from the existing draft.
815 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
816 message id in the header map.
818 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
819 -deleteFolderAction]): no longer prefix the target folder with
822 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
823 -listMailboxesAction]): base the folder type on the folder
826 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
827 -lookupName:_keyinContext:acquire:_acquire]): compare the full
828 traversal to the potential looked up folder with the special
829 folder names and return an object with the appropriate
830 SOGoMailFolder subclass.
832 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
833 -traversalFromMailAccount]): don't prepend the whole string with
836 * SoObjects/Mailer/SOGoMailAccount.m
837 ([-lookupSentFolder:_keyinContext:_ctx])
838 ([-lookupDraftsFolder:_keyinContext:_ctx])
839 ([-lookupTrashFolder:_keyinContext:_ctx])
840 ([-lookupFiltersFolder:_key:_ctx]): removed methods.
841 ([SOGoMailAccount -inboxFolderNameInContext:])
842 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
843 ([SOGoMailAccount -sentFolderNameInContext:])
844 ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
845 the resulting name with "prefix" since we might return a nested
847 ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
848 names with "/". Sorts the resulting folder list with
849 localizedCaseInsensitiveCompare: instead of
850 caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
851 that were removed, instead, we choose the appropriate class
852 depending on the folder name. And since we are in SOGoMailAccount,
853 we don't have to compute a traversal path to match the key with
856 -folderWithTraversal:traversalandClassName:className]): new method
857 that returns an instance of the specified SOGoMailFolder subclass,
858 based on the traversal path passed as parameter.
859 ([SOGoMailAccount -inboxFolderInContext:_ctx])
860 ([SOGoMailAccount -draftsFolderInContext:_ctx])
861 ([-sentFolderInContext:_ctx])
862 ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
863 -folderWithTraversal:andClassName: method described above.
865 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
866 -primaryFetchProfile]): make use of -[NSPropertyListSerialization
867 propertyListFromData:mutabilityOption:format:errorDescription:] to
868 deserialize the plist. Removed variant for libFoundation since it
869 should support the above.
870 ([AgenorUserDefaults -generateSQLForInsert])
871 ([AgenorUserDefaults -generateSQLForUpdate]): make use of
872 -[NSPropertyListSerialization
873 dataFromPropertyList:format:errorDescription:] to serialize the
874 plist. Removed variant for libFoundation since it should support
875 the above. Escape the backslashes from the resulting string.
877 2007-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
879 * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
880 SOGoMailFolder: SOGoMailSpecialFolder.
882 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
883 -traversalFromMailAccount]): overridden method that returns the
884 initialized mutable string.
885 ([SOGoMailAccount -allFolderPaths]): take the special folder paths
886 with -traversalFromMailAccount and reposition them at the
887 beginning of the list. By creating the special folders during that
888 request, we also make sure that the folder exists thanks to the
889 new initialisation method of the new "SOGoSpecialMailFolder"
891 ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
893 ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
895 ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
896 longer use lookupImap4Folder.
897 ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
900 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
901 -traversalFromMailAccount]): new method that returns the full
902 IMAP4 path to the object.
904 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
905 "superUsernames" after fetching it from the ud.
907 2007-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
909 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
910 -eventsListAction]): substitude the start and end date with their
911 UTC counterpart, taking into account the offset from UTC related
912 to those dates instead of the current one. This renders
913 -[UIxCalMainView -userUTCOffset] obsolete because the computings
914 that occured in javascript are now done server-side.
916 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
917 removed obsolete method.
919 * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
920 method converting html content to plain text.
922 * SoObjects/Mailer/NSString+Mail.[hm]: new category module
923 enhancing NSString with utility methods pertaining to mail handling.
925 * SoObjects/Mailer/SOGoMailObject.m
926 ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
928 -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
929 modified method to be always recursive and to take an array of the
930 accepted mime-types as parameter. The returned array now contains
931 the mime-type as well as the part keys.
933 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
934 -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
935 ([SOGoMailObject -contentForEditing]): rewrote method to take into
936 account the first text/plain part or the first text/html part
937 converted to text/plain with our new -[NSString htmlToText]
940 * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
941 "replyToAll:" with YES as parameter instead of NO.
943 2007-10-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
945 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
946 -davContentType]): ignore any possible parameter taken from the
947 mime-info of the body part.
949 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
950 -lastFirstMessageNumber]): new accessor that returns the first
951 message number of the last series of messages.
952 ([UIxMailListView -fetchKeys]): request the bodystructure for each
954 ([UIxMailListView -hasMessageAttachment]): extract the attachment
955 information from the message bodystructure.
957 2007-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
959 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
960 -GETAction:]): use the "application/octet-stream" mime type for
961 elements of type "application/x-xpinstall" to avoid confusing
964 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
965 ([UIxPreferences -itemMessageCheckText])
966 ([UIxPreferences -userMessageCheck])
967 ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
968 methods for handling the retrieval of new messages automatically.
970 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
971 that returns the interval of time between automatic message
974 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
975 -defaultAction]): now expunges the last folder marked for expunge.
977 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
978 -trashInContext:_ctx]): now marks the container folder for
981 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
982 -markForExpunge]): new method that marks the folder for the next
983 automatic expunge operation in the user settings.
984 ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
985 takes the last folder marked for expunge, expunges it and removes
986 it from the user settings, if it exists.
988 2007-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
990 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
991 -messageSubjectCellStyleClass]): added support for replied,
992 forwarded, forwarded and replied mails.
994 * SoObjects/Mailer/NSData+Mail.m ([NSData
995 -bodyDataFromEncoding:encoding]): new utility method that decodes
996 the NSData instance properly depending on the encoding string
999 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1000 -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
1002 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1003 -stringForData:_datapartInfo:_info]): simplified by invoking
1004 -bodyDataFromEncoding: from our new NSData category methods.
1006 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1007 -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
1008 where only the body part of the first of the keys fetched was
1009 returned. Also decodes the body parts properly following their
1012 * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
1013 extends the NSData class with utility methods useful for handling
1016 2007-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1018 * SoObjects/SOGo/NSArray+Utilities.m
1019 ([NSArray -stringsWithFormat:format]): replace instances of NSNull
1022 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1023 -keysWithFormat:keyFormat]): replace instances of NSNull with
1026 * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
1027 empty, use "c_cn" instead.
1029 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1030 ([SOGoMailAccount -draftsFolderInContext:_ctx])
1031 ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
1032 of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
1033 no always be specified from the root instead of sometimes from the
1036 2007-10-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1038 * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
1039 ([UIxPageFrame -productLocalizableStrings]): invoke the new
1040 +[SOGoUser language] method if the user is nil.
1042 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
1043 that returns any generically-found language.
1044 ([SoUser -language]): modified to call the above.
1045 ([SOGoUser -language]): modified to call the above if the user
1046 language has a null length.
1048 * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
1049 -davEntityTag]): modified to return the "hash" of the vCard string.
1051 * UI/MailerUI/UIxMailActions.m ([UIxMailActions
1052 -removeAllLabelsAction]): new method that removes all label flags
1053 from the associated message.
1054 ([UIxMailActions -addLabel1Action]
1055 [UIxMailActions -addLabel2Action]
1056 [UIxMailActions -addLabel3Action
1057 [UIxMailActions -addLabel4Action]
1058 [UIxMailActions -addLabel5Action]): new methods that adds label
1059 flags to the associated message.
1060 ([UIxMailActions -removeLabel1Action]
1061 [UIxMailActions -removeLabel2Action]
1062 [UIxMailActions -removeLabel3Action
1063 [UIxMailActions -removeLabel4Action]
1064 [UIxMailActions -removeLabel5Action]): new methods that removes
1065 label flags from the associated message.
1067 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
1068 new accessor that returns the labels associated with the message.
1070 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1071 -allFolderPaths]): new method that returns all the paths of all
1072 the subfolders of the folder object.
1073 ([SOGoMailFolder -allFolderURLs]): new method replacing
1076 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1077 -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
1078 role from its parent folder.
1080 2007-10-19 Francis Lachapelle <flachapelle@inverse.ca>
1082 * SoObjects/SOGo/SOGoUser.m
1083 ([SOGoUser -rolesForObject:objectinContext:context]): allow
1084 multiple super usernames to be defined. The user default
1085 SOGoSuperUsername is renamed SOGoSuperUsernames and must be
1088 2007-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1090 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1091 -userInContext:]): override the super method by returning
1092 anonymous if the super returns nil.
1094 * UI/Common/UIxPageFrame.m ([UIxPageFrame
1095 -productLocalizableStrings]): new method that returns the
1096 product-specific translation dictionary as a JSON hash.
1097 ([UIxPageFrame -commonLocalizableStrings]): same as above but for
1098 the "Common" framework.
1099 ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
1100 the requestor components to require additional Javascript files.
1101 This is useful now that all the scripts are loaded at the end of
1103 ([UIxPageFrame -additionalJSFiles]): new getter related to the
1106 2007-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1108 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
1109 implemented new web method.
1111 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1112 -copyToFolderNamed:folderNameinContext:]): new method with the
1113 code cut/pasted from -moveToFolderNamed:inContext:.
1114 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
1115 modified to use the code from -copyToFolderNamed:inContext:, which
1116 is common between the two actions.
1118 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1119 ([SOGoMailAccount -sentFolderNameInContext:])
1120 ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
1121 the user settings into account.
1123 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
1124 ([UIxMailFolderActions -setAsSentFolderAction])
1125 ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
1126 that change the purpose of the active folder to "Sent", "Drafts"
1129 * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
1130 returns the subject as quoted-printable.
1132 * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
1133 SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
1134 the "aclMethod" method for the subsequent language-dependent
1137 * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
1138 returns the subject as quoted-printable.
1140 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1141 -dealloc]): release item, aptStartDate and aptEndDate.
1143 2007-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1145 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1146 -initWithName:newNameinContainer:newContainer]): the owner of a
1147 shared folder is set to "nobody" by default.
1149 * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
1150 that returns whether the object has an owner or not.
1152 2007-10-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1154 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1155 the folder even if the current user is not its owner.
1157 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
1159 * We now send advisory emails when folders
1160 are created / deleted.
1162 * Fixed the sending of advisory emails upon
1163 ACL changes on folders.
1165 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
1167 * UI/Scheduler/UIxComponentEditor.m
1168 Implemented event/task priority support.
1170 * SoObjects/Contacts/SOGoContactGCSFolder.m
1171 Added CardDAV support.
1173 * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
1174 Implemented From: based on LDAP results based on
1175 the MailFieldNames attribute (an array) specified
1176 in every LDAP-based authentication sources.
1178 * UI/MailPartViewers/UIxMailPartTextViewer.m and
1179 UI/WebServerResources/MailerUI.css
1180 We avoid replacing "\r\n" and "\n" with <br /> and
1181 rather use CSS capabilities for proper formatting.
1182 This is _WAY_ faster on very large mails.
1184 2007-10-10 Francis Lachapelle <flachapelle@inverse.ca>
1186 * UI/Scheduler/UIxComponentEditor.m
1187 ([UIxComponentEditor -componentCalendar]): returns the calendar
1188 object of the current event.
1190 2007-10-05 Ludovic Marcotte <ludovic@inverse.ca>
1192 * UI/WebServerResources/MailerUI.js
1193 We check if at least one message is selected
1194 before performing a Reply/Reply All/Forward
1196 * SoObjects/Appointments/SOGoAppointmentFolder.m
1197 and others - implemented support for recurring
1198 events (with some known limitations right now,
1199 all soon to be fixed).
1201 2007-10-04 Francis Lachapelle <flachapelle@inverse.ca>
1203 * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
1204 the constraint that a username can't start with a digit.
1206 2007-10-02 Francis Lachapelle <flachapelle@inverse.ca>
1208 * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
1209 repository to Inverse's branch.
1211 2007-09-28 Francis Lachapelle <flachapelle@inverse.ca>
1213 * SoObjects/Mailer/SOGoDraftObject.m
1214 ([SOGoDraftObject -isValidAttachmentName:_name]): removed
1215 constraint on space in file name.
1216 ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
1217 now removes from file name all characters preceding a backslash.
1218 This happens with IE7 because the complete attachment file path
1221 2007-09-25 Francis Lachapelle <flachapelle@inverse.ca>
1223 * SoObjects/Appointments/SOGoAptMailNotification.m
1224 ([SOGoAptMailNotification -appointmentURL]): set personal as the
1225 default calendar where to add the event.
1227 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1228 activate the SOGoUIxDefaultModule user defaults.
1230 2007-09-21 Francis Lachapelle <flachapelle@inverse.ca>
1232 * UI/SOGoUI/UIxComponent.m
1233 ([UIxComponent -shortUserNameForDisplay]): returns the string
1234 "wrongusernamepassword" when authentication failed.
1236 2007-09-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1238 * UI/MailPartViewers/UIxMailPartICalViewer.m
1239 ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
1240 entry of the Calendars parent folder.
1242 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1243 -messageSubject]): new accessor method to work-around a problem
1244 within SOPE where a subject could be returned as an NSData.
1246 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1247 -appendPersonalSources]): make sure the value of the "c_path4" of
1248 the returned rows are not NSNull, otherwise, discard them.
1250 2007-09-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1252 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1253 -compare:otherFolder]): new overriden method that compares two
1254 contact foldes based on their class and then transfer the control
1255 to the super method in SOGoFolder.
1257 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1258 ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
1259 compare two contact folders based on their class and then their
1262 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
1263 new method for sorting folders. The folders are compared based on
1264 their ownership, whether they are a main folder and finally
1265 depending on their display name.
1267 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1268 -pathArrayToSOGoObject]): do not reorder the paths if the third
1269 element is an instance of NSNull.
1271 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1272 -subFolders]): returns a sorted array using the "compare:"
1275 2007-09-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1277 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1278 -calendars]): also returns the owner of the listed folders.
1280 * SoObjects/Appointments/SOGoAppointmentFolder.m
1281 ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
1283 * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
1284 method into UIxFolderActions.
1286 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1287 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
1288 freebusy info from the "personal" calendar.
1290 * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
1291 -createFolderAction]): new standardized method for requesting
1292 folder creations among gcs-based modules.
1294 * UI/Common/UIxParentFolderActions.[hm]: new action class module.
1296 * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
1297 module, equivalent to the SOGoParentFolder's child
1298 SOGoContactFolders, but for calendars.
1300 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
1301 method that returns translated strings for controller bundles
1302 (same as what UIxComponent does for view bundles).
1303 ([SOGoObject -pathArrayToSOGoObject]): new method that returns
1304 the real path to a subscribed folder (if subscribed).
1305 ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
1306 ([SOGoObject -globallyUniqueObjectId]): new instance method
1307 calling its class equivalent.
1309 2007-09-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1311 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
1312 whether the user is logged in and if so, redirect to his/her
1314 ([SOGoRootPage -appendToResponse:inContext:]): removed useless
1317 2007-09-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1319 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1320 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1322 ([SOGoFolder -displayName]): new method.
1323 ([SOGoFolder -delete]): accept to proceed only if nameInContainer
1326 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1327 ([SOGoContactLDAPFolder
1328 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1329 renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
1331 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1332 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1333 removed method, reimplemented in SOGoFolder.
1334 ([SOGoContactGCSFolder -displayName]): removed method,
1335 reimplemented in SOGoFolder.
1336 ([-delete]): removed method, modified in SOGoFolder.
1338 * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
1339 a subclass of SOGoParentFolder.
1341 * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
1342 from SOGoContactFolders and modified to be more content-independent.
1344 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
1345 ([UIxMailActions -markMessageReadAction]): new methods moved from
1346 UIxMailListView and adapted to invoke the client object directly,
1347 since the previous versions had to to a lookup from the parent
1350 * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
1351 method into UIxMailActions.
1352 ([-markMessageReadAction]): same as above.
1353 ([-viewAction]): removed useless method.
1354 ([-javaScriptOK]): removed useless method.
1355 ([-isJavaScriptRequest]): removed useless method.
1356 ([-lookupActiveMessage]): removed useless method.
1358 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1359 -responseWithStatus:status]): new method that returns a WOResponse
1360 initialized with the specified status code.
1361 ([WODirectAction -responseWith204]): new method that invokes the
1362 above one with "204" as parameter.
1363 ([WODirectAction -redirectToLocation:newLocation]): rewrote method
1364 to make use of -responseWithStatus:.
1366 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
1367 method that returns a WOResponse initialized with the 204 status
1370 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
1371 always use a "not deleted" search qualifier along with the user
1372 qualifier (if present).
1374 2007-09-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1376 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1377 -contactSearchAction]): only return the records which have an
1380 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1381 -trashInContext:_ctx]): no longer expunge the mailbox after
1382 marking a message deleted.
1383 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
1386 * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
1387 ([-trashAction]): moved method into UIxMailActions.
1388 ([-moveAction]): moved method into UIxMailActions.
1390 2007-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1392 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1393 ([_UIxHTMLMailContentHandler
1394 -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
1395 comments from the CSS code, do not add the CSS code to the body
1396 content and remove references of body from the CSS declarations.
1397 ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
1398 ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
1399 common with cssContent in a different method and invoke it only
1402 * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
1403 instead of UIxPageFrame.
1405 2007-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1407 * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
1408 ([-appendToResponse:responseinContext:ctx]): commented out.
1409 ([SOGoRootPage -connectURL]): new accessor that returns the full
1410 url the the "connect" method.
1411 ([-connectAction]): rewrote method to return a properly formatted
1412 auth. cookie based on the username and password passed as
1415 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1416 set the value of the cookie to "discard" and set its expiration
1419 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1420 -preprocessCredentialsInContext:context]): consider the user
1421 anonymous if the cookie value is "discard".
1422 ([SOGoWebAuthenticator
1423 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1424 set the expiration date of the cookie to yesterday.
1426 * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
1427 returns the path to the application if the clientObject is not a
1430 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
1431 moved the requirement of authentication from the SOGo application
1434 * SoObjects/Appointments/SOGoAppointmentObject.m
1435 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
1436 check whether the new appointment object is still relevant before
1437 sending a notification.
1439 2007-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1441 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1442 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1443 render the login page through the SoDefaultRenderer.
1445 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
1446 -isPublicInContext:localContext]): new overriden method that
1449 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1450 -currentCalendarLogin]): replace css-unsafe characters with _.
1452 * UI/SOGoUI/UIxComponent.m ([UIxComponent
1453 -shortUserNameForDisplay]): simplified method.
1454 ([-user]): removed method since [context activeUser] is as useful.
1456 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1458 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1459 set the cookie path to "/".
1461 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
1462 authenticator based on the request handler key. "dav" returns the
1463 SOGoDAVAuthenticator, anything else returns the Web authenticator.
1465 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
1466 "SOGoAuthenticator".
1468 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
1469 implementing a subclass of SoCookieAuthenticator, designed for
1470 web-based cookie authentication of users.m
1472 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1473 new method that resets the authentification cookie.
1475 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1477 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
1478 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
1479 didBind to NO to make sure no false authentication is returned if
1480 the bind operation is not executed.
1482 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1484 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
1485 "In-Reply-To" header field when replying.
1487 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
1488 table field names that are queried.
1490 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1491 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
1492 add the "c_" prefix to the quick table field names that are
1495 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1497 * SoObjects/Appointments/SOGoAppointmentFolder.m
1498 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
1499 "personal" to the ocs path of the appointment folder.
1501 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1502 -flatContentAsString]): use latin1 when the encoding is not
1503 specified, and to reencode data chunk which were not correctly
1504 decoded with the original charset.
1506 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
1507 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
1508 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
1509 ([SOGoAppointmentFolder
1510 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
1511 override those methods to use the "personal" additional directory.
1513 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
1514 append "/personal" to the calendar path to simulate a single
1515 calendar in a choice of many.
1517 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1518 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
1519 methods back here. Moved the folder existence check here, and do
1520 it on self only when the lookup happens for a non-folder object.
1521 This permits to accept entries for folders with parents who
1524 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1526 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1527 -shouldTakeValuesFromRequest:requestinContext:context]): same as
1530 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1531 -shouldTakeValuesFromRequest:requestinContext:context]):
1532 redesigned method since any method called can be received from a
1533 POST or a GET. Instead we check the method call itself and we
1534 accept only if it has the "save" prefix.
1536 * SoObjects/Appointments/SOGoAptMailNotification.m
1537 ([SOGoAptMailNotification -getSubject]): returns the subject an a
1538 quoted-printable encoded string, if needed.
1540 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1541 -asQPSubjectString:encoding]): moved method into
1542 NSString+Utilities.m.
1544 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1546 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1547 -messageForwardingList])
1548 ([UIxPreferences -itemMessageForwardingText])D
1549 ([UIxPreferences -userMessageForwarding])
1550 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
1551 new template methods for manage the user preference regarding
1554 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
1555 algorithm to return, in order, the user's defined language or the
1556 first browser language or, finally, the default language.
1557 ([SOGoUser -messageForwarding]): new method that returns the user
1558 preference for message forwarding: "inline" or "attached",
1559 defaulting to "attached".
1561 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1562 -contentForInlineForward]): new method that returns the content of
1563 the message for inline forwarding based on the SOGoMailForward
1566 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1567 -fetchMailForForwarding:sourceMail]): check the user preference
1568 for message forwarding and compose inline forwarded messages if required.
1570 * SoObjects/Appointments/SOGoCalendarComponent.m
1571 ([SOGoCalendarComponent
1572 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1573 now use a template based on the language returned from the
1576 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
1577 a subclass of SOGoMailForward for English locale.
1579 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
1580 a subclass of SOGoMailForward for French locale.
1582 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
1583 helps build template for inline forwarded messages.
1585 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1587 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
1588 to handle "<var:if-ie>" template tags.
1590 * UI/SOGoElements: new extension bundle containing sogo-specific
1593 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1594 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
1595 selected in the dialog.
1596 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
1597 first category, if ever, of the calendar entity.
1599 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1600 -composeAction]): restored method since it is needed by the
1603 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1604 -composeAction]): the address fields should be arrays and not
1607 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
1608 that returns the build date of SOGo in the template.
1610 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1612 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1613 -_flattenedRecords:records]): when the c_cn field is empty,
1614 returns set a formatted string with the concatenation of
1615 c_givenname and c_sn as the displayName.
1617 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1618 -isValidMailAccountName:_key]): prevent unknown accounts from
1621 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1622 -pathToAttachmentObject]): we no longer need the filename
1623 extension for SoLookup...
1625 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1626 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
1627 filename to have an extension, and thus accept any filename.
1629 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1630 -currentCName]): new method that returns the c_name of the
1631 contact, correctly escaped to be passed by url afterwards.
1633 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1634 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
1635 instance of [self decodedFlatContent] instead of the buggy
1636 NSString from [super flatContentAsString] to the parser.
1638 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1640 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
1641 new category method to reponds to the "delete" web command on
1643 ([UIxMailActions -deleteAttachmentAction]): new category method to
1644 reponds to the "deleteAttachment" web command on drafts, taking
1645 the "filename" url parameter into account.
1647 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1648 -contentForEditing]): new method that retrieve the editable mail
1650 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
1651 returns the body keys for attached files (parts with a "filename"
1654 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1655 -asQPSubjectString:encoding]): do not change the string if the
1656 encoded string has the same length (which means it is already
1658 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
1659 that retrieve a draft along with its attachments for editing.
1660 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
1661 choke if the "to" header field is empty.
1662 ([SOGoDraftObject -delete]): new method to delete the draft folder
1663 whenever operations are done.
1665 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1667 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
1668 useless stub method, of which the intention was implemented in
1670 ([-lookupSentFolderUsingAccount]): removed obsolete method.
1671 ([-selectedMailIdentity]): removed obsolete method.
1672 ([-lookupSentFolderUsingFrom]): removed obsolete method.
1673 ([-storeMailInSentFolder:_path]): removed obsolete method, of
1674 which the mechanism has been put in -[SOGoDraftObject sendMail]
1676 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
1677 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
1678 adapted algorithms to the new SOGoDraftObject methods.
1679 ([-deleteAction]): removed method since local draft objects cannot
1680 be removed by the user.
1682 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1683 -expungeAction]): new method replacing the one previously found in
1685 ([UIxMailFolderActions -createFolderAction])
1686 ([UIxMailFolderActions -renameFolderAction])
1687 ([UIxMailFolderActions -deleteFolderAction])
1688 ([UIxMailFolderActions -emptyTrashAction])
1689 ([UIxMailFolderActions -subscribeAction])
1690 ([UIxMailFolderActions -unsubscribeAction]): error situations
1691 should have http return code 500 instead of 403.
1693 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1694 -composeAction]): new method replacing the one previously in
1697 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1698 -imap4URLString]): removed overriden method (see below).
1700 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
1701 cache the mailbox acl.
1702 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
1703 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
1705 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
1706 the new method of determining the users mail accounts.
1708 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
1709 longer adds a "/" at the end of the string (the default for
1710 folders), therefore this will be overriden in SOGoMailFolder
1711 rather than in SOGoMailObject.
1713 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
1714 method, moved into the new UIxMailActions module class.
1716 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
1717 -newDraft]): new method that returns a new SOGoDraftObject
1718 instance with a unique filename based on the current timestamp and
1719 the "newDraft" prefix.
1721 -lookupName:nameinContext:localContextacquire:acquire]): overriden
1722 method by detecting local drafts with their "newDraft" prefix.
1723 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
1725 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
1726 from scratch by making it a subclass of SOGoMailFolder.
1728 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
1731 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
1734 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
1737 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
1738 new method, initializing the new ivars: IMAP4ID, headers, text,
1739 sourceURL and sourceFlag.
1740 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
1741 ([-_ensureUserSpoolFolderPath])
1742 ([-saveMimeMessageToTemporaryFileWithHeaders:])
1743 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
1744 ([-deleteTemporaryMessageFile:], [-delete], [-content])
1745 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
1746 ([-uid], [-flags], [-size], [-envelope]): removed methods.
1747 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
1749 ([SOGoDraftObject -setSourceURL:newSourceURL])
1750 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
1751 methods to store the url of the original message between accesses
1752 so that, depending on the action taken (forward or reply), the
1753 correct flag can be given.
1754 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
1755 the imap4 id that is returned for the message whenever it is saved
1756 into the drafts folder.
1757 ([SOGoDraftObject -save]): new method that takes in charge the
1758 saving of the message in the IMAP drafts folder.
1759 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
1760 new method that fills the original data of the new message with
1761 the reply content of the original message.
1762 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
1763 above for message forwarding.
1764 ([-spoolFileManager]): removed useless method (only returned the
1765 default filemanager...)
1766 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
1767 the resulting message as an NSData chunk.
1769 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
1770 containing a rewrite of the mail action methods found in
1771 UI/Mailer/, that needed to be put in the SOGoMailObject class.
1772 ([SOGoMailObject -subjectForReply]): new method that returns a
1773 subject suitable for replies.
1774 ([SOGoMailObject -contentForReply]): new method that returns the
1775 textual content of an email, quoted for replying.
1776 ([SOGoMailObject -filenameForForward]): new method that returns
1777 the name of the filename that should contain the forwarded
1778 message, based on its subject.
1779 ([SOGoMailObject -subjectForForward]): explicit.
1781 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1783 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1784 -mailAccounts]): rewrote method to return the name of the mail
1785 accounts now available with the -[SOGoUser mailAccounts] method.
1786 ([UIxMailMainFrame -showLinkBanner]): removed method.
1787 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
1788 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
1789 ([UIxMailMainFrame -rootURL]): removed method.
1790 ([UIxMailMainFrame -userRootURL]): removed method.
1791 ([UIxMailMainFrame -calendarRootURL]): removed method.
1792 ([UIxMailMainFrame -contactsRootURL]): removed method.
1793 ([UIxMailMainFrame -hasErrorText])
1794 ([UIxMailMainFrame -errorText])
1795 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
1796 ([-composeAction]): removed method. Now provided by
1797 UIxMailAccountActions.
1798 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
1799 ([UIxMailMainFrame -hideFolderTree]): removed method.
1800 ([UIxMailMainFrame -treeRootClassName]): removed method.
1801 ([UIxMailMainFrame +initialize]): removed method.
1802 SOGoMailTreeRootClass userdefaults will no longer have any effect.
1804 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1805 -redirectToLocation:newLocation]): new method that implements the
1806 same functionality as WOComponent.
1808 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
1810 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
1811 method that returns whether the current mail is store in the
1812 drafts folder hierarchy.
1814 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
1815 ([-primaryEmail]): removed method.
1816 ([SOGoUser -primaryIMAP4AccountString]): removed method.
1817 ([SOGoUser -mailAccounts]): new method that returns an array
1818 containing description dictionaries for all the user mail
1819 accounts. Each account also contain the user's identities for that
1821 ([SOGoUser -allIdentities]): new utility method that returns all
1822 the user identities on all accounts.
1823 ([SOGoUser -primaryIdentity]): new method return the first
1824 identity of the first account.
1826 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
1828 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1829 -isInDraftsFolder]): returns NO.
1830 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
1832 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
1834 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1835 -isInDraftsFolder]): new method that detects if self is contained
1836 by the drafts folder by calling itself on the container object.
1838 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
1840 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
1841 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
1842 return the name of the mail accounts now available with the
1843 -[SOGoUser mailAccounts] method.
1845 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
1848 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
1851 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1852 -keysWithFormat:format]): method that forward the method of the
1853 same name to each member of the array, considering they all are
1854 instances of NSDictionary.
1855 ([NSArray -objectsForKey:key]): same principle as above.
1856 ([NSArray -flattenedArray]): new method that transforms an array
1857 of arrays into a single array containing all the elements of the
1860 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1861 -keysWithFormat:keyFormat]): new method inspired by the python
1862 string formatting system and which replaces occurences of "%{key}"
1863 by the corresponding keys.
1865 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1867 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
1868 sql script before the generic one when initializing mandatory
1871 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1873 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1874 -pureEMailAddress]): new utility method inspired by the
1875 "_rawSender" private method in SOGoDraftObject, which it now
1878 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
1879 provides a common API for sending emails, no matter what the
1882 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1884 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1885 -quotasAction]): invoke "relativeImap4Name" instead of
1886 "nameInContainer" since the latter also returns the "folder"
1889 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1890 -listMailboxesAction]): declare the output as text/plain in UTF-8.
1892 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1893 -deleteFolderAction]): fixed the url of the destination folder.
1895 * Main/SOGo.m ([SOGo +initialize]): show the build date and
1896 hostname at startup.
1898 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1900 * SoObjects/Appointments/SOGoCalendarComponent.m
1901 ([SOGoCalendarComponent
1902 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1903 set the mail date to the current date string returned by our
1904 rfc822DateString extension method.
1906 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1907 -_gcsFoldersFromFolder:): ignore the personal folders who are
1908 returned but don't really exist.
1910 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
1912 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
1913 has to return only one element.
1915 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1917 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1918 -content]): new method returning the decoded content of the
1919 corresponding attachment as an NSData instance.
1920 ([UIxMailPartViewer -filename]): if the "filename" parameter of
1921 the metadata parameterList is empty, try to find out the filename
1922 from the "disposition" metadata returned with the BODYSTRUCTURE
1925 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1926 -composeAction]): prefix the INBOX folder with "folder".
1928 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
1929 -relativeImap4Name]): return nameInContainer stripped from its
1930 first 6 characters since all folder names are prefixed with
1933 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1934 -imap4URLString]): invoke -relativeImap4Name instead of
1935 "nameInContainer" since the former will return the fixed IMAP4
1936 foldername and the latter the SoObject name.
1938 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1939 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
1941 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
1942 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1943 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
1944 ([SOGoMailAccount -sentFolderNameInContext:])
1945 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
1946 names with "folder".
1947 ([SOGoMailAccount -inboxFolderInContext:_ctx])
1948 ([SOGoMailAccount -sentFolderInContext:_ctx])
1949 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
1950 the folder names with "folder" since they are prefixed earlier.
1952 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1954 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1955 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
1956 all starts with "folder".
1958 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
1959 longer declare security info from here.
1961 * SoObjects/Mailer/SOGoMailFolder.m
1962 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
1963 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
1964 folder names now always start with "folder".
1966 * SoObjects/Mailer/SOGoMailAccount.m
1967 ([-lookupName:inContext:acquire:]): folder names now always start
1970 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1972 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
1973 -forwardAction]): adapted to the new saveAttachment:withMetadata:
1976 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
1977 code to save the attached filenames with the filename returned by
1978 the web server as well as their mime types.
1980 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
1981 ([UIxMailPartMessageViewer -toAddresses])
1982 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
1983 the corresponding fields separated with a ", " (if needed).
1985 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1986 -saveAttachment:_attachwithMetadata:metadata]): new method
1987 replacing -saveAttachment:withName: and which takes a dictionary
1988 as parameter with the filename and the mime type of the
1990 The mimetype is then saved in a hidden text file.
1991 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
1992 take the mime type from the hidden text file related to the
1995 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
1996 ([SOGoContactGCSFolder
1997 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1998 return records if the db records are > 0 and not just > 1...
2000 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2002 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
2004 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
2006 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2007 ([SOGoContactLDAPFolder
2008 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2009 translate the returned records to a normalized form.
2011 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2012 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2013 translate the returned records to a normalized form.
2015 * UI/Scheduler/UIxCalListingActions.m,
2016 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
2017 SoObjects/SOGo/AgenorUserDefaults.m,
2018 SoObjects/Contacts/SOGoContactGCSFolder.m,
2019 SoObjects/Appointments/SOGoAppointmentFolder.m,
2020 OGoContentStore/OCSiCalFieldExtractor.m,
2021 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
2022 table fields with "c_".
2024 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2026 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
2027 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
2028 the application settings. If set, both limit will influence the
2029 maximum size of the resultsets and the time taken to solve them.
2030 ([LDAPSource -_initLDAPConnection]): initialize the limits.
2032 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2034 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
2035 method that declares the DAV namespace related to CardDAV.
2036 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
2037 method that declares the "access-control" and "addressbook-access"
2038 classes to the list.
2040 * SoObjects/Appointments/SOGoAppointmentFolder.m
2041 ([-lookupActionForCalDAVMethod:]): removed method.
2042 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
2043 method that declares the DAV namespace related to CalDAV.
2045 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
2046 optional method for subclasses which handle specific extensions to
2047 the DAV protocol: CardDAV or CalDAV.
2049 -lookupName:lookupNameinContext:localContextacquire:acquire]):
2050 new overriden method that handles dav invocations for extensions
2051 to DAV by returning an appropriate SoSelectorInvocation.
2053 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2054 -asDavInvocation]): new method returning a dictionary with a "ns"
2055 key representing the dav namespace and a "method" key representing
2056 the dav method name of the request.
2058 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
2059 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
2061 ([UIxPreferences -shouldDisplayPasswordChange]): new template
2062 method that returns the value of SOGoUIxUserCanChangePassword.
2064 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
2065 scan the value of SOGoUIxDefaultModule. If not set, the default
2066 module defaults to "Calendar".
2067 ([SOGoUserHomePage -defaultAction]): redirect the user to the
2068 value of "SOGoUIxDefaultModule".
2070 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2072 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2073 -contactInfos]): cache the results to avoid multiple invocations.
2075 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2076 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
2077 really should return something or if we fake to return nil...
2079 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2081 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
2082 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
2083 default is set to "bypass".
2085 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2086 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
2087 when authMethod is set to "bypass" from now on. This would avoid a
2088 security concern with a default installation of SOGo.
2089 AuthentificationMethod is now prefixed with "SOGo" for better
2092 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2094 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2095 -quotasAction]): new method that returns a json representation of
2098 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2100 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2101 -imap4URL]): rewrote method to support accented mailbox names.
2102 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
2103 SOGoAuthenticator's passwordInContext:.
2105 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2106 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
2107 start and due dates to nil if hasStartDate and hasDueDate are
2110 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2111 -passwordInContext:context]): made method public.
2113 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2114 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
2115 to false to avoid a null violation.
2117 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2119 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2120 -contentAsString]): returns the message encoded in ISO Latin 1
2123 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
2124 SOGoSuperUsername user defaults.
2125 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
2127 ([SOGoUser -rolesForObject:objectinContext:context]): if the
2128 current user is the superuser, grant him/her the "owner" role.
2130 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
2131 the folder only if the current user is the owner of the future
2134 * SoObjects/Appointments/SOGoCalendarComponent.m
2135 ([SOGoCalendarComponent -contentAsString]): we return the content
2136 based on the permissions returned by the security manager instead
2137 of by looking at the user roles.
2139 * SoObjects/Appointments/SOGoAppointmentFolder.m
2140 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
2141 folders of the user to whom this folder belongs instead of the
2142 active user. This way, a delegate user will be able to have the
2143 same view that the original user has if he connects from his user
2146 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
2147 user exists before creating the SOGoUserFolder instance. If not,
2150 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
2151 return the message source code in plain text.
2153 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2154 -contentAsString]): returns the message encoded in UTF8.
2156 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2158 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
2159 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
2160 leading tagname into account when serializing the element values.
2162 * Main/SOGoProductLoader.m: only load bundle directories ending
2163 with the "SOGo" extension.
2165 * Main/SOGo.m ([SOGo
2166 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
2167 result set if the query has caused no exception. Otherwise we get
2168 an "evaluation is in progress exception".
2170 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2172 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2173 -generateSQLForInsert]): initialize error to nil before the
2174 serialization. Otherwise the method can get confused if it ever is
2175 initialized to something else.
2177 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
2178 -folderIsMandatory]): returns NO unconditionnally.
2180 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2181 -appendPersonalSources]): add the "personal" folder to the list of
2182 user folders even if it doesn't exist, so that it is created when
2183 the user accesses it.
2185 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2186 -folderIsMandatory]): returns YES if nameInContainer is set to
2187 "personal", which is the default address book.
2189 * SoObjects/Appointments/SOGoAppointmentFolder.m
2190 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
2191 users must have one Calendar folder (one and only one).
2192 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
2193 escaping '\' so make the carriage return a real one. This way,
2194 PgSQL 8 won't complain about escaping the string.
2196 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
2197 method that create the folder if considered mandatory.
2198 ([SOGoFolder -folderIsMandatory]): new method that determines
2199 whether the folder should be created automatically or not. To be
2200 overriden by subclasses.
2202 * Main/SOGo.m ([SOGo -run]): override method and create the
2203 missing system tables if needed.
2205 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2207 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
2208 -mailDateFormatter]): returns the user's date formatter.
2210 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
2211 applies the user timezone to the date object before returning it.
2213 * UI/Common/UIxSortButton.m: removed useless class module.
2215 * UI/Common/UIxSortableTableHeader.m: removed useless class
2218 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2219 -contactInfos]): use the "asc" url parameter instead of "desc" to
2220 determine the ordering.
2221 ([-sortOrdering]): removed method.
2222 ([UIxContactsListView -init]): removed the "searchText" ivar.
2223 (general): the template no longer use the UIxSortableTableHeader
2226 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
2227 -defaultSortKey]): default sort following the messages arrival
2228 instead of their date.
2229 ([-isSortedDescending]): removed method.
2230 ([-imap4SortOrdering]): use the "asc" url parameter instead of
2231 "desc" to determine the ordering.
2232 (general): the template no longer use the UIxSortableTableHeader
2235 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2237 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
2239 ([-setQualifier:_msg], [-qualifier]): removed methods.
2240 ([UIxMailListView -defaultAction]): added code to handle the
2241 search criteria and value passed as url parameters. Also, we now
2242 handle the same search criterias as Thunderbird/Icedove.
2244 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2246 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
2247 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
2248 the string instead of the string itself.
2249 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
2251 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
2252 bool var "acceptAnyUser" that is set when the AuthenticationMethod
2253 user default is nil.
2254 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
2255 unconditionnally returns an instance whenever acceptAnyUser is set.
2257 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2259 * Main/sogod.m (main): prevent SOGo from running as root.
2261 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2263 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2264 -setCurrentPassword:newPassword]): new stub method.
2265 ([SOGoUser -dateFormatterInContext:context]): new method that
2266 returns an instance of SOGoDateFormatter configured based on the
2269 * UI/Common/UIxPageFrame.m ([UIxPageFrame
2270 -relativePreferencesPath]): new method.
2272 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
2273 removed useless method.
2275 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
2276 different configurable formats (long and short date + time).
2278 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
2280 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2281 -isInternetRequest]): removed method.
2283 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2284 -jsonRepresentation]): new method with an explicit name.
2286 * UI/PreferencesUI/product.plist: new bundle that provides a web
2287 ui for handling user defaults.
2289 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
2291 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
2293 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
2295 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2297 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
2299 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2301 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
2302 -compareEventsAscending:otherEvent]): no longer use compare: on
2303 the time objects since one of them could be an NSNull, which
2304 crashes when comparing with anything.
2306 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2307 -eventsListAction]): sort events from here.
2308 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
2310 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
2311 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
2313 * SoObjects/Appointments/SOGoAppointmentFolder.m
2314 ([SOGoAppointmentFolder
2315 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
2316 no longer sort elements from here.
2318 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2320 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2321 -aclsForUser:uid]): implemented method by forwarding the request
2322 to the container. This fixes a bug where users could no longer
2323 read emails from shared folders.
2325 * SoObjects/Appointments/SOGoCalendarComponent.m
2326 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
2327 here, but rather in its parent class.
2329 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
2330 -stringForSecondsSinceThe70s:seconds]): new utility method.
2332 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2333 -eventsListAction]): no longer reduce the end day of one day for
2334 all day events since everything has been fixed in
2335 OCSiCalFieldExtractor.
2337 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2338 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
2339 the end date of all day events of 1 so that they stay on their
2342 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2344 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
2346 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
2348 ([-fetchCoreTasksInfos]): removed method.
2350 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2351 -init]): initialize an instance of SOGoDateFormatter.
2352 ([UIxCalListingActions -eventsListAction]): the display start and
2353 end dates are added to the listing for each event.
2355 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
2357 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2358 -isAllDay]): returns YES if the "hm" url parameter is set to
2360 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
2361 is displayed one day earlier.
2363 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2365 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2366 -_setupContext]): take the range of dates specified by the popup
2369 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
2370 WODirectAction that returns WOResponse objects with the events or
2371 todos satisfying the parameters passed in the url.
2373 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2374 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
2375 "isAllDay" into account and compute the amount of days to pass to
2378 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
2380 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
2381 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
2382 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
2383 new method that returns a json-formatted array of the visible tasks
2384 for the current user.
2386 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2388 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
2389 object must be present in the list of UIDs we delete the object
2390 from. Otherwise Calendar objects having no organizer and no
2391 attendees will remain in their owner's Calendar.
2393 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2394 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
2395 first 3 elements of the path array if the url returned by
2396 baseURLInContext: returns a hostname.
2398 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2399 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
2400 nil, in which case a crash happens when calling hasPrefix:.
2401 ([SOGoMailFolder -_sharesACLs]): same as above.
2402 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
2403 otherUsersFolderName is nil, we return nil.
2404 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
2405 nil from [self otherUsersPathToFolder], we return nil too.
2407 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2409 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2410 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
2411 the result of [self baseURLInContext:] to avoid a double escaping
2412 in the resulting string.
2414 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
2415 the user has the "ObjectReader" role on the parent container, then
2416 he is granted the "ObjectViewer" role on this object. Same for
2417 "ObjectEraser", although this might change later.
2419 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2420 -toolbar]): determine the toolbar filename based on the
2421 permissions declared by the securitymanager. The role mechanism
2422 has been adjusted on a lowerlevel so we can simplify the code.
2424 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2425 -initWithName:newNameinContainer:newContainer]): read the content
2426 directly from here. That way we can determine whether the object
2428 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
2429 the ObjectCreator role is enabled, we also grant the ObjectEditor
2430 role to the current user.
2432 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
2433 changed the method paradigm to only return HTTP code 204. Not test
2434 is done whatsoever since the security manager does it for us.
2436 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
2437 removed method because the same exists in UIxFolderActions.m
2439 * UI/Contacts/UIxContactsUserRightsEditor.m
2440 ([UIxContactsUserRightsEditor
2441 -setUserCanReadObjects:userCanReadObjects]): new method.
2443 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
2444 "FolderEraser" and special permission "Access Object". Removed
2445 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
2446 can be used instead. Removed "FolderReader" since it is useless.
2448 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2449 -vCard]): directly use the "content" ivar since it is initialized
2450 during object creation.
2452 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2453 ([SOGoContactLDAPFolder -init]): no longer handle the
2454 nameInContainer no the container ivars. They were removed because
2455 this class is a descendant of SOGoObject which already has them.
2456 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
2457 returning "displayName".
2458 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
2461 * SoObjects/Appointments/SOGoCalendarComponent.m
2462 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
2463 ([SOGoCalendarComponent -findParticipant:user]): new name for
2464 method "participant:".
2465 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
2466 findparticipant but taking a uid string as parameter.
2467 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
2468 iCalendar automatically. Instead, this is done only when the user
2469 is a "date and time viewer".
2470 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
2471 (modifier and responder) into account by compiling them with the
2474 * SoObjects/Contacts/SOGoContactFolder.h: removed
2475 "nameInContainer" from the list of required methods.
2477 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
2478 -davContentType]): returns "text/calendar".
2480 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2481 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
2482 groupdav resource-type.
2484 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2485 -davContentType]): same as below.
2487 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2488 -initWithName:newNameinContainer:newContainer]): new overriden
2489 method setting the custom owner directly.
2491 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2492 -davContentType]): same as below.
2494 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2495 -davContentType]): same as below.
2497 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
2498 declare "httpd/unix-directory".
2500 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
2501 "UTC" as fallback timezone instead of "Canada/Eastern".
2502 ([-hasEmail:email]): make use of the new NSArray's
2503 containsCaseInsensitiveString: method.
2505 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2506 -davContentType]): declare "message/rfc822" as content type.
2508 * SoObjects/Appointments/SOGoAppointmentFolder.m
2509 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
2511 ([SOGoAppointmentFolder
2512 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
2513 ([-fetchContentObjectNames]): commented out method since it was
2514 usefull only for testing Funambol.
2516 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
2517 -containsCaseInsensitiveString:match]): an enhanced version of
2520 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
2522 ([-showMarkDeletedButton]): removed useless method.
2523 ([-showTrashButton]): removed useless method.
2525 * SoObjects/Appointments/iCalEntityObject+SOGo.m
2526 ([iCalEntityObject -userIsParticipant:user]): new proxy method
2527 that invoked isParticipant on self for each possible email
2528 addresses of the user passed as parameter.
2529 ([iCalEntityObject -userIsOrganizer:user]): same as above.
2531 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
2534 * SoObjects/Appointments/SOGoAppointmentObject.m
2535 ([SOGoAppointmentObject
2536 -saveContentString:contentStringbaseVersion:baseVersion]): remove
2537 method since an event may not have an organizer.
2539 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2540 -GETAction:localContext]): clarified method. Added support for
2541 content-type (thanks to Helge Hess).
2542 ([SOGoObject -initWithName:_nameinContainer:_container]):
2543 initialize and retain the owner.
2544 ([SOGoObject -davContentType]): returns "text/plain".
2546 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2548 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2549 -addUserInAclsAction]): send an acl addition mail.
2550 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
2553 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2554 -_realActionWithFolderName:folderDict]): handle the possible
2555 presence of the "mail-invitation" url parameter. If present, the
2556 user will be redirected to the relevant folder.
2558 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
2559 ([SOGoUser -language]): new method that returns the user's
2560 preferred language, or the system's if none has been set yet.
2562 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
2563 that returns the full dav url to self.
2564 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
2565 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
2566 returns the full so url to the base of the SOGo module to which
2567 self belongs, and for the specified user.
2568 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
2569 but for the current user.
2570 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
2571 required by the acl advisory templates and which returns a link
2572 the target user can click to activate its new subscription.
2573 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
2574 but for inclusion of the application/x-sogo-notification part,
2575 which will be handled by the Lightning enhancer plugin.
2577 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
2578 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
2579 do nothing yet since imap folder subscription is not handled yet.
2581 * SoObjects/SOGo/SOGoContentObject.m
2582 ([-hasSupportForDefaultRoles]): removed method.
2584 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2585 -getFullEmailForUID:uid]): new method that returns the username +
2588 * SoObjects/Appointments/SOGoCalendarComponent.m
2589 ([SOGoCalendarComponent +initialize]): the default language for
2590 mail templates is now set to English.
2592 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
2593 SOGoACLAdvisory implementing the french template for user removal
2596 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
2597 SOGoACLAdvisory implementing the french template for user
2600 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
2601 SOGoACLAdvisory implementing the english template for user removal
2604 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
2605 SOGoACLAdvisory implementing the english template for user
2608 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
2609 supercall of all the acl advistory templates. The model is based
2610 on SOGoAptMailNotification except that the template encapsulates
2611 the message to be sent. Later, we might create a superclass common
2612 to all template-based emails.
2614 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2615 -addRange:newRange]): new method that store a string
2616 representation of the NSRange passed as parameter.
2617 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
2618 any range contained in self intersect with the one passed as parameter.
2620 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
2621 store ranges in an array to prevent them from intersecting with
2622 each other during the passes.
2624 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2626 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2627 -primaryFetchMailboxInfo]): useless method. Removed.
2629 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2631 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2632 -toManyRelationshipKeys]): invoke [self subfolders].
2633 ([SOGoMailFolder -subfolders]): new method containing what used to
2634 be in toManyRelationshipKeys.
2635 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
2638 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2639 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
2640 named and at the beginning of which we put the predefined folders.
2642 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2643 -emptyTrashAction]): new method inspired by a similar one from
2644 UIxMailListView, to which we added the ability to remove
2647 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
2648 method. Replaced with a similar one in UIxMailFolderActions.
2650 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2651 -renameFolderAction]): implemented method.
2652 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
2653 specified folder. Instead, we put it in the trash folder.
2655 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
2656 method, replaced with a similar method in the new
2657 UIxMailFolderAction class module.
2658 ([-deleteFolderAction]): idem.
2660 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2661 -createFolderAction]): new method implementing subfolder creation.
2662 ([UIxMailFolderActions -renameFolderAction]): new method
2663 implementing subfolder renaming (basic implementation to be
2665 ([UIxMailFolderActions -deleteFolderAction]): new method
2666 implementing folder deletion.
2668 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
2669 web actions related to the handling of imap folder.
2671 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2673 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2674 -ownerInContext:localContext]): overriden method because we are an
2675 IMAP4 client and we need a bit more intelligence to deduce the
2676 owner of the current folder.
2677 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
2678 return an NSException so we need to be careful here to avoid a
2680 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
2681 NSException so we need to be careful here to avoid a crash.
2683 * SoObjects/Mailer/SOGoMailAccounts.m
2684 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
2685 there is no longer any concept of Intranet or Internet connection
2688 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2689 -sharedFolderName]): new method.
2690 ([SOGoMailAccount -otherUsersFolderName]): new method.
2692 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
2693 new javascript code and the new UIxMailAccountActions class.
2695 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
2696 javascript code and the new UIxMailAccountActions class.
2698 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
2699 new javascript code and the new UIxMailAccountActions class.
2701 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2702 -listMailboxesAction]): new method that returns a json-formatted
2703 tree of all the mailboxes available to the current user.
2705 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
2706 web actions related to the handling of mail accounts.
2708 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
2711 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
2712 -jsonRepresentation]): new interface method meant to be overriden
2713 by the primitive classes.
2715 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2717 * UI/MailerUI/UIxMailSplashView.m: removed.
2719 * SoObjects/Appointments/SOGoCalendarComponent.m
2720 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
2721 the uid to the list only when the user email is recognized by the
2724 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2726 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2727 -isDeletionAllowed]): completed method with the new imap acl api.
2729 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
2732 * SoObjects/SOGo/SOGoPermissions.m: added the new role
2733 "SOGoMailRole_MessageEraser".
2735 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
2736 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
2737 "defaultUserID" method into account.
2739 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
2740 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
2741 "defaultUserID" method into account.
2743 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
2744 methods to support the IMAP acls mentionned in the RFC 4314,
2745 removed the ones specific to Cyrus.
2747 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
2748 mandatory method for subclasses. Removed the SOGoDefaultUserID
2751 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
2752 overriden method to return @"<default>".
2754 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2755 -defaultUserID]): overriden method to return @"<default>".
2757 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2758 -aclsForUser:uid]): overriden method.
2759 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
2760 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
2761 ([SOGoMailFolder -defaultUserID]): overriden method.
2762 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
2764 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2766 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2767 -aclUsersForObjectAtPath:objectPathArray]): new method that being
2768 forwarded the calles to aclUsers for the GCS-based subclasses of
2771 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
2772 methods that would have been used to support IMAP acls. Replaced
2773 them with the new protocol for them that has been implemented in
2774 SOGo during the last few weeks.
2776 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2777 -hasSupportForDefaultRoles]): override method by returning "YES".
2779 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2780 -addObjectUniquely:object]): new method with an explicit name.
2782 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
2783 "acl" to "aclUsers". Now designed to return only the uid of the
2784 users involved in an ACL.
2785 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
2786 "NO" by default. To indicate to the acl editor that we don't want
2787 to handle a default user.
2789 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
2790 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
2793 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
2794 provides a view to the IMAP acls.
2796 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
2798 * UI/WebServerResources/MailerUI.js: replaced all invocations of
2799 addEventListener to the use of prototype's Event object. Also,
2800 configured all menus programmatically following descriptions lists
2801 containing their callbacks, or nulls, submenus id or separators.
2803 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2805 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2806 -addUserInAclsAction]): save the previous roles of the user
2807 (unlikely) or the default roles, or None instead of saving the
2808 roles that should appear the first time in the role editor when no
2809 default has been set...
2811 * SoObjects/SOGo/SOGoObject.m: defined a new constant
2812 "SOGoDefaultUserID".
2814 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2815 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
2816 ignore the "AuthorizedSubscriber" role and add the "None" role
2817 when no other role is found.
2819 * UI/Common/UIxAclEditor.m: added a button for the new default
2822 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2823 -_initRights]): don't take the "None" role into account when
2824 initializing the list of current roles.
2826 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
2829 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2831 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2832 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
2833 There is no need to subscract the start from the length if a space
2834 is not found since the range has not changed either. Finally, the
2835 first character before the url might also be a tab or a cr, so we
2836 match it against the "urlAfterEndingChars" custom NSCharacterSet.
2837 ([NSString -stringByDetectingURLs]): modified to handle email
2838 addresses and add a correct "mailto:" link.
2840 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2842 * SoObjects/Appointments/SOGoAppointmentFolder.m
2843 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
2844 method to return the events in the range of 2 weeks ago up to 4
2847 * UI/MailPartViewers/UIxMailPartTextViewer.m
2848 ([UIxMailPartTextViewer -flatContentAsString]): use the new
2849 "stringByDetectingURLs" method to offer clickable urls.
2851 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2852 -stringByDetectingURLs]): this new method replaces passive URLS
2853 with active ones for HTML resolution of the text.
2855 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2857 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2858 -asQPSubjectString:encoding]): simplified method.
2859 The headers indicates "utf-8" again thank to our fix in
2862 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
2865 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2867 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2868 -removeUserFromAclsAction]): implemented this method which was
2869 missing and is required to remove users from ACLs.
2871 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2872 -subscribeAction]): folderDict was not autoreleased, resulting in
2875 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2876 -primaryFetchProfile]): when building with libFoundation, don't
2877 use the "propertyList" method from NSString. Rather, we convert
2878 the string to an NSData instance and passit as parameter to
2879 NSDeserializer. This way, we obtain a mutable dictionary rather
2880 than an immutable one.
2882 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
2883 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
2884 constant string "contentTypeValue".
2885 contentTypeValue is now set back to iso-8859-1 since NGMime
2886 converts extracts the data in that encoding.
2888 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2890 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2891 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
2892 "bindFields" value is present in the user defaults, use the
2893 specified fields to find the dn of the user to bind.
2894 ([LDAPSource -allEntryIDs])
2895 ([LDAPSource -fetchContactsMatching:match])
2896 ([LDAPSource -lookupContactEntry:entryID])
2897 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
2898 bind and unbind the connection on each request.
2900 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
2902 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2903 -contactSearchAction]): simplified method to use the facilities
2904 provided by the LDAPUserManager. No longer takes care of the
2905 "ldap-only" url parameter since all requests are handled by the
2908 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2909 -primaryFetchProfile]): check that the value returned is not null
2910 before interpreting it.
2912 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2913 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
2914 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
2915 system email is already present, remove it before adding it.
2917 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2918 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
2919 loginToCheck is not empty.
2920 ([LDAPSource -fetchContactsMatching:match]): check that match is
2922 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
2924 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
2927 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2929 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
2931 ([SOGoUser -systemEmail]): returns the email formed from the
2932 username and the default mail domain.
2933 ([SOGoUser -hasEmail:email]): test whether the user has the
2934 specified email, in a case-insensitive way.
2936 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2937 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
2938 check login information.
2940 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2941 ([SOGoContactLDAPFolder
2942 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
2943 no longer manage LDAP connections. The requests are forwarded to
2944 the relevant LDAPSource instead.
2946 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2947 -appendSystemSources]): pass LDAPSource objects to
2948 SOGoContactLDAPFolder instances.
2950 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
2951 address of the "from" field before sending the message. Otherwise,
2952 sending the mail won't work.
2954 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
2955 rewrote this method to request all the available email identities
2956 for the current user. Also, the from field also contains the full
2957 name of the user, not just his/her email address.
2959 * SoObjects/Appointments/SOGoCalendarComponent.m
2960 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
2961 from the previous module iCalEntityObject+Agenor.
2962 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
2963 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
2966 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
2967 replacing the SOGoContactLDAPEntry module. It was renamed as such
2968 because it now receives a dictionary instead of an NGLdapEntry.
2969 It thus can now handle data from any source of LDIF data, not
2970 only coming from LDAP.
2972 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
2973 implementing most of what used to be the AgenorUserManager class.
2974 The difference is that users are cached in the forme of
2975 dictionaries and many sources are used. Also, it can be used to
2976 search LDAP contacts.
2978 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
2979 the concept of "ldap source", to be used by all the classes
2980 needing access to LDAP-provided information: addressbooks and the
2981 user manager. Most the method thereing are transcriptions of
2982 methods previously found in SOGoContactLDAPFolder. It also contain
2983 utility methods for user matching and authentification.
2985 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
2986 module, rendered useless by code refactoring.
2988 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
2989 with the freshly written "LDAPUserManager".
2991 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2993 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
2994 SOGOContactLDIFEntry.
2996 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
2997 module, obsoleted by code in SOGo/LDAPSource.[hm].
2999 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3001 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
3002 new method with an explicit name.
3004 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3006 * SoObjects/Appointments/SOGoCalendarComponent.m
3007 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
3008 replacing "isOrganizer:orOwner:" by taking only one instance of
3009 SOGoUser as parameter.
3010 ([SOGoCalendarComponent -participant:user]): new method replacing
3011 the previous "isParticipant" boolean method by returning the first
3012 participant matching the user passed as parameter. This method is
3013 used so that both the regular email address and the "system email
3014 address" of the user are matched against the participants emails.
3016 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3017 -getSystemEMailForUID:uid]): new method that returns the email
3018 formed with the user's uid and the default mail domain.
3020 * SoObjects/Appointments/SOGoCalendarComponent.m
3021 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
3022 was previously commented out.
3024 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
3025 forwared to [AgenorUserManager getSystemEmailForUID:].
3027 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3028 -toolbar]): method replacing the one with the same name in the
3029 task and appointment editor classes. This method makes also use of
3030 the new method "isOrganizerOrOwner:" and "participant:" in
3031 SOGoCalendarComponent.
3033 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3034 -toolbar]): removed method, replaced with a method with the same
3035 name in UIxComponentEditor.
3037 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
3038 method, replaced with a method with the same name in
3041 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3042 -primaryFetchProfile]): the values returned from the database are
3043 converted to a put dictionary first, since the dictionary returned
3044 is actually an immutable one, which can cause a crash afterwards.
3046 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3048 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
3049 and "SOGoRole_ObjectEditor".
3051 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
3052 -prepareRightsForm]): this method is no longer mandatory.
3054 * UI/Contacts/UIxContactsUserRightsEditor.m
3055 ([UIxContactsUserRightsEditor
3056 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
3057 module to handle acls related to the address books. Partial
3060 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3061 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
3064 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
3065 specified roles from cache.
3066 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
3067 put resulting roles in cache.
3069 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
3070 initWithName:inContainer:. Instead, directly initialize the ivars
3071 as it is supposed to be to avoid an infinite loop whenever one of
3072 those two methods are overriden.
3074 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
3077 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3078 -aclsForUser:uid]): override method so that SOGo won't crash when
3079 loading the contact card.
3081 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3083 * SoObjects/Appointments/SOGoAppointmentFolder.m
3084 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
3085 "freebusy" special user should only require opaque elements.
3087 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3089 * SoObjects/Appointments/SOGoAppointmentFolder.m
3090 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
3091 our double declaration where the resulting XML would be screwed.
3092 There is only one collection per namespace.
3094 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
3095 rfc822DateString]): new method that returns a string conform to
3096 rfc 822 and suitable for email headers.
3098 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
3099 "rfc822DateString" category method on the date we put in the
3102 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3104 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
3105 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
3106 which should never be overriden.
3107 ([UIxUserRightsEditor -appendRight:newRight])
3108 ([UIxUserRightsEditor -removeRight:right])
3109 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
3110 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
3111 methods that can be used by the subclasses.
3112 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
3113 mandatorily be overriden to prepare the elements of the subclassed
3115 ([UIxUserRightsEditor -updateRights]): new method that should
3116 mandatorily be overriden to update the user rights from the
3117 elements of the subclassed form.
3119 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
3120 check if the uid is already listed before adding it to our array.
3121 This is because the acl table can contain more than one record per
3122 user/object relationship.
3124 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3125 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
3126 "roles" parameter is now an NSArray instead of a string. Therefore
3127 we loop throughout the array to populate the table. All the
3128 relevant records are removed prior to the addition of the new
3131 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
3132 -aclsForUser:uid]): new override that returns nil until we add
3133 support for IMAP acls.
3135 * SoObjects/Mailer/SOGoMailAccounts.m
3136 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
3138 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3139 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
3141 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3142 -aclsForUser:uid]): override this method which will always return
3145 * SoObjects/SOGo/SOGoPermissions.[hm]: added
3146 [Public,Private,Confidential]
3147 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
3148 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
3149 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
3151 * SoObjects/Appointments/SOGoAppointmentFolder.m
3152 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
3153 that defines default roles for new elements in the acl.
3155 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
3156 module and subclass of UIxUserRightsEditor specific to the
3157 handling of user rights on calendar folders.
3159 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3161 * SoObjects/Appointments/SOGoAppointmentFolder.m
3162 ([SOGoAppointmentFolder -groupDavResourceType]): return both
3163 "vevent-collection" and "vtodo-collection".
3165 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
3166 that implements the detailed editor of user rights per-object.
3168 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3170 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3171 -rolesForObject:objectinContext:context]): no longer query objects
3172 for "roleForUser:". Instead, all objects should implement
3175 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
3176 new method to comply with the new acl "protocol" in SOGoObject.
3177 Uses SOGoFolder's new facilities for ACLS.
3178 ([SOGoContentObject -aclsForUser:uid]): idem.
3179 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
3180 ([SOGoContentObject -removeAclsForUsers:users]): idem.
3182 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3183 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
3184 based folders. This method is derived from the code that was in
3185 UIxAclFolder before its removal.
3186 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
3189 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
3191 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
3192 ([SOGoFolder -setRoleForUsers:uidsto:role])
3193 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
3195 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
3196 that requires overriding by subclasses.
3197 ([SOGoObject -aclsForUser:uid]): idem.
3198 ([SOGoObject -defaultAclRoles]): idem.
3199 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
3200 ([SOGoObject -removeAclsForUsers:users]): idem.
3202 * UI/Common/UIxObjectActions.m: new module implementing the web
3203 actions common to SOGoObject and all its subclasses.
3204 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
3205 user with the clientObject defaults user rights to the object's
3208 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
3209 to the point where it will only list the users (and their name)
3210 associated with an object acl.
3212 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
3213 methods have been moved into SOGoObject and SOGoFolder during a
3216 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3217 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
3218 method made useless by the programmatic handling of iCalendar
3220 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
3221 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
3222 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
3224 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
3225 drop on all folder nodes, not just on leaves.
3227 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3228 ([SOGoContactLDAPFolder
3229 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
3231 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3233 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
3234 debugging facilities when the SOGoDebugObjectAllocation user
3237 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3239 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
3240 method that SOGo will need with non-gnustep Foundation
3242 ([NSString -stringByAppendingPathComponent:component]): new method
3243 that SOGo will need when building with libFoundation. Method
3244 removed later since it is available from
3245 Foundation/NSPathUtilities.h.
3247 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
3250 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
3251 every subclass to access [WOApplication context] without having to
3252 invoke it more than once.
3254 * SoObjects/Appointments/SOGoCalendarComponent.m
3255 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
3256 moved method from SOGoTaskObject and SOGoAppointmentObject up to
3259 * UI/Scheduler/UIxCalSelectTab.m: removed module.
3261 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3263 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
3264 -vCard]): test the prefix of the card in a case-independent way.
3266 * OGoContentStore/OCSContactFieldExtractor.m
3267 ([OCSContactFieldExtractor
3268 -extractQuickFieldsFromContent:content]): we no longer accept
3269 records in a format other than versit vCard so we can get rid of a
3272 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3274 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3275 -selectorComponentClass]): restored method.
3277 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3279 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
3280 -shouldDisplayCurrentTask]): the current task is not displayed if
3281 it is NOT completed or if the "showCompletedTasks" flag is set.
3282 The logic was inverted in Lightning and is now in SOGo too.
3284 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3286 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
3287 want the "work" url instead of the "home".
3289 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3290 -_saveSnapshot]): save url values from snapshot.
3291 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
3293 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3294 -calendarList]): new method replacing "availableCalendars".
3296 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
3297 -calendarFolders]): we now take the list of subscribed calendar
3300 * SoObjects/Appointments/SOGoAppointmentFolder.m
3301 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
3302 method derived from and replacing [UIxCalView calendarFolders].
3304 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3306 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3307 -toManyRelationshipKeys]): don't put the predefined folders in the
3308 list if they are returned by the server.
3310 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
3311 longer store the "flattenedBlocks" in a dictionary since the
3312 object will be deleted anyway and we don't need to put the folders
3315 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3316 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
3317 attachment path into account when computing the part urls.
3319 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3321 * UI/Contacts/UIxContactsListViewContainer.m
3322 ([UIxContactsListViewContainer -additionalFolders]): take the list
3323 of subscribed folders from the new property list used for the user
3324 settings. The value of its key is SubscribedFolders for the
3325 dictionary entry named "Contacts".
3327 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3328 -canAccessContentAction]): new method to override the one from
3329 UIxFoldersActions by taking into account the fact that, this time,
3330 the clientObject is an ldap folder. Removed many method that used
3331 to be related to the handling of the user selector.
3333 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
3334 to make sure they can be removed.
3336 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
3337 populate the calendar entries based on the user settings plist.
3339 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3340 -selectForMailerAction]): restored method.
3342 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
3343 from a simplified version of the old UIxContactEditor (removed).
3345 * UI/Contacts/UIxContactsUserFolders.m: new template module for
3346 selecting users or user folders through an LDAP search of which
3347 the results are displayed as a tree.
3349 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
3350 method "onContactAdd" here since the Mailer is now the only module
3351 to use it when composing emails.
3353 * UI/WebServerResources/generic.js: added code for handling the
3354 new scheme used for describing SOGo folders, common code to handle
3355 folder addition or removal.
3357 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3358 -activateFolderAction]): new method that change the "active"
3359 settings in the folder-related fields in the user settings.
3360 ([UIxFolderActions -deactivateFolderAction]): see above.
3362 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3363 -checkRightsAction]): removed method.
3365 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3366 -updateAdditionalAddressBooksAction]): removed method.
3368 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3369 -updateCalendarsAction]): removed method.
3371 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3373 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3374 -checkRightsAction]): removed method.
3376 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3377 -canAccessContentAction]): new method designed to replace
3378 [UIxCalMainView checkRightsAction] in a more universal way.
3380 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3382 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3383 -roleOfUser:uidinContext:context]): take all the subkeys into
3384 account, not only the "personal" folder.
3386 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3387 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
3388 to the new components.
3390 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
3393 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3394 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
3395 field of the sogo_user_profile table, where the user-customizable
3396 changes will be saved.
3397 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
3398 similar to the one above, using the "settings" field where the
3399 automatic settings will be saved.
3401 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
3402 module to bind the userdefaults to a property list contained in a
3403 specified field of the sogo_user_profile table.
3404 ([AgenorUserDefaults
3405 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
3406 added a "fieldName" parameter.
3408 * UI/Common/UIxFolderActions.m: new module implementing web
3409 actions common to all GCS-based folders.
3411 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3413 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
3414 put a carriage return after the day name.
3416 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3417 -readFreeBusyAction]): restored method.
3419 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3421 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3422 -defaultAction]): remade module to redirect automatically to the
3425 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
3427 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3429 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3430 -deleteAction]): new web method to delete personal addressbook
3433 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3434 -delete]): override method to refuse the deletion of the folder if
3435 its nameInContainer is "personal".
3437 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
3438 that forwards the deletion request to the folder manager.
3440 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3442 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
3443 -zoomList]): new method that returns the list of available zoom factors.
3445 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3446 -changeStatusAction]): rewrote method.
3448 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3449 -_handleAttendeesEdition]): make sure "attendeesNames" has a
3450 length > 0 before computing the attendees. Otherwise there will be
3451 an invalid empty entry.
3452 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
3453 organizer when there are attendees and remove it when the
3454 attendees are removed.
3456 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3458 * UI/Scheduler/UIxAttendeesEditor.m): new component.
3460 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
3461 the task and appointment editors. Now a container component
3462 handling the common elements of tasks and events.
3464 * UI/Scheduler/UIxTaskEditor.m: same as below.
3466 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
3467 a subclass of UIxComponentEditor but a subcomponent of it.
3469 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
3470 toolbar can have the special value "none" to indicate there is
3471 none attached to the window.
3473 * SoObjects/Appointments/SOGoCalendarComponent.m
3474 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
3476 ([SOGoCalendarComponent -isParticipant:email]): new method.
3477 ([SOGoCalendarComponent -calendar:create]): takes one parameter
3478 "create" which is a boolean indicating whether we want to create
3479 the calendar if it does not exist.
3481 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3483 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
3484 of a table, the same way the dayly and weekly views have been for
3487 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
3489 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
3492 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
3493 property to point at the user folder
3495 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3497 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3498 -userInContext:]): returns "SOGoUser".
3500 * SoObjects/Appointments/SOGoCalendarComponent.m
3501 ([SOGoCalendarComponent -contentAsString]): overriden method that
3502 takes the privacy into account and discard the relevant fields if
3503 needed by generating a new content string and caching it.
3504 ([SOGoCalendarComponent
3505 -saveContentString:contentStringbaseVersion:baseVersion]): if the
3506 new method above has cached a content string, release it and set
3507 it to nil so that it will have to be regenerated in the case it is
3509 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
3510 discard the fields that have to be hidden when the card is
3513 * SoObjects/Appointments/SOGoAppointmentFolder.m
3514 ([SOGoAppointmentFolder
3515 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
3516 sure the cards are now handled as instances of
3517 SOGoCalendarComponent instead of SOGoContentObject so that their
3518 content string is taking the privacy classifiction into account.
3519 ([SOGoAppointmentFolder -_privacySqlString]): new method that
3520 generates a query to determine what information can be given and
3521 if the card itself has to be shown.
3523 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3524 -getICalPersonsFromValue:selectorValue]): removed useless
3525 "isAccessRestricted" method.
3527 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3528 -setStyle:_style]): test whether the values of orgmail and
3529 partmails are null before manipulating them, otherwise SOGo sends
3530 a "rangeOfString:" message to an NSNull, which makes it crashes.
3532 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3533 -extractQuickFieldsFromEvent:_event]): we now use the new
3534 "symbolicAccessClass" method from iCalEntity to determine the
3535 value of the "classifiction" field.
3536 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
3539 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3541 * SoObjects/Appointments/SOGoAppointmentFolder.m
3542 ([SOGoAppointmentFolder
3543 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
3544 see below, the query is adapted consequently.
3546 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3547 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
3548 renamed to "classification" and can any integer as value.
3549 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
3552 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3554 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3555 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
3556 don't prepend anything to the class and id named. Instead, we
3557 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
3560 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3562 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
3563 -rolesOfUser:logininContext:context]): if object does not exists
3564 (for example when it's being created), the current user has the
3565 same rights on it than he/she has on its parent container.
3567 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3568 -nameExistsInFolder:objectName]): methods that tests if a c_name
3569 corresponding to the name passed as parameter is present in the db
3572 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3574 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3575 -rolesForObject:objectinContext:context]): test for
3576 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
3578 * SoObjects/Appointments/SOGoCalendarComponent.m
3579 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
3580 returns the roles of the user on the container object if the event
3583 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3585 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
3586 alternativeViewer a multipart/related message is being handled.
3588 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
3591 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
3592 text/html component before text/plain.
3594 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3595 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
3596 fetching of HTML parts.
3598 * SoObjects/Appointments/SOGoCalendarComponent.m
3599 ([SOGoCalendarComponent -componentTag]): new template method that
3600 returns the vcalendar tag of the current object.
3601 ([SOGoCalendarComponent -component]): new method that returns the
3602 first object matching [self componentTag] within the current
3603 calendar object. This method replaces 'firstEventInCalendar:' as
3604 well as "firstTaskInCalendar:".
3605 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
3606 moved method from SOGoAppointmentObject.m.
3608 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3610 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
3611 module which shows each selected user's calendar in a different
3612 column instead of mixing their events together.
3614 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
3615 replaced use of [NSString stringByTrimmingWhiteSpaces] with
3616 [NSString stringByTrimmingSpaces].
3618 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
3619 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
3622 * UI/Scheduler/UIxCalDayOverview.m,
3623 UI/Scheduler/UIxCalDayChartview.m,
3624 UI/Scheduler/UIxCalDayListview.m,
3625 UI/Scheduler/UIxCalWeekOverview.m,
3626 UI/Scheduler/UIxCalWeekChartview.m,
3627 UI/Scheduler/UIxCalWeekListview.m,
3628 UI/Scheduler/UIxCalInlineMonthOverview.m,
3629 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
3631 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3633 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3634 -appendPersonalSourcesInContext:context]): release connectoin
3635 channel when everything is done.
3637 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3638 -newAbAction]): new action method to crate a new contact folder
3641 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
3642 that requests the folder manager to create a folder table with the
3643 specified type at the specified path. The type is taken from [self
3646 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3647 -folderType]): implemented.
3649 * SoObjects/Appointments/SOGoAppointmentFolder.m
3650 ([SOGoAppointmentFolder -folderType]): implemented.
3652 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3653 -appendPersonalSourcesInContext:context]): we now fetch all
3654 folders with type "Contact" that belong to the current user.
3655 ([SOGoContactFolders -newFolderWithName:name]): new method to
3656 create a new contact folder.
3658 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
3659 resulting url with [NSString+Utilities hostlessURL] instead of
3660 using NSURL. This is because the url in question sometimes has a
3661 hostname and sometimes not. "hostlessURL" ensure the hostname is
3663 ([UIxComponent -applicationPath]): same as above.
3665 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
3667 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
3668 folders before doing the one on messages.
3670 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3672 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
3673 makeObjectsPerform:withObject:withObject: for GNUstep
3676 * OGoContentStore/GNUmakefile, Protocols/common.make,
3677 SoObjects/common.make, UI/common.make: install in
3678 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
3680 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
3682 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
3685 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3687 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
3688 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
3691 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3692 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
3693 password would be accepted anyway as long as its length was > 0.
3694 This can be the case ONLY when LDAP is disabled otherwise we have
3695 a serious security issue...
3697 * SoObjects/Appointments/SOGoAppointmentObject.m
3698 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
3699 user is not an organizer nor a participant, he is declared as
3700 "Owner" if he owns the calendar the entry where the entry is
3701 contained. Other cases should not be possible.
3703 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3705 * UI/Contacts/UIxContactEditor.m: display and handle the new
3708 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3709 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
3712 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3713 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
3716 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3718 * SoObjects/Appointments/SOGoCalendarComponent.m
3719 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
3720 returns the value of ud "SOGoAppointmentSendEMailNotifications"
3722 ([SOGoCalendarComponent
3723 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
3725 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3727 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3728 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
3729 so that the mailbox cache is refreshed everytime the user presses
3730 on "get mail". I doubt a mailbox cache really is useful in general
3733 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3735 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3736 -userInContext:]): if the lookup is on "freebusy.ifb" and the
3737 username is "anonymous" the user is automatically set to
3740 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3742 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3743 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
3744 user with password "freebusy".
3746 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
3747 -contentAsString]): the default timerange is now 14 days before
3748 currentday and 1 month after.
3750 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3752 * SoObjects/Appointments/SOGoAppointmentFolder.m
3753 ([SOGoAppointmentFolder
3754 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
3755 escape the record string in a way suitable with XML encoding.
3757 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3759 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
3760 calendar view would not be updated properly.
3762 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3764 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3765 -newStartDate]): fix the handling of the component start date
3766 depending on the "hm" and the "day" parameters.
3768 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3769 -roleOfUser:uidinContext:context]): set role of current user to
3770 "Assistant" if the object that is accessed is "freebusy.ifb".
3772 * SoObjects/Appointments/SOGoAppointmentFolder.m
3773 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
3774 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
3775 ([SOGoAppointmentFolder
3776 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
3777 lookupCalendarFolderForUID: method, which doesn't do security
3780 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3782 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
3783 accessor that returns the comma-separated list of users with role
3785 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
3786 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
3787 "checkedUsers". Instead, each user is either classified in the
3788 list of assistants or the list of delegates.
3790 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3792 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
3793 -composeAction]): method imported from removed container modules.
3794 ([UIxMailMainFrame -mailFolderName]): method imported from removed
3797 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
3798 for wrapping UIxMailView with the "popupview" action.
3800 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
3801 since its the component that displays the same splash screen than
3802 the one in Thunderbird/Icedove.
3804 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
3805 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
3806 UI/MailerUI/UIxMailListViewContainer.[hm],
3807 UI/MailerUI/UIxMailViewContainer.[hm]: removed
3809 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3811 * UI/WebServerResources/HTMLElement.js: replaced the functional
3812 selectNode() and deselectNode() functions with select() and
3813 deselect() methods of HTMLElement.
3815 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
3816 events are initialized from here now instead of in the HTML code.
3818 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3819 -checkRightsAction]): new method similar to the one with the same
3820 name in UIxCalMainView.m.
3822 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
3823 code to handle the publishing of freebusy information.
3825 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3827 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3828 -checkRightsAction]): new action method that returns a
3829 comma-separated list of boolean values matching the right of the
3830 current user to "view" (as a permission) each foreign calendar
3831 stored in his preferences.
3833 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
3834 new method that sets a customOwner, which can be returned with
3835 ownerInContext it set.
3837 * SoObjects/Appointments/SOGoAppointmentFolder.m
3838 ([SOGoAppointmentFolder
3839 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
3841 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3843 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
3844 below, but for the Contacts and Calendar collections.
3846 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
3847 new acl facilities method from sope-gdl/GCSFolder.m.
3849 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3850 -roleOfUser:uidinContext:context]): new method that returns
3851 SOGoRole_Assistant when the user is an assistant or a delegate on
3852 the "personal" ab object. This is so that setting roles on the
3853 SOGoContactFolders object is not required.
3855 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3857 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
3859 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
3860 to the handling of the user selection for the acls.
3862 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
3863 values from SoPermissions with ones specific to SOGo.
3865 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
3866 handles the storage for the acls.
3868 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
3869 class for SOGoAppointmentObject and SOGoTaskObject.
3871 * UI/Common/UIxAclEditor.[hm]: new component that provides a
3872 general editor for folder acls.
3874 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
3876 ([NSString -davMethodToObjC]): method that returns the method name
3877 for a DAV property implementation.
3879 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
3881 ([NSArray -stringsWithFormat:format]): new method that returns
3882 formatted occurences of the strings stored in the array.
3884 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
3885 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
3886 subclass module of SoWebDAVValue that supports collections of
3887 properties of the same type.
3889 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3891 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3892 -lookupFolder:ofClassNamed:inContext:]): added the ability to
3893 configure the name of the SOGoDraftFolders with the ud var
3894 "SOGoDraftsFolderName".
3896 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3898 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
3899 -userTimeZone:username]): new method that returns the timezone for
3900 the specified user depending on his preferences and the server
3903 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3904 -stringForData:partInfo:]): take the encoding into account and
3905 translate the text to "normal" before processing the charset data.
3907 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3909 * UI/WebServerResources/generic.js: the progress indicator is on
3910 when loading the page so we turn it off, and we turn it back on
3911 whenever we switch to another module...
3913 * UI/WebServerResources/SchedulerUI.js: make sure the day view
3914 synchronization mechanism works everywhere.
3916 * UI/WebServerResources/generic.js: the log window is not only
3917 visible when UIxDebugEnabled is set.
3919 * UI/WebServerResources/SchedulerUI.js: the month overview's day
3920 cells are now initialized with the DOM event interface methods
3921 instead of with html attributes.
3923 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
3924 headers (should be made configurable at some point)...
3926 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
3927 "not null" constraint on startdate, enddate, isopaque,
3928 participants and partmails.
3930 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3932 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3933 -hoursToDisplay]): prevent a crash by retaining the
3934 "hoursToDisplay" array after it's created.
3935 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
3936 clickable hours DIV.
3938 * UI/WebServerResources/SchedulerUI.js: made the event
3939 participation status modification asynchronous, which also fixes a
3940 bug where the window would sometimes close before the accept or
3941 decline action was completed. Also, adapted the event handling
3942 related to the days or weeks view with the new DIV-based layout.
3944 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
3946 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
3947 DIV-based presentation of the days and weeks.
3949 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
3951 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
3952 might return an exception so we have to handle it if we don't
3955 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3957 * UI/WebServerResources/SchedulerUI.js: updated the list
3958 initialization code to use the new event management scheme, adding
3959 what was missing to be able to delete events and tasks again.
3961 * UI/WebServerResources/MailerUI.js: added code to activate the
3962 "Get mails" button. Fixed a bug which prevented messages to be
3965 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
3966 navigation and focus handling of INPUTs.
3968 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3970 * UI/WebServerResources/MailerUI.js: added code to handle the
3971 possible drag and drop events to manager in the mail module.
3972 Moving messages, opening parent folders, ...
3974 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
3975 the drag and drop manager as well as the interface to HTMLElement
3976 to trigger drag and drop events.
3978 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
3979 action to move the current message to the mailbox named after the
3980 value of parameter "tofolder".
3982 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3983 -moveToFolderNamed:folderNameinContext:]): new method base on
3986 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3988 * UI/WebServerResources/generic.js: added and activated many
3989 "load" handlers to configure generic widgets used across the
3990 modules. More events are now handled in a DOM-fashion way instead
3991 of by setting the relative attributes in the templates.
3993 * UI/Templates/UIxSortableTableHeader.wox: all the events are
3994 declared from the javascript DOM onload handlers.
3996 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
3999 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
4000 declared from the javascript DOM onload handlers.
4002 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
4003 we want everything to be separated from each other, as much as
4006 * UI/WebServerResources/SOGoDragHandles.js: new module containing
4007 the "SOGoDragHandlesInterface", implementing methods that can be
4008 attributed to DIV so that they can be used as drag handles.
4010 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
4011 -asQPSubjectString]): initialize the tmp strings with '0' to make
4012 sure they don't contain garbage.
4014 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4016 * UI/WebServerResources/MailerUI.js: register the messageList
4017 table as a dragging source and the leaf of the navigation tree as
4018 dnd destinations to the DNDManager.
4020 * UI/WebServerResources/generic.js: initialize tabs from the
4021 "unload" event listener that is added programmatically instead of
4022 from the template... Also, added the new DNDManager object.
4024 * UI/WebServerResources/HTMLTableElement.js: added code to
4025 simulate XUL drag n drop events. This code will possibly be moved
4026 to HTMLElement.js instead later...
4028 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4029 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
4032 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4033 -_qualifierForFilter:filter]): only search records which starts
4034 with the specified pattern.
4036 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4038 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
4039 -asQPSubjectString]): new method that returns the special QP
4040 string with its qp declaration for email subjects.
4041 ([SOGoDraftObject -bodyPartForText])
4042 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
4043 double-encode data in UTF-8.
4045 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4046 -newStartDate]): new method to determine the start date depending
4047 on the URL parameters, the current day and the current time.
4048 ([UIxComponentEditor -toolbar]): new method to determine the
4049 filename of the toolbar that should be drawn depending on the
4050 ownership and the list of attendees of the task/event wrt to the
4053 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4054 -setDayStartHour:aStartHour]): adjust the minutes to the next
4055 quarter of hour, if not already set to a quarter.
4057 * UI/WebServerResources/UIxAppointmentEditor.js,
4058 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
4061 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4063 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4064 -loadValuesFromComponent:component]): handles access class
4065 (privacy) and status.
4067 * UI/Contacts/UIxContactsListViewContainer.m
4068 ([UIxContactsListViewContainer -additionalFolders]): return nil if
4069 [self additionalAddressBooks] returns an empty string.
4071 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4073 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
4074 rangesOf7Days]): enhanced and debugged algorithm to feed the array
4075 with slices where the first day is still in the requested month.
4077 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
4080 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
4081 of events in the day boxes of the calendar's monthly view.
4083 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
4084 -davContentType]): declare "text/calendar".
4086 * SoObjects/Appointments/SOGoAppointmentObject.m
4087 ([SOGoAppointmentObject -davContentType]): declare
4090 * SoObjects/Appointments/SOGoAppointmentFolder.m
4091 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
4092 HTTP methods are handled by SOPE and requires nil to be returned,
4093 this method now invokes the new
4094 "requestNamedIsHandledLater:inContext:" method to check that.
4095 ([SOGoAppointmentFolder
4096 -requestNamedIsHandledLater:nameinContext:context]): new methods
4097 that returns "YES" only for the "OPTIONS" http method (for now...).
4098 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
4099 overloaded method to append the "access-control" and
4100 "calendar-access" DAV abilities to the initial declaration.
4102 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
4103 imitate the look of Sunbird/Lightning's monthly view.
4105 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
4106 UIxCalMonthViewOld.[hm].
4108 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4110 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
4111 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
4113 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
4114 returns an image name based on the participation status of the
4117 * UI/WebServerResources/SchedulerUI.js: same strip down as for
4120 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
4121 ([UIxContactsListViewContainer -additionalFolders])
4122 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
4123 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
4124 methods to handle the external addressbooks a user has subscribed
4125 too, by retriving them from his preferences.
4127 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4128 -updateAdditionalAddressBooksAction]): new method that updates the
4129 user settings with the list of addressbook he has subscribed to.
4131 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
4132 module for the address book selector.
4134 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
4135 a toolbar with two buttons ("add" and "remove") to manage the
4136 additional addressbooks a user might subscribe to.
4138 * UI/WebServerResources/ContactsUI.js: added code to handle
4139 "external addressbooks" from the Javascript point-of-view, by
4140 extending existing methods and adding code for the "add ab" and
4141 "remove ab" buttons.
4143 * UI/WebServerResources/generic.js: moved extensions methods to
4144 DOM elements to separate files for better clarity.
4146 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
4147 new method that returns "pageContent" as class, but also "popup"
4148 for the DIV where the page content lies, so that we can manipulate
4149 the content of popup's with CSS identifiers.
4151 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4153 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4154 -displayStyle]): new method that returns a string containing the
4155 css style relative to the current appointment cell. This code is
4156 currently inactive but might be reused later.
4158 * UI/WebServerResources/SchedulerUI.js: added code to handle the
4159 display of the selected day (the day pointed by the mouse, or the
4160 current day when changing the view).
4162 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
4163 -dayCellClasses]): new method that returns a string containing the
4164 css classes applicable to the current cell, depending on the
4165 position of the day in the week, the day of today and the
4168 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
4169 -currentContactAptBorder]): new method that returns the
4170 appropriate border color for the specified user.
4172 * SoObjects/Appointments/SOGoAppointmentObject.m
4173 ([SOGoAppointmentObject
4174 -saveContentString:contentStringbaseVersion:baseVersion]):
4175 overloaded method that parse new events and detects if they have
4176 an organizer or not. If they are new and have no organizer set
4177 (Sunbird/Lightning...), the owner of the event is set as
4180 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
4181 category that provides facility methods and interfaces to the
4184 * SoObjects/Contacts/product.plist: give full access to ANY
4185 authenticated user, not just the owner (to every objects...).
4187 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4189 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
4190 every replica widgets are declared as such to their master
4191 counterpart. Take the days into account when displaying the time
4192 range taken by the appointment.
4194 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
4195 -getICalPersonsFromValue:selectorValue]): method taken from
4196 UIxFreeBusyUserSelector, that is shared both by
4197 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
4199 * SoObjects/Appointments/SOGoAppointmentFolder.m
4200 ([SOGoAppointmentFolder
4201 -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.
4203 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
4204 derived and taken as a subset of UIxFreeBusyUserSelector that
4205 implements the table part of the FreeBusy view. Most of the
4206 methods of UIxFreeBusyUserSelector relative to that table were
4207 moved into UIxFreeBusyUserSelectorTable, which can also be used as
4208 a standalone view for AJAX operations.
4210 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4212 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4213 -vCard]): change reverted.
4215 * UI/Contacts/UIxContactEditor.m: check whether the client contact
4216 folder has selector "globallyUniqueObjectId" before calling that
4219 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4220 -vCard]): the "setVClass" NGVCard method really is "setClass"
4223 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4224 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
4225 request the "streetAddress" instead of the "streetaddress".
4226 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
4227 mails that *contain*, and not just *start with* the search
4230 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4231 -vCard]): mark address returned from LDAP as the work address.
4233 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
4234 span covered with the anchor, not only the textual information
4237 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
4238 argument (event or task) to newEvent in the appointmentListMenu.
4239 Make the appointmentsListView display the appointmentsListMenu.
4241 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
4242 12 to 50 before displaying "...".
4243 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
4244 if its length > 0, whether location itself is nil or not...
4245 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
4246 of which the length > 0.
4248 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4250 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
4251 french and ISO dates.
4253 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
4254 from UIxContactSelector to handle contact lists (current and
4255 additional contacts).
4257 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4258 -_freeBusyAsText]): added handling of an "additional"-named query
4259 parameter that describe the number of additional days after
4260 enddate that should be returned.
4262 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4263 -_responseForResults:results]): give priority to results with
4264 "c_uid" fields. If none returned, use the first contact received.
4266 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4267 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
4268 2 and "CANCELLED" to 0.
4270 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4272 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
4273 of start and end dates to short string dates.
4275 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4276 -readFreeBusyAction]): new method that returns an array of numbers
4277 corresponding to the state in the freebusy of each "quarter of an
4278 hour" between the "sday" and "eday" date parameters passed in the
4279 url. This permits to handle the display of the freebusy with Ajax
4281 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
4282 since the free busy displays 2 days ahead.
4284 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4285 -contactSearchAction]): new action that returns the uid and the
4286 username + email of the user whose name contain the value of the
4287 "search" url parameter.
4289 * SoObjects/Appointments/SOGoAppointmentFolder.m
4290 ([SOGoAppointmentFolder
4291 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
4292 useful for the computing of the status of the freebusy.
4294 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
4295 -init]): new component that incarnates a user selector for events
4296 inspired by the new one found in Thunderbird Lightning.
4298 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4300 * UI/WebServerResources/generic.js: added code to enable or
4301 disable anchor visually (following our internal algorithm).
4303 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
4304 added new "url" ivar with its classic accessors.
4305 ([UIxComponentEditor -urlButtonClasses]): new method that returns
4306 the class strings for the url button on the appointment/task
4307 editor (depending on the validity of the url).
4309 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
4310 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
4311 the template to match the Lightning's new task/appointment editor.
4313 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
4315 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
4317 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4319 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4320 ([SOGoContactLDAPFolder
4321 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
4323 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
4324 iCalEntityObject instances instead of just iCalEvent's.
4326 * SoObjects/Appointments/SOGoAppointmentFolder.m
4327 ([SOGoAppointmentFolder
4328 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
4330 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
4331 bad way of handling ownership that way.
4333 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4334 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
4335 on "cn", just like Mozilla.
4337 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4339 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
4340 "to" should be retained, otherwise it will be autoreleased and a
4343 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4344 -writeAction]): updated method to fetch the card before initing
4347 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4348 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
4351 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
4352 -iCalStringTemplate]): start and due date are now optional.
4354 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4355 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
4356 appropriate accessors to be settable through the templates.
4358 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
4359 new "isDisabled" ivar with appropriate accessors to be
4360 settable through the templates.
4362 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4363 -availableCalendars]): new method that list the calendars to which
4364 the user has subscribed.
4365 ([UIxComponentEditor -componentOwner]): returns the owner of the
4368 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4369 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
4370 quickentries to null whenever each or all of them are null, by
4371 providing an impossible timestamp from with NSNotFound as value.
4373 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4375 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
4376 that handles the creation of new fields with the new APIs and the
4377 new node structure on the page.
4379 * UI/Scheduler/UIxAppointmentEditor.m,
4380 UI/Scheduler/UIxTaskEditor.m:
4381 refactored to user UIxComponentEditor as parent class.
4383 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
4384 containing the methods common to the UIxTaskEditor and the
4385 UIxAppointmentEditor.
4387 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4389 * SoObjects/Appointments/SOGoAppointmentFolder.m
4390 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
4391 the handling of time-ranges.
4393 * UI/WebServerResources/ContactsUI.js: specify a notification type as
4394 parameters when onConfirmContactSelection in invoked.
4396 * UI/WebServerResources/generic.js: specify a notification type as
4397 parameters when onContactRemove in invoked.
4399 * UI/WebServerResources/SchedulerUI.js: when the user deselects
4400 all calendars, select his entry.
4402 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4404 * UI/WebServerResources/SchedulerUI.js: edit and delete events
4405 with their owner-relative urls. Generate a correct entry in the
4406 css color table when a user is added to the calendars list. Put
4407 the same color next to the user id.
4409 * UI/WebServerResources/generic.js: implemented some new helper
4412 * SoObjects/Appointments/SOGoAppointmentFolder.m
4413 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
4414 entries if their owner is not the current user.
4416 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4417 -displayClasses]): return the correct class for the current event
4418 representation depending on its owner.
4420 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
4421 and associate a color for each user login depending on its
4422 position in the list.
4424 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
4425 -currentRowCSSClass]): return the correct class for the current
4426 row depending on the owner of the event.
4428 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4429 -setColors:colors]): new method to associate a color table with
4430 each user in the list.
4432 * SoObjects/Appointments/SOGoAppointmentFolder.m
4433 ([SOGoAppointmentFolder
4434 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
4436 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
4437 NSObject to associate an instance with a user.
4439 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4441 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
4444 * UI/WebServerResources/ContactsUI.js: added handling of
4445 notification of changes to contact selectors.
4447 * UI/WebServerResources/generic.js: added handling of notification
4448 of changes to contact selectors.
4450 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4451 -updateCalendarsAction]): proxy method to update the user
4452 preference table with the new selected calendar uids.
4454 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
4455 -calendarsContactsAction]): new method.
4457 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
4458 ([UIxContactSelector -setHasCheckBoxes:aBool])
4459 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
4460 permit the drawing of checkboxes instead of card icons.
4462 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
4463 wrap a selector the the "Calendars" tab.
4465 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
4466 new user calendar selector.
4468 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4470 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
4471 may cover hour 0 to hour 23.
4473 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4474 -iCalStringFromQueryParameter:format:]): dates explicitly set to
4477 * UI/WebServerResources/SchedulerUI.js: manage both lists of
4478 objects wrt to the toolbar actions.
4480 * UI/WebServerResources/generic.js: added code to the "String"
4481 class to decode number-encoded char entities.
4483 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4484 -batchDeleteAction]): new method to delete selected entries in the
4487 * SoObjects/Appointments/SOGoAppointmentFolder.m
4488 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
4489 that delete identified entries in batch.
4491 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4492 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
4494 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
4495 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4496 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
4497 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4499 return a UIxJSClose component if everything went fine.
4501 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
4504 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
4505 UIxAppointmentEditor.m.
4507 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
4508 a very light page with javascript code to close a window, by
4509 calling a method on the opener if specified. This component is
4510 designed to work as a response to form postings.
4512 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4514 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
4515 SOGoAppointmentObject adapted for the handling of tasks.
4517 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
4518 extracted from SOGoAppointmentObject.
4520 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4521 -saveUrl]): returns the url needed to POST the new form to.
4522 redirect the user to <aptid>/editAsAppointment instead of /edit,
4523 so that SOGoAppointmentFolder can return the correct object type.
4525 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
4526 -compareAptsAscending:_other]): accept empty start or end dates.
4528 * SoObjects/Appointments/SOGoAppointmentFolder.m
4529 ([SOGoAppointmentFolder
4530 -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.
4531 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
4532 components of type "vtodo" as well as "vevent".
4533 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
4534 url specified ends with AsTask or AsAppointment, returns the
4535 an object of the appropriate class, otherwise deduce it from its
4536 content if the HTTP method is "PUT", otherwise read its type from
4539 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4540 -extractQuickFieldsFromTodo:_task]): extract quick fields from
4543 * UI/Scheduler/UIxCalView.m ([UIxCalView
4544 -fetchCoreAppointmentsInfos]): replacement methods for
4545 fetchCoreInfos but by retrieving object with component "vevent".
4546 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
4549 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
4550 UIxCalAptListView adapted for the handling of tasks.
4552 * UI/Scheduler/UIxTaskProposal.[hm],
4553 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
4554 clones of the UIxAppointment* classes for the handling of tasks.
4556 * UI/WebServerResources/UIxTaskEditor.js: clone of
4557 UIxAppointmentEditor adapted for the handling of tasks.
4559 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
4560 Scroll the daily view to the appropriate hour when an appointment
4561 is selected in the appointments list.
4563 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4565 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4566 -setDayStartHour:aStartHour]): specifies the user timezone on the
4569 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
4572 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
4573 ([NSCalendarDate -driftedDate]): methods made useless by a better
4574 comprehension of the NSTimeZone API...
4576 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4578 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
4579 new methods from the NSCalendarDate methods.
4581 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
4582 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
4584 +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).
4585 ([NSCalendarDate -adjustedDate]): this method returns another
4586 instance set to the correct hour after the original date was set
4587 from a non-GMT timezone. This date can be used for storage.
4588 ([NSCalendarDate -driftedDate]): this method does exactly the
4589 opposite of -adjutedDate, that is, it enables the method
4590 hourOfDay, minuteOfHour etc... to return the values according to
4591 the original date's timezone. This date CANNOT be used for storage.
4593 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
4594 -shortDateString]): new method that will return a "short date
4595 string" (yyyymmdd) from a calendar date object.
4597 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4598 -_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.
4600 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
4601 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
4603 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4605 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
4606 view of the day at the height of hour 8:00.
4608 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
4609 ([UIxCalView -dayEndHour]): returns 24.
4611 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
4612 ([UIxContactFoldersView -newAction]): invoke
4613 _selectActionForApplication: on self with the proper attribute too.
4615 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
4616 we now use the action mechanism in UIxContactsListView to keep the
4617 same view for the contact selectors and the regular contact view.
4619 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
4620 UIxContactsListViewContainerBase.[hm]
4622 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
4624 * UI/WebServerResources/generic.js: generalized emailstring
4625 handling functions. Generalized address book access functions.
4627 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4628 -isPopup]): return YES if the "popup" query parameter is set.
4630 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4631 -defaultAction]): keep the url parameters when redirecting.
4632 ([UIxContactFoldersView -selectForSchedulerAction])
4633 ([UIxContactFoldersView -selectForMailerAction]): new action
4634 methods for the /scheduler-contacts and /mailer-contacts invocations.
4636 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
4637 newly available NSString+URL category.
4639 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
4640 -asURLParameters]): handle dictionary entries which could be
4641 instances of NSArray rather than NSString.
4643 * SoObjects/SOGo/NSString+URL.m ([NSString
4644 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
4645 ([NSString -urlWithoutParameters]): new method that returns the
4646 url without its parameters.
4648 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
4650 * SoObjects/SOGo/NSDictionary+URL.[hm],
4651 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
4653 * UI/WebServerResources/UIxMailEditor.js: add support for
4654 additions of different types (to, cc, bcc) of recipients from the
4657 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
4660 * UI/Contacts/UIxContactsMailerSelection.m,
4661 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
4662 UI/Contacts/UIxContactsSelectionView.m to provide a different set
4663 of widgets depending on the application invoking the contact list.
4665 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4667 * UI/WebServerResources/ContactsUI.js: hide the current contact
4668 whenever the user changes of contact folder.
4670 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
4671 now provided by the template when loading the page.
4673 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4674 -iCalPersonWithUid:uid]): new method taken from removed module
4677 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4679 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
4680 -categoriesAsString]): same as below.
4682 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
4683 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
4685 * SoObjects/Appointments/SOGoAppointmentObject.m
4686 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
4687 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
4690 * SoObjects/Appointments/SOGoAppointmentFolder.m
4691 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
4692 hackish test to detect whether the request concernes VEVENT's or
4693 anything else. Return events only in the former case.
4694 ([SOGoAppointmentFolder
4695 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
4696 c_name quickfield so that the calendar list can identify the
4697 appointments with their complete "filename".
4699 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
4700 groupsOfClass:fromSource: to parse the given vcalendar.
4702 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
4704 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
4706 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
4709 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
4711 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4713 * SoObjects/Appointments/SOGoAppointmentFolder.m
4714 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
4715 sensitive to the CalDAV method names.
4716 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
4717 "calendar-query" CalDAV method name.
4719 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
4720 code coming originally from MailerUI.js.
4722 * UI/WebServerResources/UIxContactEditor.js: imitate the
4723 Thunderbird address book by completing the display name with the
4724 content of the first and last name fields, until the display name
4725 is modified manually.
4727 * UI/WebServerResources/generic.js: added a "trim" method to the
4730 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4731 -displayName]): new method that returns the display name from "cn"
4732 or from the "displayName" key if found.
4734 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4735 -initSnapshot]): check if "[card n]" returns anything to avoid a
4738 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
4739 that returns an unparsed doctype definition for the pages.
4741 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4742 -vCard]): set the card's fn to attribute "displayName" if found
4745 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4747 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4748 -vCard]): handle the "streetAddress" and "l" fields.
4750 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
4751 header fields by converting the tables to DIVs and SPANs.
4753 * UI/WebServerResources/generic.css: attempted unification of font
4754 families and size across all the elements. changed the
4755 logConsole's "position" from "fixed" to "absolute" to avoid
4758 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4760 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
4761 empty the contact view when the current contact is being deleted.
4763 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
4764 parse the email field and provide the address full name if found
4765 as the "contactFN" parameter.
4767 * UI/WebServerResources/generic.js (openMailTo): do not give a
4768 name to the opened window so that serveral ones can be opened at
4771 * UI/MailPartViewers/UIxMailPartTextViewer.m
4772 ([UIxMailPartTextViewer -flatContentAsString]): override method by
4773 replacing carriage returns with "<br />" in the result string from
4774 super's implementation.
4776 * UI/Contacts/UIxContactView.m ([UIxContactView
4777 -_urlOfType:aType]): don't manage non-mailto urls through
4778 javascript, let the user decide what's best for him.
4780 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4781 -newAction]): transfer all the query parameters by using the
4782 "asURLParameters"'s result string from [self queryParameters].
4784 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4785 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
4786 query parameters and put their values (if any) into the snapshot.
4788 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
4789 carriage-returns to "<br />".
4790 ([UIxContactView -workCompany]): explicitly initialize company to
4791 nil if org is nil or empty.
4793 * UI/WebServerResources/UIxContactEditor.js: updated validation
4794 code after we added and renamed some fields.
4796 * UI/WebServerResources/ContactsUI.js: added code to cache contact
4797 cards and to handle card updates.
4799 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4801 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
4802 test the length of the returned string since they will never be
4805 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
4806 return self if the process went successful, returns an exception
4807 otherwise (and only otherwise...).
4809 * OGoContentStore/OCSContactFieldExtractor.m
4810 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
4811 adapted method to the new VCard api. Since the cards are stored in
4812 vcard format, we no longer deal with a dictionary but with a
4815 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4817 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
4818 return a string with a "mailto" url.
4819 ([UIxContactView -_urlOfType:aType]): generic method to return a
4820 url string with a html anchor pointing to it.
4822 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
4823 since subclass "UIxContactEditor" did nothing. Implemented code to
4824 display and modify the values parsed from the vcards, displayed in
4825 a way similar to the Thunderbird addressbook.
4827 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4828 -save]): new dummy method.
4830 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4831 -save]): made method void.
4833 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4835 * UI/Contacts/UIxContactView.m: added many wrapper methods to
4836 display blocks of data à la Thunderbird Addressbook. If data is
4837 available, those wrappers (around the NGVCard methods) will
4838 enclose the results in a proper HTML output with the correct label
4839 (if present), otherwise it will return an empty string.
4840 ([UIxContactView -vcardAction]): new action to return the contact
4841 as text/vcard (for exporting).
4843 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4844 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
4846 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4847 -vCard]): create a new NGVCard instance when no data is available
4849 ([SOGoContactGCSEntry -save]): save the vCard using the new
4850 "versitString" API method/message.
4852 * UI/Contacts/UIxContactView.h: separated interface from
4855 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
4856 views and display them beneath the list.
4858 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4860 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
4861 the timezone even when it's the server timezone.
4863 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4864 -privateContacts:inContext:]): no long configure the calendar
4865 object with the user's timezone since it's now accessible
4866 application-wide throught the SOGoObject methods.
4868 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
4869 method. Removed the "backendTimeZone" method.
4871 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
4872 instead of SoComponent.
4874 * SoObjects/Appointments/SOGoAppointmentObject.m:
4875 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
4876 [self serverTimeZone] instead of "EST" (which was removed).
4878 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
4879 "timeZone" ivar and its accessors.
4881 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
4882 centralized method returing the timezone configured in the
4883 userdefaults db or "Canada/Eastern" if missing.
4884 ([SOGoObject -userTimeZone]): new centralized method returing the
4885 timezone of the current user or the server timezone if missing
4886 from the user configuration table.
4888 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4890 * UI/WebServerResources/SchedulerUI.js: implemented caching of
4893 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
4894 return a path based on the object's context instead of the first
4895 level in SOGo's object hierarchy...
4897 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4899 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
4902 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
4903 timezone ([self viewTimeZone]) to the WEMonthOverview component to
4904 avoid a confusion with the days.
4906 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
4909 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
4910 imitate Sunbird's synchronization between the 3 visible views.
4912 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
4913 sure the numbers in dateString are formatted so as to take 4 chars
4914 for the year and 2 for the day and the month, otherwise
4915 NSCalendarDate will return a nil date.
4916 ([UIxComponent -applicationPath]): return a path based on the
4917 object's context instead of the second level in SOGo's object
4920 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4922 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
4923 user's timezone abbreviation to the date string passed as parameter to
4924 NSCalendarDate to generate an accurate date instance. Do the same
4925 when no date is specified and today is chosen.
4927 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
4928 form's time values to integers before comparing them.
4930 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
4931 ([UIxCalAptListView -currentEndTime]): initialize the resulting
4932 dates timezone with [self viewTimeZone].
4934 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
4935 "viewTimeZone" ivar destined to hold an instance of the user's
4937 ([UIxComponent -viewTimeZone]): take the timezone from the user's
4940 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4942 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
4943 rearranged the layout.
4945 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
4946 manage showing and hiding appointment details.
4948 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4949 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
4950 timezone by taking the current user's timezone setting.
4952 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
4954 * SoObjects/Appointments/SOGoAppointmentObject.m
4955 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
4956 set default timezone to EST, although this code should be
4957 rewritten to handle a system and a user default value.
4959 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4960 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
4961 take the values from the hour and minute INPUTs when data is
4962 POSTed since we no longer use the UIxTimeSelector component.
4963 ([UIxTimeDateControl -selectableHours])
4964 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
4965 template SELECTs to display reasonable and acceptable values
4966 instead of all the possibilities.
4968 * UI/WebServerResources/generic.js: adapted code for the new
4969 implementation of the UIxContactSelector component (added a
4970 "remove" button, removed the previous INPUT and replaced them with
4971 links of class "button").
4973 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
4974 UIxTimeDateControl.m.
4976 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
4977 ([UIxCalDayTable -currentAppointmentHour]): new methods that
4978 returns correctly formatted values used as attributes for JS code.
4980 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4981 -initialContactsAsString]): renamed implementation of
4982 initialParticipants.
4983 ([UIxContactSelector -currentContactId])
4984 ([UIxContactSelector -currentContactName]): new methods used when
4985 listing the initial contacts in the widget. Currently, both return
4986 the person's cn but the latter should ultimately return a user
4989 * UI/Contacts/UIxContactSelector.h: separated interface from
4990 UIxContactSelector.m.
4992 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
4993 all javascript code is now put in Scheduler.js/generic.js.
4995 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
4996 moved into NSCalendarDate+Scheduler instead.
4998 * SoObjects/Appointments/SOGoAppointmentFolder.m
4999 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
5000 configure the timezone from SOGoUserFolder when the instance is
5002 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
5003 the value of the new "timezone" ivar.
5005 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5007 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
5008 the date selector in the first page and the container of the
5009 future calendar selector in the second page.
5011 * UI/WebServerResources/generic.js: added code for handling tabbed
5014 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
5015 returns the bundle name associated to the current running product.
5017 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5019 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
5020 exception by invoking a timeout on the opener rather than invoking
5021 the list refresh method.
5023 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
5026 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
5027 ([UIxCalWeekView -prevWeekQueryParameters])
5028 ([UIxCalWeekView -nextWeekQueryParameters])
5029 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
5030 that return the dates relatively to the current day.
5031 ([UIxCalWeekView -lastWeekName])
5032 ([UIxCalWeekView -currentWeekName])
5033 ([UIxCalWeekView -nextWeekName])
5034 ([UIxCalWeekView -weekAfterNextWeekName])
5035 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
5036 methods that returns the label for the corresponding weeks.
5038 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
5039 used by UIxCalDayView and UIxCalWeekView to display the events
5040 occuring in one or more days.
5042 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5044 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
5045 entries in the new "monthMenu" and "yearMenu".
5047 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
5048 method to return the current day as a string formatted depending
5049 on the current locale.
5051 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
5052 ([UIxCalAptListView -endDate]): "today" is now the default filter
5053 for displayed events.
5054 ([UIxCalAptListView -currentSerialDay]): new method returning the
5055 date of the current enumerated appointment in serial form
5058 * UI/WebServerResources/SchedulerUI.js: added code to select the
5059 relevant day when an appointment is selected. Added code to popup
5060 a month and a year menu whenever the header entries are clicked in
5061 the calendar widget.
5063 * UI/WebServerResources/generic.js: made addClassName and
5064 removeClassName methods of HTMLElement.
5066 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5068 * UI/WebServerResources/MailerUI.js: fixed the contact creation
5069 from email addresses.
5071 * UI/WebServerResources/generic.js: centralized the search-related
5072 functions here since the same code was used across the 3
5075 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
5076 ([UIxCalAptListView -endDate]): return the required dates needed
5077 depending on the value given to the "filterpopup" url parameter.
5079 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
5080 code by invoking UIxComponent's labelForKey:.
5082 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
5083 [self pageResourceManager] instead of [self resourceManager].
5085 * UI/Contacts/UIxContactEditorBase.m: invokes
5086 globallyUniqueObjectId on the clientobject's class instead of the
5087 hardcoded "SOGoFolder".
5089 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
5090 -newAction]): redirect the "new" action to the personal (default)
5093 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
5094 +objectWithName:inContainer:]): new constructor.
5096 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
5097 -lookupContactWithId:recordId]): always create a contact object,
5098 even if it does not exist.
5100 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5102 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
5103 component that lays out the different components of SOGoCalendar.
5104 Only serves as an Objective-C counterpart to its xml template.
5106 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
5109 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
5110 display a widget to handle the information displayed in the
5111 appointments list. Not currently used, lacks implementation.
5113 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
5114 display a calendar as a dynamic widget from where one can select
5115 the current visible day.
5117 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
5118 extracted from UIxCalInlineMonthOverview.m.
5120 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
5121 calendarPageURL methods. The javascript code is handled by .js
5122 files as much as possible...
5124 * UI/WebServerResources/ContactsUI.js,
5125 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
5128 * UI/WebServerResources/SchedulerUI.js: implemented functions to
5129 handle the new widgets. XmlHTTPRequest code taken from
5132 * UI/WebServerResources/generic.js: put some functions related to
5133 element selections as methods to HTMLElement and HTMLTableElement.
5135 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
5136 display the list of appointments (embodies the code-size of
5137 UIxCalAptListView; answers to the "aptlist" method).
5139 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5141 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
5142 -correctURLAction]): new short action method replacing the method
5143 below by taking far less code.
5145 * SoObjects/Appointments/SOGoAppointmentFolder.m
5146 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
5147 with an action in the view-related code.
5149 * UI/Scheduler/UIxAppointmentEditor.m: invoke
5150 "stringByEscapingHTMLString" on the resulting value to avoid
5151 issues with accented characters.
5152 ([-jsCode]): removed method since the javascript code was merged
5153 into SchedulerUI.js.
5155 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5157 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
5158 new class method that returns an iCalPerson based on the UID given
5161 * UI/Contacts/UIxContactsListViewContainerBase.m:
5162 UIxContactsListViewContainer renamed to serve as a base class for
5163 the contact lists in both the contact editor and the contact
5166 * SoObjects/Contacts/SOGoContactLDAPFolder.m
5167 ([SOGoContactLDAPFolder
5168 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
5169 setUserIdentifier:setRootDN:]): an LDAP field specifying the
5170 loginname of the users can now be specified.
5172 * UI/WebServerResources/generic.js: added code to manage contact
5173 lists through the new implementation of the UIxContactSelector.
5175 * UI/Templates: put the templates related to SchedulerUI in its
5178 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
5179 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
5180 entry for "uid" with the field name representing the login name of
5181 the user in the corresponding LDAP branch.
5183 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5185 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
5186 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
5187 request is a PUT, always create an entry, even if we're not sure
5190 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5192 * UI/WebServerResources/ContactsUI.js: implemented live-search.
5194 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
5195 -appendSystemSourcesInContext:context]): populated method with
5196 code that creates entries mapped to instances SOGoContactFolder,
5197 based on the configuration found in the NSUserDefaults under the
5198 key "SOGoLDAPAddressBooks".
5199 ([SOGoContactFolders
5200 -lookupName:nameinContext:contextacquire:acquire]):
5201 "contactsources" do not exist anymore, SOGoContactFolder was split
5202 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
5203 and one protocol: SOGOContactFolder, instead.
5204 ([SOGoContactFolders -contactFolders]): new accessor used by the
5205 views of SOGoContactXXXFolder to list the possible sources.
5207 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
5208 defines the methods that UIxContactsView, ..Editor and so on...
5211 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
5212 defines the methods that UIxContactsListViewBase expects as well
5213 as the data fields returned in the contact lists.
5215 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
5216 returns entries an LDAP server. Conforms to the new
5217 SOGOContactFolder protocol.
5219 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
5220 returns a vCard based on contact entries from an LDAP server.
5221 Conforms to the new SOGOContactObject protocol.
5223 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
5224 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
5225 entry for the textual representation of the vCard.
5227 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
5230 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
5231 "SOGoContactObject".
5233 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
5234 method that generates a textual representation of the vcard.
5236 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
5238 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
5239 "SOGoContactFolder".
5241 * SoObjects/Contacts/SOGoContactSource.h,
5242 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
5245 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
5246 -singleAttributeWithName:key]): new method that returns the first
5247 object associated with an ldap key (where generally one value is
5250 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
5251 map the entry into an NSDictionary for processing by
5252 UIxContactsListViewBase.m with the least possible overhead.
5254 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
5257 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5259 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5260 -privateContacts:inContext:]): now returns an instance of
5263 * UI/Contacts/UIxContactsListViewContainer.m
5264 ([UIxContactsListViewContainer -contactFolderName]): new method to
5265 return the absolute path to the current contact folder, called
5266 from within the template.
5268 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
5269 JS code to initialize the 'currentContactFolder' generic var.
5271 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
5272 +contactFolderWithSource:inContainer:andName:]): new class
5273 method meant to return an instance connected to the specified
5274 source. Currently useless but won't be anymore in the next few
5277 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
5278 the "lookupFreeBusyObject" method since it does not exist.
5280 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
5281 as a "view" for the SOGoContactFolders object. Does nothing but
5282 redirect the browser to the URL of the personal address book of
5283 the user. It does not even have a template.
5285 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
5286 implementing the SOGoContactSource protocol. Does nothing
5287 currently but will be used to implement access to the personal
5288 address book of the user stored in the SOGo database.
5290 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
5291 protocol defining an API common to all possible types of contact
5294 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
5295 serving as the root of the contact folders available to the
5296 current user. Correctly lists the contact sources in webdav.
5298 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5300 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
5301 -composeAction]): new action method that permits external object
5302 to write a message from the default (primary) account.
5304 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5305 -initSnapshot]): new method with code taken from "defaultAction"
5306 but needed for others.
5307 ([UIxContactEditorBase -writeAction]): new action designed to
5308 compose the correct URL needed to obtain the MailerUI's email
5309 editor with the correct "mailto" parameter.
5311 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
5312 Common so that other modules can use it.
5314 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
5315 easier to manage both ajax and non-ajax requests.
5317 * UI/Contacts/UIxContactsFilterPanel.m: clone of
5318 UIxMailFilterPanel, but applicable to contact lists.
5320 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
5321 -vcardContentFromSOGoContactRecord]): use the new standard methods
5322 created for each type of entry. If a line is determined to not
5323 contain information, it will be skipped.
5325 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
5326 +initialize]): init defaultMailDomain with the user default
5327 "SOGoDefaultMailDomain".
5329 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5331 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5332 -saveAction]): reorganized methods to only have ONE return point.
5333 Invoke saveRecord: directly on the clientObject instead of
5334 saveContentString, which does the same thing anyway.
5336 * SoObjects/Contacts/NSDictionary+Contact.m
5337 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
5338 method to convert the dictionary returned with the user submission
5339 to a record in VCARD format to be stored in the database.
5341 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5343 * UI/WebServerResources/MailerUI.js: when opening the context menu
5344 of the message list, select the message below the mouse cursor and
5345 deselect the other selected messages temporarily. This mimics the
5346 behaviour of Thunderbird for that matter and was already
5347 implemented for the entries of the folder tree.
5349 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
5350 -iconForMenuItem]): new method that returns the fully qualified
5351 relative URL to the icon representing the mailbox, or the default
5352 mailbox icon if needed.
5354 * UI/SOGoUI/UIxComponent.m ([UIxComponent
5355 -urlForResourceFilename:filename]): automatically return an empty
5356 string whenever the filename passed as argument is nil.
5358 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
5359 "desc" parameter set to 1 so that they are sorted in descending
5360 order by default. Also, added "onHeaderClick()", triggered by
5361 clicking on the message list header elements.
5363 * UI/MailerUI/UIxMailSortableTableHeader.m
5364 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
5366 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5367 -isSortedDescending]): defaults to "YES" when the sort order is
5370 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5372 * UI/WebServerResources/MailerUI.js:
5373 - message cache: set the max num of cached messages to 20. Limit
5374 the cached message size to 30000 bytes.
5375 - ajax: when a message request is called while one is already
5376 being performed, the latter will be cancelled. Idem when
5377 retrieving the content of a mailbox.
5378 - folder tree: when a mailbox is selected because of the URL
5379 requested (initMailboxSelection), the dtree is expanded throughout
5380 the mailbox entry's parent hierarchy to ensure it is made visible
5381 when the page is being displayed. (new function: expandUpperTree).
5382 - mailbox loading: when loading a mailbox where a message was
5383 previously selected, we invoke its url with the "pageforuid"
5384 parameter correctly specified. During callback processing, we scan
5385 the table for the related row and reselect it.
5386 Also, the message area is set blank before loading any mailbox.
5388 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5389 -defaultAction]): if the "pageforuid" parameter is passed in the
5390 url, take its value and invoke [self firstMessageOfPageFor:]
5391 consequently to deduce the first message to display. Otherwise,
5392 set it to "idx", otherwise set it to 0.
5393 ([UIxMailListView -firstMessageOfPageFor:]): new method
5394 that determines the first message of the page where the message
5395 passed as parameter is contained.
5397 * UI/WebServerResources/UIxMailListView.js: removed this module,
5398 its code was put in MailerUI.js instead.
5400 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5402 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
5403 which returns the nodes for the parent specified in "parentMenu".
5404 Used to generate the javascript code for the folder dtree.
5406 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
5407 using that container-template are now using UIxMailMainFrame
5408 since UIxMailPanelFrame had no real interest. File removed.
5410 * UI/WebServerResources/dtree.{css,js}: new files to handle
5411 javascript-generated mailbox tree. Modified from original version
5412 by integrating the previous code with the one we are using for
5413 selections and mailbox handling. Minor visual enhancements too...
5415 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5417 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
5418 returned, put it in an NSArray before returning it (fixes
5421 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5423 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
5424 that returns a url string stripped from its "http://hostname"
5427 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
5429 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
5431 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5433 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
5434 -mailDateFormatter]): retrieve the timezone from the user settings
5435 and pass it to the returned dateFormatter. Also, the dateFormatter
5436 is kept in a static variable to avoid useless
5437 creations/destructions.
5439 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
5440 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
5442 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
5443 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
5444 s/Criteria/Text/ to handle the "criteria" form parameter.
5446 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5448 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
5449 to integrate better with the firefox look&feel. Added entries for
5450 the new "menu" DIV class (popup menus).
5452 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
5453 takes any chunk of text as param, detects the user email and the
5454 optional first and last names and return them in a well-formatted
5455 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
5456 namespace conflict. Added "onMenuClick(node, event, menuId)" to
5457 handle popup menus through "onclick" element attributes (node =
5458 this, event = event and menuId = name of the menu DIV id to
5461 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5462 -snapshot]): add an entry for "email" into the snapshot
5463 dictionary if a "contactEmail" URL parameter was detected and if
5464 the entry for "email" is empty.
5466 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
5467 button now invokes the newContact() js function in ContactsUI.js
5468 instead of opening "new" directly. newContact() pops up a window
5469 stripped from its navigation bar.
5471 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
5472 bundle (AddressBook).
5474 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
5475 "menu" and id "addressMenu" have the header email addresses
5476 display it with the new menu code in generic.js.
5478 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
5479 replaced the body tables with a div of class "pageContent"
5480 (standardization across the page templates).
5482 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
5483 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
5484 those are now inherited from UIxPageFrame.
5486 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
5488 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
5489 a "mailto" URL parameter is detected and the "to" array is empty,
5490 initialize "to" with the value of "mailto" before returning it.
5492 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
5493 -composeAction]): rewrote method in a cleaner way and with usage
5494 of the URL extensions to NSString and NSDictionary (see below).
5495 Also, if a "mailto" url parameter is detected, pass it to the
5498 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
5501 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
5502 returns a parameter string to add to a base URL.
5504 * UI/Common/NSString+URL.m ([NSString
5505 -composeURLWithAction:parameters:andHash:useHash]): new method to
5506 compose a complete URL from an object URL with parameters and an
5507 optional '#' character.
5509 * UI/Common/UIxPageFrame.h: separated interface from
5512 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
5514 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
5516 * UI/WebServerResources/generic.js: added code to manage
5517 selections within HTML containers.
5519 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
5520 added method to determine the possible URL for a product-specific
5521 javascript filename of the forme <productname>.js.
5522 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
5523 ([UIxPageFrame -isPopup]): new method to determine whether the
5524 application navigator bar should be displayed (main page) or not
5527 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
5528 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
5529 the user through LDAP.
5531 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5533 * The toolbar code from the MailerUI product was taken, renamed as
5534 "UIxToolBar" and put into UI/Common. Toolbar plists were created
5535 for the Contacts and Scheduler products and put in their respectir
5536 Toolbars/ subdirectories. Finally,
5537 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
5538 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
5539 and an invocation to the UIxToolbar component was put at the top
5540 of UI/Templaces/UIxPageFrame.wox.
5542 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
5543 within the templates whether a separator should be displayed.
5545 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
5546 that returns NO if the toolbar is empty.
5548 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5550 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
5552 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
5553 new toolbar objects.
5555 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
5557 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
5558 linkbanner as a DIV instead of a TABLE.
5560 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
5562 returns 'YES' to request the display of the navigation bar between
5565 2006-06-15 ludovic@inverse.ca
5567 * It's now possible to set the default
5568 domain using for email using the
5569 SOGoDefaultMailDomain preference key.
5571 2006-06-15 ludovic@inverse.ca
5573 * Initial import of SOGo from trunk.