1 2007-12-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3 * SoObjects/Appointments/SOGoCalendarComponent.m
4 ([SOGoCalendarComponent -contentAsString]): securize the returned content.
5 ([SOGoCalendarComponent -aclsForUser:uid]): check whether the user
6 is an organizer or a participant as well.
8 * SoObjects/Appointments/SOGoAppointmentObject.m
9 ([SOGoAppointmentObject -changeParticipationStatus:_status]): the
10 user we should change the status of is not the active user but the
11 owner of the object. This is for delegation.
13 * SoObjects/Appointments/SOGoAppointmentFolder.m
14 ([SOGoAppointmentFolder -fetchContentObjectNames]): fetch the
15 elements through the fetchFields:from:to:title:component: method
16 method, so that the result is already filtered depending on the
19 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
20 -toolbar]): if the current user is a delegate, take the permission
21 "ModifyComponent" into account. Also, do not let him/her modify an
22 event for which he/she is the organizer.
24 * SoObjects/Contacts/SOGoContactLDAPFolder.m
25 ([SOGoContactLDAPFolder -davResourceType]): declared as a carddav
26 addressbook collection.
28 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
29 -davResourceType]): declared as a carddav addressbook collection.
31 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davLastModified]):
32 override SoObject's implementation. Otherwise a localized date is returned.
34 * UI/Common/UIxPageFrame.m ([UIxPageFrame -isCalendar])
35 ([UIxPageFrame -isContacts], [UIxPageFrame -isMail]): getters to
36 determine which module is the current one.
38 2007-12-06 Francis Lachapelle <flachapelle@inverse.ca>
40 * UI/Scheduler/NSArray+Scheduler.m ([NSArray -compareEventsTitleAscending:otherEvent])
41 ([NSArray -compareEventsLocationAscending:otherEvent])
42 ([NSArray -compareEventsEndDateAscending:otherEvent])
43 ([NSArray -reversedArray]): new methods that sort an array of
44 events depending of various parameters.
46 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
47 -eventsListAction]): added support for sorting events.
49 2007-12-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
51 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction])
52 ([UIxMailEditor -sendAction]): make sure that the attachments
53 having the same filename are correctly sequenced (ex: base.ext,
54 base-1.ext, base-2.ext).
56 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
57 -fetchBLOB]): added support for quoted-printable decoding. Also,
58 we return nil if the type is not supported.
60 2007-12-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
62 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -newAction]):
63 create task obejcts with the .ics extension.
65 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
66 -newAction]): create appointment objects with the .ics extension.
68 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -newAction]):
69 create objects with the .vcf extension.
71 * Main/NSException+Stacktrace.m: added missing symbols from
72 NSException.m and NSDebug.m (GNUstep).
74 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
75 -foldersSearchAction]): make use of the new search methods in
76 SOGoUserFolder (see below).
78 * UI/Contacts/UIxContactFoldersView.m ([-foldersSearchAction]):
79 moved method into ../MainUI/SOGoUserHomePage.m.
81 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
82 -foldersOfType:folderTypeforUID:uid]): only return folders owned
83 by the specified user.
85 2007-12-05 Francis Lachapelle <flachapelle@inverse.ca>
87 * SoObjects/Mailer/SOGoDraftObject.m: the condition for replyToAll
88 has to be done later to avoid duplicated to and cc addresses.
90 2007-12-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
92 * SoObjects/Appointments/SOGoAppointmentFolder.m
93 ([SOGoAppointmentFolder -davCalendarQuery:queryContext]): fixed a leak.
95 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder -davSubscribe:localContext])
96 ([SOGoGCSFolder -davUnsubscribe:localContext]): subscribe an
97 unsubscribe from DAV-based accesses. We could be compatible with
98 Microsoft's extensions but we have no need for a "subcription id",
99 so we implement our own.
101 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
102 -POSTAction:localContext]): new method to intercept DAV POSTs,
103 which we now use to implement certain custom commands such as
104 "subscribe" and "unsubscribe".
106 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
107 -davNamespaces]): declare the
108 "urn:inverse:params:xml:ns:inverse-dav" xml ns.
109 ([SOGoUserFolder -foldersOfType:folderTypeforUID:uid]): new method
110 designed to replace the UIxContactFoldersView.m mechanism for
111 displaying folders to subcribe to, as a common code base for both
112 Web and DAV-based subscriptions.
113 ([SOGoUserFolder -foldersOfType:typematchingUID:uid]): same as
115 ([SOGoUserFolder -davCollectionQuery:queryContext]): new method
116 that implement a custom DAV-based protocol query for querying
117 folder based on specified attributes.
119 2007-12-03 Ludovic Marcotte <ludovic@inverse.ca>
121 * Main/NSException+Stacktrace.{h,m} - new files
122 to handle automatic stack trace generation
123 upon an uncaught exception.
125 * Updated the templates and Localizable.string files
126 to fix typos and add new strings.
128 * SoObjects/Mailer/SOGoMailBodyPart.m
129 Fixed attachment retreival when the first character
132 * SoObjects/SOGo/SOGoGCSFolder.m
133 Fixed the sending of emails when folders are created/removed.
134 Notifications are sent if the defaults SOGoFoldersSendEMailNotifications
137 * UI/Common/UIxUserRightsEditor.m
138 * UI/Templates/SOGoACLEnglishModificationAdvisory.wox
139 * UI/Templates/SOGoACLFrenchModificationAdvisory.wox
140 * UI/Templates/SOGoACLGermanModificationAdvisory.wox
141 Added the capabilities to email notifications when ACLs have
142 changed on a DAV collection or an IMAP mailbox. Also added
143 new templates (3 .wox) to deal with this.
145 * UI/WebServerResources/ContactsUI.js
146 UI/WebServerResources/SchedulerUI.js
147 Added warnings on operations w/o selection.
149 2007-11-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
151 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
152 -appendSubscribedSources]): don't include sources for which we
153 don't have the SOGoPerm_AccessObject permission.
155 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
156 -rfc822DateString]): we want positive timezones to be specified
157 with a leading "+" too.
159 2007-11-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
161 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
162 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
163 return nil if the subscribed folder has no display name (meaning
164 it no longer exists).
166 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
167 -appendPersonalSources]): don't include sources which are no
170 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
171 -ocsPathOfContainer]): return the intended value, not that of
174 * SoObjects/Appointments/SOGoCalendarComponent.m
175 ([SOGoCalendarComponent -sendResponseToOrganizer]): send the
176 message only of sendEMailNotifications is set.
178 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -subscriptionRoles]):
179 new method that returns the roles that qualifies for adding the
180 special "authorized subscribed" sogo role.
182 2007-11-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
184 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
185 -aclsForUser:uid]): copy all the roles from the container. If the
186 object is new, make sure the roles contain "ObjectEditor" if and
187 only if "ObjectCreator" is present.
189 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
190 -aclsForUser:uid]): no longer take the "ObjectReader" role into
193 * UI/Common/UIxFolderActions.m ([UIxFolderActions
194 -canAccessContentAction]): always return HTTP status 204. We want
195 this because we are relying on the SOPE access control manager to
196 grant access to this method. This requires a fine-tuned access
197 control in SOGo itself...
199 * UI/Contacts/UIxContactsUserRightsEditor.m ([-userCanReadObjects])
200 ([-setUserCanReadObjects:userCanReadObjects]): removed methods.
202 * UI/MailerUI/UIxMailUserRightsEditor.m ([UIxMailUserRightsEditor
203 -updateRights]): no longer take the "ObjectReader" role into account.
204 ([-userCanReadMails], [-setUserCanReadMails:userCanReadMails]):
207 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
208 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): specify context
209 when looking up the Calendar folder.
211 2007-11-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
213 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): same as below.
215 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
216 -event]): create the event if it doesn't exist.
218 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -userHasCalendarAccess])
219 ([UIxPreferences -userHasMailAccess]): same as below, for
220 displaying preference tabs.
222 * UI/Common/UIxPageFrame.m ([UIxPageFrame
223 -userHasCalendarAccess]): new accessor for the link banner.
224 ([UIxPageFrame -userHasMailAccess]): same as above.
226 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
227 -toManyRelationshipKeys]): do not report the path to modules to
228 which the user has no access. No longer cache this information
229 statically, the array will be generated at each call.
230 ([SOGoUserFolder -lookupName:_keyinContext:_ctxacquire:_flag]):
231 ignore the path to modules to which the user has no access.
233 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -canAccessModule:module]):
234 new method that returns whether the user has access to the
237 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
238 -initFromUDSource:udSource]): take a new parameter named
239 'ModulesContraints' that defines a set of constraints for
240 accessing specified named modules. This is an optout, meaning the
241 modules will be present unless a constraint is specified.
243 * SoObjects/Appointments/SOGoAppointmentFolder.m
244 ([SOGoAppointmentFolder
245 -roleForComponentsWithAccessClass:accessClassforUser:uid]): cache
246 acl to reduce method calls.
247 ([SOGoAppointmentFolder
248 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
249 if the user is not the current user, we strip the useless info
252 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
253 -labelForKey:key]): new category method.
255 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
256 -event]): same as below.
258 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): request a
259 secured version of the component.
261 * UI/MailPartViewers/UIxMailPartViewer.m
262 ([-fallbackStringEncoding]): removed method.
263 ([UIxMailPartViewer -flatContentAsString]): we no longer use [self
264 fallbackStringEncoding]. Instead we directly specify
265 NSISOLatin1StringEncoding if UTF-8 has failed.
267 * UI/MailPartViewers/UIxMailPartICalViewer.m
268 ([-fallbackStringEncoding]): removed method.
270 2007-11-25 Ludovic Marcotte <ludovic@inverse.ca>
272 * SoObjects/Mailer/SOGoMailForward.m
273 Use [sourceMail decodedSubject] instead of [sourceMail subject]
274 Signature fix in -signature - see the comment
277 * SoObjects/Mailer/SOGoMailObject.m
278 Improved -stringFromData: to try UTF-8 then fallback to Latin1
280 * SoObjects/Mailer/SOGoMailReply.m
281 Modified -messageBody to strip the signature from the reply.
282 Also modified -signature to add "-- \n%@" instead of the
283 broken ""--\r\n%@" pattern.
285 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m
286 We now favor text/calendar parts over text/html and
287 text/plain parts when viewing a multipart/alternative mail.
288 This allows us to show the email invitations coming from
291 * UI/MailerUI/UIxMailAccountActions.m
292 Signature fix in -composeAction - see the comment
295 * UI/MailPartViewers/UIxMailPartViewer.m
296 Modified -flatContentAsString to use UTF-8 as the
297 default fallback encoding for 8-bit content.
299 * SoObjects/Mailer/SOGoDraftObject.m
300 Modified _fillInReplyAddresses:replyToAll:envelope:
301 so that if there's no recipient, we add at least
303 Fixed a mem leak in the same method.
305 2007-11-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
307 * UI/MailPartViewers/UIxMailRenderingContext.m
308 ([UIxMailRenderingContext -viewerForBodyInfo:_info]): same as below.
310 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
311 -plainTextContentFetchKeys]): same as below.
313 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
314 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): accept the
315 application/ics type from Google Calendar.
317 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
318 +distantFuture]): rewrote method to return an object that is
319 compatible with NSCalendarDate, unlike the implementation in
321 ([NSCalendarDate +distantPast]): same as above.
323 2007-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
325 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: fixed infinite loop
326 when charset is us-ascii, match it to ascii rather than none.
328 * SoObjects/Appointments/SOGoAppointmentFolder.m
329 ([SOGoAppointmentFolder
330 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
331 added search on the c_title column too.
333 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
334 -eventsListAction]): take the "search" url parameter into account.
335 ([UIxCalListingActions -eventsListAction]): fetch events matching
336 the title filter too.
338 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -connectAction]): the
339 user infos are now posted as "application/x-www-form-urlencoded".
340 So we have to have like a form has been posted.
342 2007-11-21 Francis Lachapelle <flachapelle@inverse.ca>
344 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
345 -calendarList]): also returns the calendar of the current
346 event. This is required so the proper calender is selected when
347 you view an event to which you don't have write access.
349 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
350 also returns true for super users.
352 2007-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
354 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
355 -lookupImap4BodyPartKey:inContext:]): return a correct body part
356 when "0" is requested, taking its mime-type into account.
358 * UI/MailPartViewers/UIxMailRenderingContext.m
359 ([UIxMailRenderingContext -flatContentForPartPath:_partPath]):
360 return content for part "0", which would be the message body.
362 2007-11-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
364 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
365 ([_UIxHTMLMailContentHandler
366 -setContentEncoding:newContentEncoding]): new method that
367 specifies an xml charset to return to the parser.
368 ([UIxMailPartHTMLViewer -flatContentAsString]): specifies the
369 charset to the content handler before parsing.
371 * SoObjects/Appointments/SOGoAppointmentObject.m: don't take an
372 empty c_name as a valid response when looking up an event. Create
373 one in that case instead.
375 2007-11-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
377 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -signature]):
378 returns the signature for the default identity of the default
380 ([UIxPreferences -setSignature:newSignature]): accessor that sets
381 the default signature.
383 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
384 -composeAction]): append the message signature to the new draft.
386 * SoObjects/Mailer/SOGoMailReply.m ([SOGoMailReply -signature]):
389 * SoObjects/Mailer/SOGoMailForward.m ([SOGoMailForward
390 -signature]): new method that takes the user's signature and put
391 it at the end of the message, if exists.
393 * UI/Common/UIxPageFrame.m ([UIxPageFrame -isSuperUser]): new
394 accessor that forwards the call to the active user.
396 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -signature]): returns the
397 user default signature.
398 ([SOGoUser -isSuperUser]): declares whether the user is listed
399 among the super users.
401 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
402 -setComponent:newComponent]): retain the component object.
403 ([UIxComponentEditor -organizerIdentity]): new accessor method to
404 handle list of possible organizers.
406 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
407 -event]): retain the returned event object.
409 * SoObjects/Appointments/SOGoAppointmentObject.m
410 ([SOGoAppointmentObject -saveComponent:newEvent]): reset the
411 organizer only if there are no attendees AND the owner of the
412 component is not the organizer him-/herself.
414 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
415 -toolbar]): rewrote in a way that ensures that each case is
418 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -isEqual:otherUser]): new
421 * UI/Scheduler/UIxTaskEditor.m ([-acceptAction])
422 ([-declineAction]): commented out unused methods.
424 * UI/MailPartViewers/UIxMailPartICalActions.m
425 ([UIxMailPartICalActions -deleteFromCalendarAction]): actually
426 delete the found object.
428 2007-11-18 Ludovic Marcotte <ludovic@inverse.ca>
430 * SoObjects/Mailer/SOGoMailBodyPart.m
431 SoObjects/Mailer/SOGoMailObject.m
432 UI/MailPartViewers/UIxMailPartViewer.m
433 Added support of messages containing non-textual
434 content and no parts.
436 * UI/MailerUI/UIxMailView.m
437 SoObjects/Mailer/SOGoMailObject.m
438 UI/Templates/MailerUI/UIxMailView.wox
439 Added support for the Reply-To header upon
442 2007-11-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
444 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]):
445 invoke saveComponent:.
447 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -hasOrganizer])
448 ([UIxComponentEditor -organizerName]): new template accessor
449 related to displaying the event's organizer.
450 ([-containsConflict:_component]): removed method.
451 ([UIxComponentEditor -takeValuesFromRequest:_rqinContext:_ctx]):
452 set RSVP to "TRUE" on each attendee.
454 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
455 -saveAction]): invoke saveComponent:.
457 * UI/MailPartViewers/UIxMailPartICalViewer.m
458 ([UIxMailPartICalViewer -isLoggedInUserTheOrganizer]): make use of
459 the -userIsOrganizer: category method.
460 ([-isLoggedInUserAnAttendee]): make use of -userIsParticipant:.
461 ([UIxMailPartICalViewer -hasSenderStatusChanged]): new template
462 accessor that determines whether the "Update" button should be
465 * UI/MailPartViewers/UIxMailPartICalActions.m
466 ([UIxMailPartICalActions -deleteFromCalendarAction]): implemented
468 ([UIxMailPartICalActions -updateUserStatusAction]): implemented
471 * UI/Common/UIxPageFrame.m ([UIxPageFrame
472 -setCssFiles:newCSSFiles]): new accessor that enables the
473 sub-templates to specify extra CSS files to load.
475 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
476 -homeFolderInContext:context]): cache the home folder of the user
477 object instead of the current user.
479 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
480 -deleteEntriesWithIds:ids]): invokes the "prepareDelete" optional
481 method if the child object implements it.
483 * SoObjects/SOGo/SOGoContentObject.m ([-setContentString:])
486 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
487 -setBaseDN:newBaseDNIDField:newIDFieldCNField:newCNFieldUIDField:newUIDFieldmailFields:newMailFieldsandBindFields:newBindFields]):
488 take a new "mailFields" parameter defining an array of fields
489 where to look at when searching the user's emails. It defaults to
490 the standard "mail" LDAP field.
492 * SoObjects/Appointments/SOGoAptMailICalReply.[hm]: new
493 SoComponent implementing a template for ITIP replies.
495 * SoObjects/Appointments/iCalPerson+SOGo.m ([iCalPerson
496 -mailAddress]): new method that returns a properly formatted email
497 address for the specified person entry.
498 ([iCalPerson -uid]): new method that tests whether the user is
499 known to the system and if so, returns its user id.
501 * SoObjects/Appointments/iCalPerson+SOGo.[hm]: new category module.
503 * SoObjects/Appointments/iCalEventChanges+SOGo.m
504 ([iCalEventChanges -sequenceShouldBeIncreased]): determine whether
505 the changes involved need a sequence inscrease, based on the
508 * SoObjects/Appointments/iCalEventChanges+SOGo.[hm]: new category
511 * SoObjects/Appointments/iCalEvent+SOGo.m ([iCalEvent
512 -isStillRelevant]): new overriden method determining the relevance
513 of the current event based on its end date.
515 * SoObjects/Appointments/iCalEvent+SOGo.[hm]: new category module.
517 * SoObjects/Appointments/iCalEntityObject+SOGo.m
518 ([iCalEntityObject -attendeeUIDs]): new category methods that
519 returns an array containing the uids of the system-know attendees.
520 ([iCalEntityObject -isStillRelevant]): new template method.
521 ([iCalEntityObject -itipEntryWithMethod:method]): clone the
522 current entry calendar with the specified ITIP method.
523 ([iCalEntityObject -attendeesWithoutUser:user]): returns an array
524 of attendees while making sure the specified user is not listed.
526 * SoObjects/Appointments/SOGoCalendarComponent.m
527 ([SOGoCalendarComponent -calendar:create:secure]): new name for
528 -calendar:. Added a "secure" parameter that specifies whether a
529 stripped calendar instance is needed or not. Also, we no longer
530 cache the content to simplify handling of new data.
531 ([SOGoCalendarComponent -component:create:secure]): same as above.
532 ([SOGoCalendarComponent
533 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
534 test whether the component is "still relevant" before sending an
536 ([SOGoCalendarComponent -sendResponseToOrganizer]): new method for
537 sending ITIP replies.
538 ([SOGoCalendarComponent -getUIDsForICalPerson:iCalPerson]):
539 removed method. Replaced with -[iCalPerson uid] category method.
541 * SoObjects/Appointments/SOGoAppointmentObject.[hm]: rewrote
542 class. No longer override saveContentString:,
543 saveContentString:baseSequence:, .... Implemented the
544 saveComponent: and the prepareDelete methods instead. Those
545 methods are called only from the web methods. This avoids the
546 risks related to email sending and changes propagation.
548 * UI/Common/UIxTabItem.m: removed useless class module.
550 * UI/Common/UIxTabView.[hm]: removed useless class module.
552 * UI/Common/UIxPrintPageFrame.m: removed useless class module.
554 * UI/Common/UIxAppNavView.m: removed useless class module.
556 2007-11-16 Ludovic Marcotte <ludovic@inverse.ca>
558 * SoObjects/Mailer/SOGoMailBaseObject.m
561 * SoObjects/Mailer/SOGoMailBodyPart.m
562 We also grok image/jpeg and return the SOGoMailBodyPart
563 for attachments fetching.
565 * SoObjects/Mailer/SOGoMailObject+Draft.m
566 Prevent a crash in case body decoding failed during
569 * SoObjects/Mailer/SOGoMailObject.m
570 Improved body decoding during a reply to also try
571 latin1 as an encoding.
573 * UI/MailPartViewers/UIxMailRenderingContext.m
574 Greatly improved the display mechanisms for emails.
575 Also properly consider the content disposition for
578 * UI/MailerUI/UIxMailToSelection.m
579 Removed worthless code.
581 * UI/WebServerResources/MailerUI.css
582 CSS fix for table views.
584 2007-11-15 Ludovic Marcotte <ludovic@inverse.ca>
586 * UI/WebServerResources/MailerUI.js
587 We now check for empty selection and warn the
588 user about it when deleting messages
590 * SoObjects/Mailer/SOGoDraftObject.m
591 Correctly check for the presence of a subject
592 before attempting to forward a message from
595 * SoObjects/Mailer/SOGoMailObject+Draft.m
596 We no longer use "[Fwd: ]" but simply "Fwd:"
597 when forwarding email messages.
599 * SoObjects/SOGo/SOGoUser.m
600 Modified the default forwarding format to be
601 inline instead of "attachment".
603 * SoObjects/Mailer/SOGoDraftObject.m
604 We now create and use a NGMimeContentDispositionHeaderField
605 in order to avoid encoding the whole Content-Disposition
606 header in case a non-ASCII char is present!
608 2007-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
610 * SoObjects/SOGo/iCalEntityObject+Utilities.m ([iCalEntityObject
611 -findParticipant:user]): new method based on the one removed from
612 SOGoCalendarComponent below.
614 * SoObjects/SOGo/iCalEntityObject+Utilities.[hm]: new category
615 module for iCalEntityObject.
617 * SoObjects/Appointments/SOGoCalendarComponent.m
618 ([-findParticipant:user]): removed method.
620 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
621 -setContentString:newContent]): new accessor method.
623 -saveContentString:newContentbaseVersion:newBaseVersion]): invoke
624 -[self setContentString:].
626 * UI/MailPartViewers/UIxMailPartICalViewer.m
627 ([UIxMailPartICalViewer -authorativeEvent]): returns the most
629 ([-isLoggedInUserTheOrganizer]): make use of -[SOGoUser
632 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
633 -stringByConvertingCRLNToHTML]): fixed crashes due to overflows in
634 temporary buffer we are handing.
636 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
637 -setComponent:newComponent]): check that newComponent is non-nil
638 before replacing the default values.
639 ([UIxComponentEditor -calendarList]): privacy is already an ivar.
640 We don't need to refetch it.
642 2007-11-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
644 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
645 -fetchMailForReplying:sourceMailtoAll:toAll]): remove the current
646 user from the list of recipients and make sure no other address is
649 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
650 -stringByConvertingCRLNToHTML]): build the returned NSString
651 without the ending \0.
653 2007-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
655 * UI/MailPartViewers/UIxMailPartICalViewer.m
656 ([UIxMailPartICalViewer -acceptLink])
657 ([UIxMailPartICalViewer -declineLink])
658 ([UIxMailPartICalViewer -tentativeLink]): removed useless methods.
660 * UI/MailPartViewers/UIxMailPartICalAction.m
661 ([UIxMailPartICalAction -addToCalendarAction])
662 ([UIxMailPartICalAction -deleteFromCalendarAction]): new stub
665 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
666 -lookupImap4BodyPartKey:]): make use of the new method below.
668 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
669 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): new method
670 that returns an appropriate Class depending on a given mime type.
672 * UI/SOGoUI/UIxComponent.m ([UIxComponent -canCreateOrModify]):
673 new boolean accessor that determines whether someone can create
674 (i.e. modify a new entry) or modify an existing entry.
676 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
677 -lookupName:lookupNameinContext:localContextacquire:acquire]):
678 overriden method to bind looked up keys to So methods but by
679 avoiding a call to toOneRelationshipKeys. This will be the top
680 method of the chain, meant to override SoObject's behaviour.
682 * SoObjects/Contacts/SOGoContactLDAPFolder.m
683 ([SOGoContactLDAPFolder
684 -lookupName:objectNameinContext:lookupContextacquire:acquire]):
685 removed hack to prevent [super lookupName...] to read the entire
686 LDAP directory when looking up a record.
688 2007-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
690 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
691 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
694 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
695 ([UIxMailPartHTMLViewer -_attachmentIds]): the reference was one
696 character too short, which cause the images not to be displayed
697 sometimes and crashes to happen whenever the references on a
698 message were wrong (due to bugs in SOPE).
700 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
701 -hasMessageAttachment]): consider an attachment any content that
702 has a non-nil disposition.
704 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
705 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
706 fixed method to make use of the parameters instead of the useless
707 remains that weren't even initialized.
709 * SoObjects/Appointments/SOGoAppointmentObject.m
710 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
711 don't propagate the event among the attendees if this is not an
713 ([SOGoAppointmentObject -deleteWithBaseSequence:]): same as above.
715 * Main/SOGo.m ([SOGo -authenticatorInContext:context]): make use
716 of the new category method below.
718 * SoObjects/SOGo/WORequest+SOGo.m ([WORequest
719 -handledByDefaultHandler]): new method that returns whether this
720 is an "so" or alike request.
722 * SoObjects/SOGo/WORequest+SOGo.[hm]: new category module.
724 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
725 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
726 write the new folder's name in the folder cache.
728 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
729 -calendars]): same as below.
731 * UI/Contacts/UIxContactsListViewContainer.m
732 ([UIxContactsListViewContainer -currentContactFolderName]):
733 translate the display name if its the default one.
735 * SoObjects/Appointments/SOGoAppointmentFolder.m
736 ([SOGoAppointmentFolder -create]): overriden method that invokes
737 its ancestor and then activate itself within the user settings.
739 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
740 -appendPersonalSources]): when the user is the owner of the
741 current folder, we create the "personal" folder if it doesn't
742 exist by invoking "create".
744 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
745 -primaryFetchProfile]): when no row is returned, we initialize
746 "values" to a new dictionary. This solves a bug where the defaults
747 would not be initialized properly.
749 2007-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
751 * SoObjects/SOGo/SOGoGCSFolder.m ([-compare:otherFolder]): method
752 moved into the SOGoFolder class.
754 * SoObjects/Appointments/SOGoAppointmentObject.m
755 ([SOGoAppointmentObject -saveContentString:_iCalinUIDs:_uids]):
756 simplified method by directly building a similar appointment
757 object with the current folder as container.
759 * SoObjects/Contacts/SOGoContactLDAPFolder.m
760 ([SOGoContactLDAPFolder
761 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
762 take the content of an object returned by
763 lookupName:inContext:acquire: instead of the dictionary passed as
764 parameter since it represents a flattened entry return by
765 lookupContactsWithFilter...
767 * SoObjects/Contacts/SOGoFolder+CardDAV.m: NSObject+CardDAV
768 category renamed to SOGoFolder+CardDAV.
770 * SoObjects/SOGo/SOGoParentFolder.m: no longer a subclass of
771 SOGoObject, but of SOGoFolder instead.
773 * SoObjects/SOGo/SOGoUserFolder.m: no longer a subclass of
774 SOGoGCSFolder, but of SOGoFolder instead.
776 * SoObjects/Appointments/SOGoAppointmentFolder.m
777 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): fixed
778 to take the new SOGoParentFolder class into account. Also, create
779 the personal folder if it doesn't exist.
781 * SoObjects/SOGo/SOGoFolder.[hm]: new class module implementing
782 the parent of all SOGo containers.
784 * SoObjects/SOGo/SOGoGCSFolder.[hm]: SOGoFolder class renamed to
787 2007-11-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
789 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection
790 -getAddressesFromFormValues:_dict]): take NSString and NSArray
791 values. Ignore addresses with a length of 0.
793 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -mailAccounts]): we now
794 fetch the accounts from the user defaults and create default
797 2007-11-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
799 * UI/MailPartViewers/UIxMailPartTextViewer.m
800 ([UIxMailPartTextViewer -flatContentAsString]): re-added
801 conversion of line-break to sequences of HTML "BR", with a fast
804 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
805 -flatContentAsString]): simplified method now that we know
806 -[NSString stringWithData:usingEncodingNamed:] has a more robust
809 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
810 -showToAddress]): the answer is cached.
812 * UI/Common/UIxObjectActions.m ([UIxObjectActions +initialize]):
813 read "SOGoACLsSendEMailNotifications" from the user defaults to
814 determiner whether to send an email when a user is added or
815 removed from an object's acl.
817 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
818 -contentForEditing]): make sure the htmlContent flag is set to NO
819 when we select the textual part. Also we select only the relevant
822 * UI/MailerUI/WOContext+UIxMailer.m ([-mailSubjectFormatter]):
825 * UI/MailerUI/UIxMailView.m ([UIxMailView -messageSubject]): new
826 method replacing -objectTitle, written like the ones below.
828 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
829 -messageSubject]): rewrote method to act the one below.
831 * UI/MailPartViewers/UIxMailPartMessageViewer.m
832 ([UIxMailPartMessageViewer -messageSubject]): new method that
833 returns the decoded mail subject or "Untitled" if the subject is
836 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
837 -decodedSubject]): new method that invoke -decodedSubject from the
838 NSString and NSData class, depending on the identity of the
839 subject obtained from the envelope.
841 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
842 -subjectForReply]): take the value of -[SOGoMail decodedSubject]
843 instead of the subject of the envelope.
844 ([SOGoMailObject -filenameForForward]): same as above.
845 ([SOGoMailObject -subjectForForward]): same as above.
847 * SoObjects/Mailer/NSString+Mail.m ([NSString -decodedSubject]):
848 same as below for NSString.
850 * SoObjects/Mailer/NSData+Mail.m ([NSData -decodedSubject]): new
851 method that decodes the subject of a mail taken as an NSData
852 instance. Handling the exceptions and the badly formatted headers.
854 * UI/MailerUI/UIxSubjectFormatter.[hm]: dropped class module.
856 2007-11-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
858 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
859 -deleteEntriesWithIds:ids]): make sure the objects returned by
860 lookupName:... are not instances of NSException.
862 2007-11-03 Ludovic Marcotte <ludovic@inverse.ca>
864 * UI/Scheduler/UIxAppointmentEditor.m
865 Fixed monthly recurrences support.
867 2007-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
869 * SoObjects/Appointments/SOGoAppointmentObject.m
870 ([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
871 sent when modifying an event, when the event was considered
872 relevant. The same thing is now implemented for event deletion.
874 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
875 -primaryFetchProfile]): make sure that the deserialized "values"
876 is an instance of NSMutableDictionary, otherwise we override it
879 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
880 -contentForReply]): make use of the SOGoMailReply WO page.
882 * SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
883 from SOGoMailForward to handle mail replies instead. Only three
884 methods remaining: date, from and messageBody. The latter is
887 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
888 -fetchMailForForwarding:sourceMail]): fetch attachments for
891 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
892 -hasMessageAttachment]): initialize hasAttachment with "NO" to
893 avoid false positives.
895 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
896 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
897 set title to an empty string where the event/task summary is null.
899 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
900 -setHeaders:newHeaders]): make sure there is a message id in the
901 headers dictionary, if not, generate one.
902 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
903 message id from the existing draft.
904 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
905 message id in the header map.
907 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
908 -deleteFolderAction]): no longer prefix the target folder with
911 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
912 -listMailboxesAction]): base the folder type on the folder
915 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
916 -lookupName:_keyinContext:acquire:_acquire]): compare the full
917 traversal to the potential looked up folder with the special
918 folder names and return an object with the appropriate
919 SOGoMailFolder subclass.
921 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
922 -traversalFromMailAccount]): don't prepend the whole string with
925 * SoObjects/Mailer/SOGoMailAccount.m
926 ([-lookupSentFolder:_keyinContext:_ctx])
927 ([-lookupDraftsFolder:_keyinContext:_ctx])
928 ([-lookupTrashFolder:_keyinContext:_ctx])
929 ([-lookupFiltersFolder:_key:_ctx]): removed methods.
930 ([SOGoMailAccount -inboxFolderNameInContext:])
931 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
932 ([SOGoMailAccount -sentFolderNameInContext:])
933 ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
934 the resulting name with "prefix" since we might return a nested
936 ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
937 names with "/". Sorts the resulting folder list with
938 localizedCaseInsensitiveCompare: instead of
939 caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
940 that were removed, instead, we choose the appropriate class
941 depending on the folder name. And since we are in SOGoMailAccount,
942 we don't have to compute a traversal path to match the key with
945 -folderWithTraversal:traversalandClassName:className]): new method
946 that returns an instance of the specified SOGoMailFolder subclass,
947 based on the traversal path passed as parameter.
948 ([SOGoMailAccount -inboxFolderInContext:_ctx])
949 ([SOGoMailAccount -draftsFolderInContext:_ctx])
950 ([-sentFolderInContext:_ctx])
951 ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
952 -folderWithTraversal:andClassName: method described above.
954 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
955 -primaryFetchProfile]): make use of -[NSPropertyListSerialization
956 propertyListFromData:mutabilityOption:format:errorDescription:] to
957 deserialize the plist. Removed variant for libFoundation since it
958 should support the above.
959 ([AgenorUserDefaults -generateSQLForInsert])
960 ([AgenorUserDefaults -generateSQLForUpdate]): make use of
961 -[NSPropertyListSerialization
962 dataFromPropertyList:format:errorDescription:] to serialize the
963 plist. Removed variant for libFoundation since it should support
964 the above. Escape the backslashes from the resulting string.
966 2007-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
968 * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
969 SOGoMailFolder: SOGoMailSpecialFolder.
971 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
972 -traversalFromMailAccount]): overridden method that returns the
973 initialized mutable string.
974 ([SOGoMailAccount -allFolderPaths]): take the special folder paths
975 with -traversalFromMailAccount and reposition them at the
976 beginning of the list. By creating the special folders during that
977 request, we also make sure that the folder exists thanks to the
978 new initialisation method of the new "SOGoSpecialMailFolder"
980 ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
982 ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
984 ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
985 longer use lookupImap4Folder.
986 ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
989 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
990 -traversalFromMailAccount]): new method that returns the full
991 IMAP4 path to the object.
993 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
994 "superUsernames" after fetching it from the ud.
996 2007-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
998 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
999 -eventsListAction]): substitude the start and end date with their
1000 UTC counterpart, taking into account the offset from UTC related
1001 to those dates instead of the current one. This renders
1002 -[UIxCalMainView -userUTCOffset] obsolete because the computings
1003 that occured in javascript are now done server-side.
1005 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
1006 removed obsolete method.
1008 * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
1009 method converting html content to plain text.
1011 * SoObjects/Mailer/NSString+Mail.[hm]: new category module
1012 enhancing NSString with utility methods pertaining to mail handling.
1014 * SoObjects/Mailer/SOGoMailObject.m
1015 ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
1017 -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
1018 modified method to be always recursive and to take an array of the
1019 accepted mime-types as parameter. The returned array now contains
1020 the mime-type as well as the part keys.
1022 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1023 -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
1024 ([SOGoMailObject -contentForEditing]): rewrote method to take into
1025 account the first text/plain part or the first text/html part
1026 converted to text/plain with our new -[NSString htmlToText]
1029 * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
1030 "replyToAll:" with YES as parameter instead of NO.
1032 2007-10-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1034 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1035 -davContentType]): ignore any possible parameter taken from the
1036 mime-info of the body part.
1038 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1039 -lastFirstMessageNumber]): new accessor that returns the first
1040 message number of the last series of messages.
1041 ([UIxMailListView -fetchKeys]): request the bodystructure for each
1043 ([UIxMailListView -hasMessageAttachment]): extract the attachment
1044 information from the message bodystructure.
1046 2007-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1048 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1049 -GETAction:]): use the "application/octet-stream" mime type for
1050 elements of type "application/x-xpinstall" to avoid confusing
1053 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
1054 ([UIxPreferences -itemMessageCheckText])
1055 ([UIxPreferences -userMessageCheck])
1056 ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
1057 methods for handling the retrieval of new messages automatically.
1059 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
1060 that returns the interval of time between automatic message
1063 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1064 -defaultAction]): now expunges the last folder marked for expunge.
1066 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1067 -trashInContext:_ctx]): now marks the container folder for
1070 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1071 -markForExpunge]): new method that marks the folder for the next
1072 automatic expunge operation in the user settings.
1073 ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
1074 takes the last folder marked for expunge, expunges it and removes
1075 it from the user settings, if it exists.
1077 2007-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1079 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1080 -messageSubjectCellStyleClass]): added support for replied,
1081 forwarded, forwarded and replied mails.
1083 * SoObjects/Mailer/NSData+Mail.m ([NSData
1084 -bodyDataFromEncoding:encoding]): new utility method that decodes
1085 the NSData instance properly depending on the encoding string
1086 passed as parameter.
1088 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1089 -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
1091 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1092 -stringForData:_datapartInfo:_info]): simplified by invoking
1093 -bodyDataFromEncoding: from our new NSData category methods.
1095 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1096 -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
1097 where only the body part of the first of the keys fetched was
1098 returned. Also decodes the body parts properly following their
1101 * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
1102 extends the NSData class with utility methods useful for handling
1105 2007-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1107 * SoObjects/SOGo/NSArray+Utilities.m
1108 ([NSArray -stringsWithFormat:format]): replace instances of NSNull
1111 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1112 -keysWithFormat:keyFormat]): replace instances of NSNull with
1115 * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
1116 empty, use "c_cn" instead.
1118 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1119 ([SOGoMailAccount -draftsFolderInContext:_ctx])
1120 ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
1121 of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
1122 no always be specified from the root instead of sometimes from the
1125 2007-10-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1127 * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
1128 ([UIxPageFrame -productLocalizableStrings]): invoke the new
1129 +[SOGoUser language] method if the user is nil.
1131 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
1132 that returns any generically-found language.
1133 ([SoUser -language]): modified to call the above.
1134 ([SOGoUser -language]): modified to call the above if the user
1135 language has a null length.
1137 * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
1138 -davEntityTag]): modified to return the "hash" of the vCard string.
1140 * UI/MailerUI/UIxMailActions.m ([UIxMailActions
1141 -removeAllLabelsAction]): new method that removes all label flags
1142 from the associated message.
1143 ([UIxMailActions -addLabel1Action]
1144 [UIxMailActions -addLabel2Action]
1145 [UIxMailActions -addLabel3Action
1146 [UIxMailActions -addLabel4Action]
1147 [UIxMailActions -addLabel5Action]): new methods that adds label
1148 flags to the associated message.
1149 ([UIxMailActions -removeLabel1Action]
1150 [UIxMailActions -removeLabel2Action]
1151 [UIxMailActions -removeLabel3Action
1152 [UIxMailActions -removeLabel4Action]
1153 [UIxMailActions -removeLabel5Action]): new methods that removes
1154 label flags from the associated message.
1156 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
1157 new accessor that returns the labels associated with the message.
1159 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1160 -allFolderPaths]): new method that returns all the paths of all
1161 the subfolders of the folder object.
1162 ([SOGoMailFolder -allFolderURLs]): new method replacing
1165 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1166 -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
1167 role from its parent folder.
1169 2007-10-19 Francis Lachapelle <flachapelle@inverse.ca>
1171 * SoObjects/SOGo/SOGoUser.m
1172 ([SOGoUser -rolesForObject:objectinContext:context]): allow
1173 multiple super usernames to be defined. The user default
1174 SOGoSuperUsername is renamed SOGoSuperUsernames and must be
1177 2007-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1179 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1180 -userInContext:]): override the super method by returning
1181 anonymous if the super returns nil.
1183 * UI/Common/UIxPageFrame.m ([UIxPageFrame
1184 -productLocalizableStrings]): new method that returns the
1185 product-specific translation dictionary as a JSON hash.
1186 ([UIxPageFrame -commonLocalizableStrings]): same as above but for
1187 the "Common" framework.
1188 ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
1189 the requestor components to require additional Javascript files.
1190 This is useful now that all the scripts are loaded at the end of
1192 ([UIxPageFrame -additionalJSFiles]): new getter related to the
1195 2007-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1197 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
1198 implemented new web method.
1200 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1201 -copyToFolderNamed:folderNameinContext:]): new method with the
1202 code cut/pasted from -moveToFolderNamed:inContext:.
1203 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
1204 modified to use the code from -copyToFolderNamed:inContext:, which
1205 is common between the two actions.
1207 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1208 ([SOGoMailAccount -sentFolderNameInContext:])
1209 ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
1210 the user settings into account.
1212 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
1213 ([UIxMailFolderActions -setAsSentFolderAction])
1214 ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
1215 that change the purpose of the active folder to "Sent", "Drafts"
1218 * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
1219 returns the subject as quoted-printable.
1221 * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
1222 SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
1223 the "aclMethod" method for the subsequent language-dependent
1226 * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
1227 returns the subject as quoted-printable.
1229 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1230 -dealloc]): release item, aptStartDate and aptEndDate.
1232 2007-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1234 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1235 -initWithName:newNameinContainer:newContainer]): the owner of a
1236 shared folder is set to "nobody" by default.
1238 * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
1239 that returns whether the object has an owner or not.
1241 2007-10-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1243 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1244 the folder even if the current user is not its owner.
1246 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
1248 * We now send advisory emails when folders
1249 are created / deleted.
1251 * Fixed the sending of advisory emails upon
1252 ACL changes on folders.
1254 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
1256 * UI/Scheduler/UIxComponentEditor.m
1257 Implemented event/task priority support.
1259 * SoObjects/Contacts/SOGoContactGCSFolder.m
1260 Added CardDAV support.
1262 * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
1263 Implemented From: based on LDAP results based on
1264 the MailFieldNames attribute (an array) specified
1265 in every LDAP-based authentication sources.
1267 * UI/MailPartViewers/UIxMailPartTextViewer.m and
1268 UI/WebServerResources/MailerUI.css
1269 We avoid replacing "\r\n" and "\n" with <br /> and
1270 rather use CSS capabilities for proper formatting.
1271 This is _WAY_ faster on very large mails.
1273 2007-10-10 Francis Lachapelle <flachapelle@inverse.ca>
1275 * UI/Scheduler/UIxComponentEditor.m
1276 ([UIxComponentEditor -componentCalendar]): returns the calendar
1277 object of the current event.
1279 2007-10-05 Ludovic Marcotte <ludovic@inverse.ca>
1281 * UI/WebServerResources/MailerUI.js
1282 We check if at least one message is selected
1283 before performing a Reply/Reply All/Forward
1285 * SoObjects/Appointments/SOGoAppointmentFolder.m
1286 and others - implemented support for recurring
1287 events (with some known limitations right now,
1288 all soon to be fixed).
1290 2007-10-04 Francis Lachapelle <flachapelle@inverse.ca>
1292 * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
1293 the constraint that a username can't start with a digit.
1295 2007-10-02 Francis Lachapelle <flachapelle@inverse.ca>
1297 * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
1298 repository to Inverse's branch.
1300 2007-09-28 Francis Lachapelle <flachapelle@inverse.ca>
1302 * SoObjects/Mailer/SOGoDraftObject.m
1303 ([SOGoDraftObject -isValidAttachmentName:_name]): removed
1304 constraint on space in file name.
1305 ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
1306 now removes from file name all characters preceding a backslash.
1307 This happens with IE7 because the complete attachment file path
1310 2007-09-25 Francis Lachapelle <flachapelle@inverse.ca>
1312 * SoObjects/Appointments/SOGoAptMailNotification.m
1313 ([SOGoAptMailNotification -appointmentURL]): set personal as the
1314 default calendar where to add the event.
1316 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1317 activate the SOGoUIxDefaultModule user defaults.
1319 2007-09-21 Francis Lachapelle <flachapelle@inverse.ca>
1321 * UI/SOGoUI/UIxComponent.m
1322 ([UIxComponent -shortUserNameForDisplay]): returns the string
1323 "wrongusernamepassword" when authentication failed.
1325 2007-09-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1327 * UI/MailPartViewers/UIxMailPartICalViewer.m
1328 ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
1329 entry of the Calendars parent folder.
1331 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1332 -messageSubject]): new accessor method to work-around a problem
1333 within SOPE where a subject could be returned as an NSData.
1335 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1336 -appendPersonalSources]): make sure the value of the "c_path4" of
1337 the returned rows are not NSNull, otherwise, discard them.
1339 2007-09-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1341 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1342 -compare:otherFolder]): new overriden method that compares two
1343 contact foldes based on their class and then transfer the control
1344 to the super method in SOGoFolder.
1346 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1347 ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
1348 compare two contact folders based on their class and then their
1351 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
1352 new method for sorting folders. The folders are compared based on
1353 their ownership, whether they are a main folder and finally
1354 depending on their display name.
1356 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1357 -pathArrayToSOGoObject]): do not reorder the paths if the third
1358 element is an instance of NSNull.
1360 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1361 -subFolders]): returns a sorted array using the "compare:"
1364 2007-09-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1366 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1367 -calendars]): also returns the owner of the listed folders.
1369 * SoObjects/Appointments/SOGoAppointmentFolder.m
1370 ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
1372 * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
1373 method into UIxFolderActions.
1375 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1376 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
1377 freebusy info from the "personal" calendar.
1379 * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
1380 -createFolderAction]): new standardized method for requesting
1381 folder creations among gcs-based modules.
1383 * UI/Common/UIxParentFolderActions.[hm]: new action class module.
1385 * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
1386 module, equivalent to the SOGoParentFolder's child
1387 SOGoContactFolders, but for calendars.
1389 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
1390 method that returns translated strings for controller bundles
1391 (same as what UIxComponent does for view bundles).
1392 ([SOGoObject -pathArrayToSOGoObject]): new method that returns
1393 the real path to a subscribed folder (if subscribed).
1394 ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
1395 ([SOGoObject -globallyUniqueObjectId]): new instance method
1396 calling its class equivalent.
1398 2007-09-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1400 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
1401 whether the user is logged in and if so, redirect to his/her
1403 ([SOGoRootPage -appendToResponse:inContext:]): removed useless
1406 2007-09-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1408 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1409 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1411 ([SOGoFolder -displayName]): new method.
1412 ([SOGoFolder -delete]): accept to proceed only if nameInContainer
1415 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1416 ([SOGoContactLDAPFolder
1417 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1418 renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
1420 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1421 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1422 removed method, reimplemented in SOGoFolder.
1423 ([SOGoContactGCSFolder -displayName]): removed method,
1424 reimplemented in SOGoFolder.
1425 ([-delete]): removed method, modified in SOGoFolder.
1427 * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
1428 a subclass of SOGoParentFolder.
1430 * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
1431 from SOGoContactFolders and modified to be more content-independent.
1433 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
1434 ([UIxMailActions -markMessageReadAction]): new methods moved from
1435 UIxMailListView and adapted to invoke the client object directly,
1436 since the previous versions had to to a lookup from the parent
1439 * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
1440 method into UIxMailActions.
1441 ([-markMessageReadAction]): same as above.
1442 ([-viewAction]): removed useless method.
1443 ([-javaScriptOK]): removed useless method.
1444 ([-isJavaScriptRequest]): removed useless method.
1445 ([-lookupActiveMessage]): removed useless method.
1447 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1448 -responseWithStatus:status]): new method that returns a WOResponse
1449 initialized with the specified status code.
1450 ([WODirectAction -responseWith204]): new method that invokes the
1451 above one with "204" as parameter.
1452 ([WODirectAction -redirectToLocation:newLocation]): rewrote method
1453 to make use of -responseWithStatus:.
1455 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
1456 method that returns a WOResponse initialized with the 204 status
1459 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
1460 always use a "not deleted" search qualifier along with the user
1461 qualifier (if present).
1463 2007-09-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1465 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1466 -contactSearchAction]): only return the records which have an
1469 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1470 -trashInContext:_ctx]): no longer expunge the mailbox after
1471 marking a message deleted.
1472 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
1475 * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
1476 ([-trashAction]): moved method into UIxMailActions.
1477 ([-moveAction]): moved method into UIxMailActions.
1479 2007-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1481 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1482 ([_UIxHTMLMailContentHandler
1483 -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
1484 comments from the CSS code, do not add the CSS code to the body
1485 content and remove references of body from the CSS declarations.
1486 ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
1487 ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
1488 common with cssContent in a different method and invoke it only
1491 * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
1492 instead of UIxPageFrame.
1494 2007-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1496 * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
1497 ([-appendToResponse:responseinContext:ctx]): commented out.
1498 ([SOGoRootPage -connectURL]): new accessor that returns the full
1499 url the the "connect" method.
1500 ([-connectAction]): rewrote method to return a properly formatted
1501 auth. cookie based on the username and password passed as
1504 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1505 set the value of the cookie to "discard" and set its expiration
1508 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1509 -preprocessCredentialsInContext:context]): consider the user
1510 anonymous if the cookie value is "discard".
1511 ([SOGoWebAuthenticator
1512 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1513 set the expiration date of the cookie to yesterday.
1515 * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
1516 returns the path to the application if the clientObject is not a
1519 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
1520 moved the requirement of authentication from the SOGo application
1523 * SoObjects/Appointments/SOGoAppointmentObject.m
1524 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
1525 check whether the new appointment object is still relevant before
1526 sending a notification.
1528 2007-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1530 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1531 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1532 render the login page through the SoDefaultRenderer.
1534 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
1535 -isPublicInContext:localContext]): new overriden method that
1538 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1539 -currentCalendarLogin]): replace css-unsafe characters with _.
1541 * UI/SOGoUI/UIxComponent.m ([UIxComponent
1542 -shortUserNameForDisplay]): simplified method.
1543 ([-user]): removed method since [context activeUser] is as useful.
1545 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1547 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1548 set the cookie path to "/".
1550 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
1551 authenticator based on the request handler key. "dav" returns the
1552 SOGoDAVAuthenticator, anything else returns the Web authenticator.
1554 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
1555 "SOGoAuthenticator".
1557 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
1558 implementing a subclass of SoCookieAuthenticator, designed for
1559 web-based cookie authentication of users.m
1561 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1562 new method that resets the authentification cookie.
1564 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1566 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
1567 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
1568 didBind to NO to make sure no false authentication is returned if
1569 the bind operation is not executed.
1571 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1573 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
1574 "In-Reply-To" header field when replying.
1576 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
1577 table field names that are queried.
1579 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1580 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
1581 add the "c_" prefix to the quick table field names that are
1584 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1586 * SoObjects/Appointments/SOGoAppointmentFolder.m
1587 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
1588 "personal" to the ocs path of the appointment folder.
1590 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1591 -flatContentAsString]): use latin1 when the encoding is not
1592 specified, and to reencode data chunk which were not correctly
1593 decoded with the original charset.
1595 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
1596 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
1597 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
1598 ([SOGoAppointmentFolder
1599 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
1600 override those methods to use the "personal" additional directory.
1602 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
1603 append "/personal" to the calendar path to simulate a single
1604 calendar in a choice of many.
1606 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1607 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
1608 methods back here. Moved the folder existence check here, and do
1609 it on self only when the lookup happens for a non-folder object.
1610 This permits to accept entries for folders with parents who
1613 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1615 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1616 -shouldTakeValuesFromRequest:requestinContext:context]): same as
1619 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1620 -shouldTakeValuesFromRequest:requestinContext:context]):
1621 redesigned method since any method called can be received from a
1622 POST or a GET. Instead we check the method call itself and we
1623 accept only if it has the "save" prefix.
1625 * SoObjects/Appointments/SOGoAptMailNotification.m
1626 ([SOGoAptMailNotification -getSubject]): returns the subject an a
1627 quoted-printable encoded string, if needed.
1629 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1630 -asQPSubjectString:encoding]): moved method into
1631 NSString+Utilities.m.
1633 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1635 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1636 -messageForwardingList])
1637 ([UIxPreferences -itemMessageForwardingText])D
1638 ([UIxPreferences -userMessageForwarding])
1639 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
1640 new template methods for manage the user preference regarding
1643 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
1644 algorithm to return, in order, the user's defined language or the
1645 first browser language or, finally, the default language.
1646 ([SOGoUser -messageForwarding]): new method that returns the user
1647 preference for message forwarding: "inline" or "attached",
1648 defaulting to "attached".
1650 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1651 -contentForInlineForward]): new method that returns the content of
1652 the message for inline forwarding based on the SOGoMailForward
1655 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1656 -fetchMailForForwarding:sourceMail]): check the user preference
1657 for message forwarding and compose inline forwarded messages if required.
1659 * SoObjects/Appointments/SOGoCalendarComponent.m
1660 ([SOGoCalendarComponent
1661 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1662 now use a template based on the language returned from the
1665 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
1666 a subclass of SOGoMailForward for English locale.
1668 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
1669 a subclass of SOGoMailForward for French locale.
1671 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
1672 helps build template for inline forwarded messages.
1674 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1676 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
1677 to handle "<var:if-ie>" template tags.
1679 * UI/SOGoElements: new extension bundle containing sogo-specific
1682 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1683 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
1684 selected in the dialog.
1685 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
1686 first category, if ever, of the calendar entity.
1688 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1689 -composeAction]): restored method since it is needed by the
1692 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1693 -composeAction]): the address fields should be arrays and not
1696 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
1697 that returns the build date of SOGo in the template.
1699 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1701 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1702 -_flattenedRecords:records]): when the c_cn field is empty,
1703 returns set a formatted string with the concatenation of
1704 c_givenname and c_sn as the displayName.
1706 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1707 -isValidMailAccountName:_key]): prevent unknown accounts from
1710 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1711 -pathToAttachmentObject]): we no longer need the filename
1712 extension for SoLookup...
1714 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1715 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
1716 filename to have an extension, and thus accept any filename.
1718 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1719 -currentCName]): new method that returns the c_name of the
1720 contact, correctly escaped to be passed by url afterwards.
1722 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1723 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
1724 instance of [self decodedFlatContent] instead of the buggy
1725 NSString from [super flatContentAsString] to the parser.
1727 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1729 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
1730 new category method to reponds to the "delete" web command on
1732 ([UIxMailActions -deleteAttachmentAction]): new category method to
1733 reponds to the "deleteAttachment" web command on drafts, taking
1734 the "filename" url parameter into account.
1736 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1737 -contentForEditing]): new method that retrieve the editable mail
1739 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
1740 returns the body keys for attached files (parts with a "filename"
1743 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1744 -asQPSubjectString:encoding]): do not change the string if the
1745 encoded string has the same length (which means it is already
1747 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
1748 that retrieve a draft along with its attachments for editing.
1749 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
1750 choke if the "to" header field is empty.
1751 ([SOGoDraftObject -delete]): new method to delete the draft folder
1752 whenever operations are done.
1754 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1756 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
1757 useless stub method, of which the intention was implemented in
1759 ([-lookupSentFolderUsingAccount]): removed obsolete method.
1760 ([-selectedMailIdentity]): removed obsolete method.
1761 ([-lookupSentFolderUsingFrom]): removed obsolete method.
1762 ([-storeMailInSentFolder:_path]): removed obsolete method, of
1763 which the mechanism has been put in -[SOGoDraftObject sendMail]
1765 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
1766 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
1767 adapted algorithms to the new SOGoDraftObject methods.
1768 ([-deleteAction]): removed method since local draft objects cannot
1769 be removed by the user.
1771 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1772 -expungeAction]): new method replacing the one previously found in
1774 ([UIxMailFolderActions -createFolderAction])
1775 ([UIxMailFolderActions -renameFolderAction])
1776 ([UIxMailFolderActions -deleteFolderAction])
1777 ([UIxMailFolderActions -emptyTrashAction])
1778 ([UIxMailFolderActions -subscribeAction])
1779 ([UIxMailFolderActions -unsubscribeAction]): error situations
1780 should have http return code 500 instead of 403.
1782 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1783 -composeAction]): new method replacing the one previously in
1786 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1787 -imap4URLString]): removed overriden method (see below).
1789 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
1790 cache the mailbox acl.
1791 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
1792 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
1794 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
1795 the new method of determining the users mail accounts.
1797 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
1798 longer adds a "/" at the end of the string (the default for
1799 folders), therefore this will be overriden in SOGoMailFolder
1800 rather than in SOGoMailObject.
1802 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
1803 method, moved into the new UIxMailActions module class.
1805 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
1806 -newDraft]): new method that returns a new SOGoDraftObject
1807 instance with a unique filename based on the current timestamp and
1808 the "newDraft" prefix.
1810 -lookupName:nameinContext:localContextacquire:acquire]): overriden
1811 method by detecting local drafts with their "newDraft" prefix.
1812 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
1814 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
1815 from scratch by making it a subclass of SOGoMailFolder.
1817 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
1820 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
1823 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
1826 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
1827 new method, initializing the new ivars: IMAP4ID, headers, text,
1828 sourceURL and sourceFlag.
1829 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
1830 ([-_ensureUserSpoolFolderPath])
1831 ([-saveMimeMessageToTemporaryFileWithHeaders:])
1832 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
1833 ([-deleteTemporaryMessageFile:], [-delete], [-content])
1834 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
1835 ([-uid], [-flags], [-size], [-envelope]): removed methods.
1836 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
1838 ([SOGoDraftObject -setSourceURL:newSourceURL])
1839 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
1840 methods to store the url of the original message between accesses
1841 so that, depending on the action taken (forward or reply), the
1842 correct flag can be given.
1843 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
1844 the imap4 id that is returned for the message whenever it is saved
1845 into the drafts folder.
1846 ([SOGoDraftObject -save]): new method that takes in charge the
1847 saving of the message in the IMAP drafts folder.
1848 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
1849 new method that fills the original data of the new message with
1850 the reply content of the original message.
1851 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
1852 above for message forwarding.
1853 ([-spoolFileManager]): removed useless method (only returned the
1854 default filemanager...)
1855 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
1856 the resulting message as an NSData chunk.
1858 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
1859 containing a rewrite of the mail action methods found in
1860 UI/Mailer/, that needed to be put in the SOGoMailObject class.
1861 ([SOGoMailObject -subjectForReply]): new method that returns a
1862 subject suitable for replies.
1863 ([SOGoMailObject -contentForReply]): new method that returns the
1864 textual content of an email, quoted for replying.
1865 ([SOGoMailObject -filenameForForward]): new method that returns
1866 the name of the filename that should contain the forwarded
1867 message, based on its subject.
1868 ([SOGoMailObject -subjectForForward]): explicit.
1870 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1872 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1873 -mailAccounts]): rewrote method to return the name of the mail
1874 accounts now available with the -[SOGoUser mailAccounts] method.
1875 ([UIxMailMainFrame -showLinkBanner]): removed method.
1876 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
1877 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
1878 ([UIxMailMainFrame -rootURL]): removed method.
1879 ([UIxMailMainFrame -userRootURL]): removed method.
1880 ([UIxMailMainFrame -calendarRootURL]): removed method.
1881 ([UIxMailMainFrame -contactsRootURL]): removed method.
1882 ([UIxMailMainFrame -hasErrorText])
1883 ([UIxMailMainFrame -errorText])
1884 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
1885 ([-composeAction]): removed method. Now provided by
1886 UIxMailAccountActions.
1887 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
1888 ([UIxMailMainFrame -hideFolderTree]): removed method.
1889 ([UIxMailMainFrame -treeRootClassName]): removed method.
1890 ([UIxMailMainFrame +initialize]): removed method.
1891 SOGoMailTreeRootClass userdefaults will no longer have any effect.
1893 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1894 -redirectToLocation:newLocation]): new method that implements the
1895 same functionality as WOComponent.
1897 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
1899 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
1900 method that returns whether the current mail is store in the
1901 drafts folder hierarchy.
1903 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
1904 ([-primaryEmail]): removed method.
1905 ([SOGoUser -primaryIMAP4AccountString]): removed method.
1906 ([SOGoUser -mailAccounts]): new method that returns an array
1907 containing description dictionaries for all the user mail
1908 accounts. Each account also contain the user's identities for that
1910 ([SOGoUser -allIdentities]): new utility method that returns all
1911 the user identities on all accounts.
1912 ([SOGoUser -primaryIdentity]): new method return the first
1913 identity of the first account.
1915 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
1917 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1918 -isInDraftsFolder]): returns NO.
1919 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
1921 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
1923 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1924 -isInDraftsFolder]): new method that detects if self is contained
1925 by the drafts folder by calling itself on the container object.
1927 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
1929 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
1930 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
1931 return the name of the mail accounts now available with the
1932 -[SOGoUser mailAccounts] method.
1934 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
1937 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
1940 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1941 -keysWithFormat:format]): method that forward the method of the
1942 same name to each member of the array, considering they all are
1943 instances of NSDictionary.
1944 ([NSArray -objectsForKey:key]): same principle as above.
1945 ([NSArray -flattenedArray]): new method that transforms an array
1946 of arrays into a single array containing all the elements of the
1949 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1950 -keysWithFormat:keyFormat]): new method inspired by the python
1951 string formatting system and which replaces occurences of "%{key}"
1952 by the corresponding keys.
1954 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1956 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
1957 sql script before the generic one when initializing mandatory
1960 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1962 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1963 -pureEMailAddress]): new utility method inspired by the
1964 "_rawSender" private method in SOGoDraftObject, which it now
1967 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
1968 provides a common API for sending emails, no matter what the
1971 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1973 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1974 -quotasAction]): invoke "relativeImap4Name" instead of
1975 "nameInContainer" since the latter also returns the "folder"
1978 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1979 -listMailboxesAction]): declare the output as text/plain in UTF-8.
1981 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1982 -deleteFolderAction]): fixed the url of the destination folder.
1984 * Main/SOGo.m ([SOGo +initialize]): show the build date and
1985 hostname at startup.
1987 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1989 * SoObjects/Appointments/SOGoCalendarComponent.m
1990 ([SOGoCalendarComponent
1991 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1992 set the mail date to the current date string returned by our
1993 rfc822DateString extension method.
1995 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1996 -_gcsFoldersFromFolder:): ignore the personal folders who are
1997 returned but don't really exist.
1999 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
2001 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
2002 has to return only one element.
2004 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2006 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
2007 -content]): new method returning the decoded content of the
2008 corresponding attachment as an NSData instance.
2009 ([UIxMailPartViewer -filename]): if the "filename" parameter of
2010 the metadata parameterList is empty, try to find out the filename
2011 from the "disposition" metadata returned with the BODYSTRUCTURE
2014 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
2015 -composeAction]): prefix the INBOX folder with "folder".
2017 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
2018 -relativeImap4Name]): return nameInContainer stripped from its
2019 first 6 characters since all folder names are prefixed with
2022 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2023 -imap4URLString]): invoke -relativeImap4Name instead of
2024 "nameInContainer" since the former will return the fixed IMAP4
2025 foldername and the latter the SoObject name.
2027 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2028 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
2030 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
2031 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
2032 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
2033 ([SOGoMailAccount -sentFolderNameInContext:])
2034 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
2035 names with "folder".
2036 ([SOGoMailAccount -inboxFolderInContext:_ctx])
2037 ([SOGoMailAccount -sentFolderInContext:_ctx])
2038 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
2039 the folder names with "folder" since they are prefixed earlier.
2041 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2043 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
2044 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
2045 all starts with "folder".
2047 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
2048 longer declare security info from here.
2050 * SoObjects/Mailer/SOGoMailFolder.m
2051 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
2052 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
2053 folder names now always start with "folder".
2055 * SoObjects/Mailer/SOGoMailAccount.m
2056 ([-lookupName:inContext:acquire:]): folder names now always start
2059 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2061 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
2062 -forwardAction]): adapted to the new saveAttachment:withMetadata:
2065 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
2066 code to save the attached filenames with the filename returned by
2067 the web server as well as their mime types.
2069 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
2070 ([UIxMailPartMessageViewer -toAddresses])
2071 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
2072 the corresponding fields separated with a ", " (if needed).
2074 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
2075 -saveAttachment:_attachwithMetadata:metadata]): new method
2076 replacing -saveAttachment:withName: and which takes a dictionary
2077 as parameter with the filename and the mime type of the
2079 The mimetype is then saved in a hidden text file.
2080 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
2081 take the mime type from the hidden text file related to the
2084 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
2085 ([SOGoContactGCSFolder
2086 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2087 return records if the db records are > 0 and not just > 1...
2089 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2091 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
2093 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
2095 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2096 ([SOGoContactLDAPFolder
2097 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2098 translate the returned records to a normalized form.
2100 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2101 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2102 translate the returned records to a normalized form.
2104 * UI/Scheduler/UIxCalListingActions.m,
2105 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
2106 SoObjects/SOGo/AgenorUserDefaults.m,
2107 SoObjects/Contacts/SOGoContactGCSFolder.m,
2108 SoObjects/Appointments/SOGoAppointmentFolder.m,
2109 OGoContentStore/OCSiCalFieldExtractor.m,
2110 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
2111 table fields with "c_".
2113 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2115 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
2116 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
2117 the application settings. If set, both limit will influence the
2118 maximum size of the resultsets and the time taken to solve them.
2119 ([LDAPSource -_initLDAPConnection]): initialize the limits.
2121 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2123 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
2124 method that declares the DAV namespace related to CardDAV.
2125 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
2126 method that declares the "access-control" and "addressbook-access"
2127 classes to the list.
2129 * SoObjects/Appointments/SOGoAppointmentFolder.m
2130 ([-lookupActionForCalDAVMethod:]): removed method.
2131 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
2132 method that declares the DAV namespace related to CalDAV.
2134 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
2135 optional method for subclasses which handle specific extensions to
2136 the DAV protocol: CardDAV or CalDAV.
2138 -lookupName:lookupNameinContext:localContextacquire:acquire]):
2139 new overriden method that handles dav invocations for extensions
2140 to DAV by returning an appropriate SoSelectorInvocation.
2142 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2143 -asDavInvocation]): new method returning a dictionary with a "ns"
2144 key representing the dav namespace and a "method" key representing
2145 the dav method name of the request.
2147 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
2148 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
2150 ([UIxPreferences -shouldDisplayPasswordChange]): new template
2151 method that returns the value of SOGoUIxUserCanChangePassword.
2153 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
2154 scan the value of SOGoUIxDefaultModule. If not set, the default
2155 module defaults to "Calendar".
2156 ([SOGoUserHomePage -defaultAction]): redirect the user to the
2157 value of "SOGoUIxDefaultModule".
2159 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2161 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2162 -contactInfos]): cache the results to avoid multiple invocations.
2164 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2165 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
2166 really should return something or if we fake to return nil...
2168 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2170 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
2171 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
2172 default is set to "bypass".
2174 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2175 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
2176 when authMethod is set to "bypass" from now on. This would avoid a
2177 security concern with a default installation of SOGo.
2178 AuthentificationMethod is now prefixed with "SOGo" for better
2181 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2183 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2184 -quotasAction]): new method that returns a json representation of
2187 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2189 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2190 -imap4URL]): rewrote method to support accented mailbox names.
2191 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
2192 SOGoAuthenticator's passwordInContext:.
2194 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2195 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
2196 start and due dates to nil if hasStartDate and hasDueDate are
2199 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2200 -passwordInContext:context]): made method public.
2202 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2203 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
2204 to false to avoid a null violation.
2206 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2208 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2209 -contentAsString]): returns the message encoded in ISO Latin 1
2212 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
2213 SOGoSuperUsername user defaults.
2214 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
2216 ([SOGoUser -rolesForObject:objectinContext:context]): if the
2217 current user is the superuser, grant him/her the "owner" role.
2219 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
2220 the folder only if the current user is the owner of the future
2223 * SoObjects/Appointments/SOGoCalendarComponent.m
2224 ([SOGoCalendarComponent -contentAsString]): we return the content
2225 based on the permissions returned by the security manager instead
2226 of by looking at the user roles.
2228 * SoObjects/Appointments/SOGoAppointmentFolder.m
2229 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
2230 folders of the user to whom this folder belongs instead of the
2231 active user. This way, a delegate user will be able to have the
2232 same view that the original user has if he connects from his user
2235 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
2236 user exists before creating the SOGoUserFolder instance. If not,
2239 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
2240 return the message source code in plain text.
2242 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2243 -contentAsString]): returns the message encoded in UTF8.
2245 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2247 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
2248 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
2249 leading tagname into account when serializing the element values.
2251 * Main/SOGoProductLoader.m: only load bundle directories ending
2252 with the "SOGo" extension.
2254 * Main/SOGo.m ([SOGo
2255 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
2256 result set if the query has caused no exception. Otherwise we get
2257 an "evaluation is in progress exception".
2259 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2261 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2262 -generateSQLForInsert]): initialize error to nil before the
2263 serialization. Otherwise the method can get confused if it ever is
2264 initialized to something else.
2266 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
2267 -folderIsMandatory]): returns NO unconditionnally.
2269 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2270 -appendPersonalSources]): add the "personal" folder to the list of
2271 user folders even if it doesn't exist, so that it is created when
2272 the user accesses it.
2274 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2275 -folderIsMandatory]): returns YES if nameInContainer is set to
2276 "personal", which is the default address book.
2278 * SoObjects/Appointments/SOGoAppointmentFolder.m
2279 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
2280 users must have one Calendar folder (one and only one).
2281 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
2282 escaping '\' so make the carriage return a real one. This way,
2283 PgSQL 8 won't complain about escaping the string.
2285 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
2286 method that create the folder if considered mandatory.
2287 ([SOGoFolder -folderIsMandatory]): new method that determines
2288 whether the folder should be created automatically or not. To be
2289 overriden by subclasses.
2291 * Main/SOGo.m ([SOGo -run]): override method and create the
2292 missing system tables if needed.
2294 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2296 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
2297 -mailDateFormatter]): returns the user's date formatter.
2299 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
2300 applies the user timezone to the date object before returning it.
2302 * UI/Common/UIxSortButton.m: removed useless class module.
2304 * UI/Common/UIxSortableTableHeader.m: removed useless class
2307 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2308 -contactInfos]): use the "asc" url parameter instead of "desc" to
2309 determine the ordering.
2310 ([-sortOrdering]): removed method.
2311 ([UIxContactsListView -init]): removed the "searchText" ivar.
2312 (general): the template no longer use the UIxSortableTableHeader
2315 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
2316 -defaultSortKey]): default sort following the messages arrival
2317 instead of their date.
2318 ([-isSortedDescending]): removed method.
2319 ([-imap4SortOrdering]): use the "asc" url parameter instead of
2320 "desc" to determine the ordering.
2321 (general): the template no longer use the UIxSortableTableHeader
2324 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2326 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
2328 ([-setQualifier:_msg], [-qualifier]): removed methods.
2329 ([UIxMailListView -defaultAction]): added code to handle the
2330 search criteria and value passed as url parameters. Also, we now
2331 handle the same search criterias as Thunderbird/Icedove.
2333 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2335 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
2336 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
2337 the string instead of the string itself.
2338 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
2340 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
2341 bool var "acceptAnyUser" that is set when the AuthenticationMethod
2342 user default is nil.
2343 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
2344 unconditionnally returns an instance whenever acceptAnyUser is set.
2346 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2348 * Main/sogod.m (main): prevent SOGo from running as root.
2350 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2352 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2353 -setCurrentPassword:newPassword]): new stub method.
2354 ([SOGoUser -dateFormatterInContext:context]): new method that
2355 returns an instance of SOGoDateFormatter configured based on the
2358 * UI/Common/UIxPageFrame.m ([UIxPageFrame
2359 -relativePreferencesPath]): new method.
2361 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
2362 removed useless method.
2364 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
2365 different configurable formats (long and short date + time).
2367 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
2369 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2370 -isInternetRequest]): removed method.
2372 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2373 -jsonRepresentation]): new method with an explicit name.
2375 * UI/PreferencesUI/product.plist: new bundle that provides a web
2376 ui for handling user defaults.
2378 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
2380 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
2382 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
2384 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2386 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
2388 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2390 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
2391 -compareEventsAscending:otherEvent]): no longer use compare: on
2392 the time objects since one of them could be an NSNull, which
2393 crashes when comparing with anything.
2395 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2396 -eventsListAction]): sort events from here.
2397 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
2399 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
2400 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
2402 * SoObjects/Appointments/SOGoAppointmentFolder.m
2403 ([SOGoAppointmentFolder
2404 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
2405 no longer sort elements from here.
2407 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2409 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2410 -aclsForUser:uid]): implemented method by forwarding the request
2411 to the container. This fixes a bug where users could no longer
2412 read emails from shared folders.
2414 * SoObjects/Appointments/SOGoCalendarComponent.m
2415 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
2416 here, but rather in its parent class.
2418 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
2419 -stringForSecondsSinceThe70s:seconds]): new utility method.
2421 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2422 -eventsListAction]): no longer reduce the end day of one day for
2423 all day events since everything has been fixed in
2424 OCSiCalFieldExtractor.
2426 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2427 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
2428 the end date of all day events of 1 so that they stay on their
2431 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2433 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
2435 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
2437 ([-fetchCoreTasksInfos]): removed method.
2439 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2440 -init]): initialize an instance of SOGoDateFormatter.
2441 ([UIxCalListingActions -eventsListAction]): the display start and
2442 end dates are added to the listing for each event.
2444 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
2446 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2447 -isAllDay]): returns YES if the "hm" url parameter is set to
2449 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
2450 is displayed one day earlier.
2452 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2454 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2455 -_setupContext]): take the range of dates specified by the popup
2458 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
2459 WODirectAction that returns WOResponse objects with the events or
2460 todos satisfying the parameters passed in the url.
2462 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2463 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
2464 "isAllDay" into account and compute the amount of days to pass to
2467 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
2469 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
2470 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
2471 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
2472 new method that returns a json-formatted array of the visible tasks
2473 for the current user.
2475 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2477 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
2478 object must be present in the list of UIDs we delete the object
2479 from. Otherwise Calendar objects having no organizer and no
2480 attendees will remain in their owner's Calendar.
2482 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2483 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
2484 first 3 elements of the path array if the url returned by
2485 baseURLInContext: returns a hostname.
2487 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2488 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
2489 nil, in which case a crash happens when calling hasPrefix:.
2490 ([SOGoMailFolder -_sharesACLs]): same as above.
2491 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
2492 otherUsersFolderName is nil, we return nil.
2493 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
2494 nil from [self otherUsersPathToFolder], we return nil too.
2496 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2498 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2499 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
2500 the result of [self baseURLInContext:] to avoid a double escaping
2501 in the resulting string.
2503 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
2504 the user has the "ObjectReader" role on the parent container, then
2505 he is granted the "ObjectViewer" role on this object. Same for
2506 "ObjectEraser", although this might change later.
2508 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2509 -toolbar]): determine the toolbar filename based on the
2510 permissions declared by the securitymanager. The role mechanism
2511 has been adjusted on a lowerlevel so we can simplify the code.
2513 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2514 -initWithName:newNameinContainer:newContainer]): read the content
2515 directly from here. That way we can determine whether the object
2517 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
2518 the ObjectCreator role is enabled, we also grant the ObjectEditor
2519 role to the current user.
2521 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
2522 changed the method paradigm to only return HTTP code 204. Not test
2523 is done whatsoever since the security manager does it for us.
2525 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
2526 removed method because the same exists in UIxFolderActions.m
2528 * UI/Contacts/UIxContactsUserRightsEditor.m
2529 ([UIxContactsUserRightsEditor
2530 -setUserCanReadObjects:userCanReadObjects]): new method.
2532 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
2533 "FolderEraser" and special permission "Access Object". Removed
2534 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
2535 can be used instead. Removed "FolderReader" since it is useless.
2537 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2538 -vCard]): directly use the "content" ivar since it is initialized
2539 during object creation.
2541 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2542 ([SOGoContactLDAPFolder -init]): no longer handle the
2543 nameInContainer no the container ivars. They were removed because
2544 this class is a descendant of SOGoObject which already has them.
2545 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
2546 returning "displayName".
2547 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
2550 * SoObjects/Appointments/SOGoCalendarComponent.m
2551 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
2552 ([SOGoCalendarComponent -findParticipant:user]): new name for
2553 method "participant:".
2554 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
2555 findparticipant but taking a uid string as parameter.
2556 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
2557 iCalendar automatically. Instead, this is done only when the user
2558 is a "date and time viewer".
2559 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
2560 (modifier and responder) into account by compiling them with the
2563 * SoObjects/Contacts/SOGoContactFolder.h: removed
2564 "nameInContainer" from the list of required methods.
2566 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
2567 -davContentType]): returns "text/calendar".
2569 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2570 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
2571 groupdav resource-type.
2573 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2574 -davContentType]): same as below.
2576 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2577 -initWithName:newNameinContainer:newContainer]): new overriden
2578 method setting the custom owner directly.
2580 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2581 -davContentType]): same as below.
2583 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2584 -davContentType]): same as below.
2586 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
2587 declare "httpd/unix-directory".
2589 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
2590 "UTC" as fallback timezone instead of "Canada/Eastern".
2591 ([-hasEmail:email]): make use of the new NSArray's
2592 containsCaseInsensitiveString: method.
2594 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2595 -davContentType]): declare "message/rfc822" as content type.
2597 * SoObjects/Appointments/SOGoAppointmentFolder.m
2598 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
2600 ([SOGoAppointmentFolder
2601 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
2602 ([-fetchContentObjectNames]): commented out method since it was
2603 usefull only for testing Funambol.
2605 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
2606 -containsCaseInsensitiveString:match]): an enhanced version of
2609 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
2611 ([-showMarkDeletedButton]): removed useless method.
2612 ([-showTrashButton]): removed useless method.
2614 * SoObjects/Appointments/iCalEntityObject+SOGo.m
2615 ([iCalEntityObject -userIsParticipant:user]): new proxy method
2616 that invoked isParticipant on self for each possible email
2617 addresses of the user passed as parameter.
2618 ([iCalEntityObject -userIsOrganizer:user]): same as above.
2620 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
2623 * SoObjects/Appointments/SOGoAppointmentObject.m
2624 ([SOGoAppointmentObject
2625 -saveContentString:contentStringbaseVersion:baseVersion]): remove
2626 method since an event may not have an organizer.
2628 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2629 -GETAction:localContext]): clarified method. Added support for
2630 content-type (thanks to Helge Hess).
2631 ([SOGoObject -initWithName:_nameinContainer:_container]):
2632 initialize and retain the owner.
2633 ([SOGoObject -davContentType]): returns "text/plain".
2635 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2637 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2638 -addUserInAclsAction]): send an acl addition mail.
2639 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
2642 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2643 -_realActionWithFolderName:folderDict]): handle the possible
2644 presence of the "mail-invitation" url parameter. If present, the
2645 user will be redirected to the relevant folder.
2647 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
2648 ([SOGoUser -language]): new method that returns the user's
2649 preferred language, or the system's if none has been set yet.
2651 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
2652 that returns the full dav url to self.
2653 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
2654 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
2655 returns the full so url to the base of the SOGo module to which
2656 self belongs, and for the specified user.
2657 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
2658 but for the current user.
2659 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
2660 required by the acl advisory templates and which returns a link
2661 the target user can click to activate its new subscription.
2662 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
2663 but for inclusion of the application/x-sogo-notification part,
2664 which will be handled by the Lightning enhancer plugin.
2666 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
2667 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
2668 do nothing yet since imap folder subscription is not handled yet.
2670 * SoObjects/SOGo/SOGoContentObject.m
2671 ([-hasSupportForDefaultRoles]): removed method.
2673 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2674 -getFullEmailForUID:uid]): new method that returns the username +
2677 * SoObjects/Appointments/SOGoCalendarComponent.m
2678 ([SOGoCalendarComponent +initialize]): the default language for
2679 mail templates is now set to English.
2681 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
2682 SOGoACLAdvisory implementing the french template for user removal
2685 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
2686 SOGoACLAdvisory implementing the french template for user
2689 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
2690 SOGoACLAdvisory implementing the english template for user removal
2693 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
2694 SOGoACLAdvisory implementing the english template for user
2697 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
2698 supercall of all the acl advistory templates. The model is based
2699 on SOGoAptMailNotification except that the template encapsulates
2700 the message to be sent. Later, we might create a superclass common
2701 to all template-based emails.
2703 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2704 -addRange:newRange]): new method that store a string
2705 representation of the NSRange passed as parameter.
2706 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
2707 any range contained in self intersect with the one passed as parameter.
2709 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
2710 store ranges in an array to prevent them from intersecting with
2711 each other during the passes.
2713 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2715 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2716 -primaryFetchMailboxInfo]): useless method. Removed.
2718 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2720 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2721 -toManyRelationshipKeys]): invoke [self subfolders].
2722 ([SOGoMailFolder -subfolders]): new method containing what used to
2723 be in toManyRelationshipKeys.
2724 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
2727 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2728 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
2729 named and at the beginning of which we put the predefined folders.
2731 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2732 -emptyTrashAction]): new method inspired by a similar one from
2733 UIxMailListView, to which we added the ability to remove
2736 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
2737 method. Replaced with a similar one in UIxMailFolderActions.
2739 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2740 -renameFolderAction]): implemented method.
2741 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
2742 specified folder. Instead, we put it in the trash folder.
2744 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
2745 method, replaced with a similar method in the new
2746 UIxMailFolderAction class module.
2747 ([-deleteFolderAction]): idem.
2749 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2750 -createFolderAction]): new method implementing subfolder creation.
2751 ([UIxMailFolderActions -renameFolderAction]): new method
2752 implementing subfolder renaming (basic implementation to be
2754 ([UIxMailFolderActions -deleteFolderAction]): new method
2755 implementing folder deletion.
2757 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
2758 web actions related to the handling of imap folder.
2760 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2762 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2763 -ownerInContext:localContext]): overriden method because we are an
2764 IMAP4 client and we need a bit more intelligence to deduce the
2765 owner of the current folder.
2766 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
2767 return an NSException so we need to be careful here to avoid a
2769 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
2770 NSException so we need to be careful here to avoid a crash.
2772 * SoObjects/Mailer/SOGoMailAccounts.m
2773 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
2774 there is no longer any concept of Intranet or Internet connection
2777 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2778 -sharedFolderName]): new method.
2779 ([SOGoMailAccount -otherUsersFolderName]): new method.
2781 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
2782 new javascript code and the new UIxMailAccountActions class.
2784 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
2785 javascript code and the new UIxMailAccountActions class.
2787 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
2788 new javascript code and the new UIxMailAccountActions class.
2790 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2791 -listMailboxesAction]): new method that returns a json-formatted
2792 tree of all the mailboxes available to the current user.
2794 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
2795 web actions related to the handling of mail accounts.
2797 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
2800 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
2801 -jsonRepresentation]): new interface method meant to be overriden
2802 by the primitive classes.
2804 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2806 * UI/MailerUI/UIxMailSplashView.m: removed.
2808 * SoObjects/Appointments/SOGoCalendarComponent.m
2809 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
2810 the uid to the list only when the user email is recognized by the
2813 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2815 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2816 -isDeletionAllowed]): completed method with the new imap acl api.
2818 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
2821 * SoObjects/SOGo/SOGoPermissions.m: added the new role
2822 "SOGoMailRole_MessageEraser".
2824 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
2825 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
2826 "defaultUserID" method into account.
2828 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
2829 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
2830 "defaultUserID" method into account.
2832 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
2833 methods to support the IMAP acls mentionned in the RFC 4314,
2834 removed the ones specific to Cyrus.
2836 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
2837 mandatory method for subclasses. Removed the SOGoDefaultUserID
2840 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
2841 overriden method to return @"<default>".
2843 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2844 -defaultUserID]): overriden method to return @"<default>".
2846 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2847 -aclsForUser:uid]): overriden method.
2848 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
2849 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
2850 ([SOGoMailFolder -defaultUserID]): overriden method.
2851 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
2853 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2855 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2856 -aclUsersForObjectAtPath:objectPathArray]): new method that being
2857 forwarded the calles to aclUsers for the GCS-based subclasses of
2860 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
2861 methods that would have been used to support IMAP acls. Replaced
2862 them with the new protocol for them that has been implemented in
2863 SOGo during the last few weeks.
2865 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2866 -hasSupportForDefaultRoles]): override method by returning "YES".
2868 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2869 -addObjectUniquely:object]): new method with an explicit name.
2871 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
2872 "acl" to "aclUsers". Now designed to return only the uid of the
2873 users involved in an ACL.
2874 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
2875 "NO" by default. To indicate to the acl editor that we don't want
2876 to handle a default user.
2878 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
2879 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
2882 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
2883 provides a view to the IMAP acls.
2885 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
2887 * UI/WebServerResources/MailerUI.js: replaced all invocations of
2888 addEventListener to the use of prototype's Event object. Also,
2889 configured all menus programmatically following descriptions lists
2890 containing their callbacks, or nulls, submenus id or separators.
2892 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2894 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2895 -addUserInAclsAction]): save the previous roles of the user
2896 (unlikely) or the default roles, or None instead of saving the
2897 roles that should appear the first time in the role editor when no
2898 default has been set...
2900 * SoObjects/SOGo/SOGoObject.m: defined a new constant
2901 "SOGoDefaultUserID".
2903 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2904 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
2905 ignore the "AuthorizedSubscriber" role and add the "None" role
2906 when no other role is found.
2908 * UI/Common/UIxAclEditor.m: added a button for the new default
2911 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2912 -_initRights]): don't take the "None" role into account when
2913 initializing the list of current roles.
2915 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
2918 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2920 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2921 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
2922 There is no need to subscract the start from the length if a space
2923 is not found since the range has not changed either. Finally, the
2924 first character before the url might also be a tab or a cr, so we
2925 match it against the "urlAfterEndingChars" custom NSCharacterSet.
2926 ([NSString -stringByDetectingURLs]): modified to handle email
2927 addresses and add a correct "mailto:" link.
2929 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2931 * SoObjects/Appointments/SOGoAppointmentFolder.m
2932 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
2933 method to return the events in the range of 2 weeks ago up to 4
2936 * UI/MailPartViewers/UIxMailPartTextViewer.m
2937 ([UIxMailPartTextViewer -flatContentAsString]): use the new
2938 "stringByDetectingURLs" method to offer clickable urls.
2940 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2941 -stringByDetectingURLs]): this new method replaces passive URLS
2942 with active ones for HTML resolution of the text.
2944 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2946 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2947 -asQPSubjectString:encoding]): simplified method.
2948 The headers indicates "utf-8" again thank to our fix in
2951 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
2954 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2956 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2957 -removeUserFromAclsAction]): implemented this method which was
2958 missing and is required to remove users from ACLs.
2960 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2961 -subscribeAction]): folderDict was not autoreleased, resulting in
2964 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2965 -primaryFetchProfile]): when building with libFoundation, don't
2966 use the "propertyList" method from NSString. Rather, we convert
2967 the string to an NSData instance and passit as parameter to
2968 NSDeserializer. This way, we obtain a mutable dictionary rather
2969 than an immutable one.
2971 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
2972 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
2973 constant string "contentTypeValue".
2974 contentTypeValue is now set back to iso-8859-1 since NGMime
2975 converts extracts the data in that encoding.
2977 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2979 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2980 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
2981 "bindFields" value is present in the user defaults, use the
2982 specified fields to find the dn of the user to bind.
2983 ([LDAPSource -allEntryIDs])
2984 ([LDAPSource -fetchContactsMatching:match])
2985 ([LDAPSource -lookupContactEntry:entryID])
2986 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
2987 bind and unbind the connection on each request.
2989 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
2991 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2992 -contactSearchAction]): simplified method to use the facilities
2993 provided by the LDAPUserManager. No longer takes care of the
2994 "ldap-only" url parameter since all requests are handled by the
2997 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2998 -primaryFetchProfile]): check that the value returned is not null
2999 before interpreting it.
3001 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
3002 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
3003 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
3004 system email is already present, remove it before adding it.
3006 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
3007 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
3008 loginToCheck is not empty.
3009 ([LDAPSource -fetchContactsMatching:match]): check that match is
3011 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
3013 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
3016 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3018 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
3020 ([SOGoUser -systemEmail]): returns the email formed from the
3021 username and the default mail domain.
3022 ([SOGoUser -hasEmail:email]): test whether the user has the
3023 specified email, in a case-insensitive way.
3025 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3026 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
3027 check login information.
3029 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3030 ([SOGoContactLDAPFolder
3031 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
3032 no longer manage LDAP connections. The requests are forwarded to
3033 the relevant LDAPSource instead.
3035 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3036 -appendSystemSources]): pass LDAPSource objects to
3037 SOGoContactLDAPFolder instances.
3039 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
3040 address of the "from" field before sending the message. Otherwise,
3041 sending the mail won't work.
3043 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
3044 rewrote this method to request all the available email identities
3045 for the current user. Also, the from field also contains the full
3046 name of the user, not just his/her email address.
3048 * SoObjects/Appointments/SOGoCalendarComponent.m
3049 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
3050 from the previous module iCalEntityObject+Agenor.
3051 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
3052 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
3055 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
3056 replacing the SOGoContactLDAPEntry module. It was renamed as such
3057 because it now receives a dictionary instead of an NGLdapEntry.
3058 It thus can now handle data from any source of LDIF data, not
3059 only coming from LDAP.
3061 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
3062 implementing most of what used to be the AgenorUserManager class.
3063 The difference is that users are cached in the forme of
3064 dictionaries and many sources are used. Also, it can be used to
3065 search LDAP contacts.
3067 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
3068 the concept of "ldap source", to be used by all the classes
3069 needing access to LDAP-provided information: addressbooks and the
3070 user manager. Most the method thereing are transcriptions of
3071 methods previously found in SOGoContactLDAPFolder. It also contain
3072 utility methods for user matching and authentification.
3074 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
3075 module, rendered useless by code refactoring.
3077 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
3078 with the freshly written "LDAPUserManager".
3080 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3082 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
3083 SOGOContactLDIFEntry.
3085 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
3086 module, obsoleted by code in SOGo/LDAPSource.[hm].
3088 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3090 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
3091 new method with an explicit name.
3093 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3095 * SoObjects/Appointments/SOGoCalendarComponent.m
3096 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
3097 replacing "isOrganizer:orOwner:" by taking only one instance of
3098 SOGoUser as parameter.
3099 ([SOGoCalendarComponent -participant:user]): new method replacing
3100 the previous "isParticipant" boolean method by returning the first
3101 participant matching the user passed as parameter. This method is
3102 used so that both the regular email address and the "system email
3103 address" of the user are matched against the participants emails.
3105 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3106 -getSystemEMailForUID:uid]): new method that returns the email
3107 formed with the user's uid and the default mail domain.
3109 * SoObjects/Appointments/SOGoCalendarComponent.m
3110 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
3111 was previously commented out.
3113 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
3114 forwared to [AgenorUserManager getSystemEmailForUID:].
3116 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3117 -toolbar]): method replacing the one with the same name in the
3118 task and appointment editor classes. This method makes also use of
3119 the new method "isOrganizerOrOwner:" and "participant:" in
3120 SOGoCalendarComponent.
3122 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3123 -toolbar]): removed method, replaced with a method with the same
3124 name in UIxComponentEditor.
3126 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
3127 method, replaced with a method with the same name in
3130 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3131 -primaryFetchProfile]): the values returned from the database are
3132 converted to a put dictionary first, since the dictionary returned
3133 is actually an immutable one, which can cause a crash afterwards.
3135 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3137 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
3138 and "SOGoRole_ObjectEditor".
3140 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
3141 -prepareRightsForm]): this method is no longer mandatory.
3143 * UI/Contacts/UIxContactsUserRightsEditor.m
3144 ([UIxContactsUserRightsEditor
3145 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
3146 module to handle acls related to the address books. Partial
3149 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3150 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
3153 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
3154 specified roles from cache.
3155 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
3156 put resulting roles in cache.
3158 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
3159 initWithName:inContainer:. Instead, directly initialize the ivars
3160 as it is supposed to be to avoid an infinite loop whenever one of
3161 those two methods are overriden.
3163 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
3166 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3167 -aclsForUser:uid]): override method so that SOGo won't crash when
3168 loading the contact card.
3170 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3172 * SoObjects/Appointments/SOGoAppointmentFolder.m
3173 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
3174 "freebusy" special user should only require opaque elements.
3176 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3178 * SoObjects/Appointments/SOGoAppointmentFolder.m
3179 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
3180 our double declaration where the resulting XML would be screwed.
3181 There is only one collection per namespace.
3183 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
3184 rfc822DateString]): new method that returns a string conform to
3185 rfc 822 and suitable for email headers.
3187 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
3188 "rfc822DateString" category method on the date we put in the
3191 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3193 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
3194 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
3195 which should never be overriden.
3196 ([UIxUserRightsEditor -appendRight:newRight])
3197 ([UIxUserRightsEditor -removeRight:right])
3198 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
3199 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
3200 methods that can be used by the subclasses.
3201 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
3202 mandatorily be overriden to prepare the elements of the subclassed
3204 ([UIxUserRightsEditor -updateRights]): new method that should
3205 mandatorily be overriden to update the user rights from the
3206 elements of the subclassed form.
3208 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
3209 check if the uid is already listed before adding it to our array.
3210 This is because the acl table can contain more than one record per
3211 user/object relationship.
3213 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3214 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
3215 "roles" parameter is now an NSArray instead of a string. Therefore
3216 we loop throughout the array to populate the table. All the
3217 relevant records are removed prior to the addition of the new
3220 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
3221 -aclsForUser:uid]): new override that returns nil until we add
3222 support for IMAP acls.
3224 * SoObjects/Mailer/SOGoMailAccounts.m
3225 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
3227 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3228 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
3230 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3231 -aclsForUser:uid]): override this method which will always return
3234 * SoObjects/SOGo/SOGoPermissions.[hm]: added
3235 [Public,Private,Confidential]
3236 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
3237 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
3238 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
3240 * SoObjects/Appointments/SOGoAppointmentFolder.m
3241 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
3242 that defines default roles for new elements in the acl.
3244 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
3245 module and subclass of UIxUserRightsEditor specific to the
3246 handling of user rights on calendar folders.
3248 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3250 * SoObjects/Appointments/SOGoAppointmentFolder.m
3251 ([SOGoAppointmentFolder -groupDavResourceType]): return both
3252 "vevent-collection" and "vtodo-collection".
3254 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
3255 that implements the detailed editor of user rights per-object.
3257 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3259 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3260 -rolesForObject:objectinContext:context]): no longer query objects
3261 for "roleForUser:". Instead, all objects should implement
3264 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
3265 new method to comply with the new acl "protocol" in SOGoObject.
3266 Uses SOGoFolder's new facilities for ACLS.
3267 ([SOGoContentObject -aclsForUser:uid]): idem.
3268 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
3269 ([SOGoContentObject -removeAclsForUsers:users]): idem.
3271 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3272 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
3273 based folders. This method is derived from the code that was in
3274 UIxAclFolder before its removal.
3275 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
3278 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
3280 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
3281 ([SOGoFolder -setRoleForUsers:uidsto:role])
3282 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
3284 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
3285 that requires overriding by subclasses.
3286 ([SOGoObject -aclsForUser:uid]): idem.
3287 ([SOGoObject -defaultAclRoles]): idem.
3288 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
3289 ([SOGoObject -removeAclsForUsers:users]): idem.
3291 * UI/Common/UIxObjectActions.m: new module implementing the web
3292 actions common to SOGoObject and all its subclasses.
3293 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
3294 user with the clientObject defaults user rights to the object's
3297 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
3298 to the point where it will only list the users (and their name)
3299 associated with an object acl.
3301 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
3302 methods have been moved into SOGoObject and SOGoFolder during a
3305 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3306 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
3307 method made useless by the programmatic handling of iCalendar
3309 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
3310 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
3311 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
3313 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
3314 drop on all folder nodes, not just on leaves.
3316 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3317 ([SOGoContactLDAPFolder
3318 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
3320 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3322 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
3323 debugging facilities when the SOGoDebugObjectAllocation user
3326 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3328 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
3329 method that SOGo will need with non-gnustep Foundation
3331 ([NSString -stringByAppendingPathComponent:component]): new method
3332 that SOGo will need when building with libFoundation. Method
3333 removed later since it is available from
3334 Foundation/NSPathUtilities.h.
3336 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
3339 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
3340 every subclass to access [WOApplication context] without having to
3341 invoke it more than once.
3343 * SoObjects/Appointments/SOGoCalendarComponent.m
3344 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
3345 moved method from SOGoTaskObject and SOGoAppointmentObject up to
3348 * UI/Scheduler/UIxCalSelectTab.m: removed module.
3350 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3352 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
3353 -vCard]): test the prefix of the card in a case-independent way.
3355 * OGoContentStore/OCSContactFieldExtractor.m
3356 ([OCSContactFieldExtractor
3357 -extractQuickFieldsFromContent:content]): we no longer accept
3358 records in a format other than versit vCard so we can get rid of a
3361 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3363 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3364 -selectorComponentClass]): restored method.
3366 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3368 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
3369 -shouldDisplayCurrentTask]): the current task is not displayed if
3370 it is NOT completed or if the "showCompletedTasks" flag is set.
3371 The logic was inverted in Lightning and is now in SOGo too.
3373 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3375 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
3376 want the "work" url instead of the "home".
3378 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3379 -_saveSnapshot]): save url values from snapshot.
3380 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
3382 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3383 -calendarList]): new method replacing "availableCalendars".
3385 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
3386 -calendarFolders]): we now take the list of subscribed calendar
3389 * SoObjects/Appointments/SOGoAppointmentFolder.m
3390 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
3391 method derived from and replacing [UIxCalView calendarFolders].
3393 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3395 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3396 -toManyRelationshipKeys]): don't put the predefined folders in the
3397 list if they are returned by the server.
3399 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
3400 longer store the "flattenedBlocks" in a dictionary since the
3401 object will be deleted anyway and we don't need to put the folders
3404 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3405 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
3406 attachment path into account when computing the part urls.
3408 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3410 * UI/Contacts/UIxContactsListViewContainer.m
3411 ([UIxContactsListViewContainer -additionalFolders]): take the list
3412 of subscribed folders from the new property list used for the user
3413 settings. The value of its key is SubscribedFolders for the
3414 dictionary entry named "Contacts".
3416 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3417 -canAccessContentAction]): new method to override the one from
3418 UIxFoldersActions by taking into account the fact that, this time,
3419 the clientObject is an ldap folder. Removed many method that used
3420 to be related to the handling of the user selector.
3422 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
3423 to make sure they can be removed.
3425 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
3426 populate the calendar entries based on the user settings plist.
3428 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3429 -selectForMailerAction]): restored method.
3431 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
3432 from a simplified version of the old UIxContactEditor (removed).
3434 * UI/Contacts/UIxContactsUserFolders.m: new template module for
3435 selecting users or user folders through an LDAP search of which
3436 the results are displayed as a tree.
3438 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
3439 method "onContactAdd" here since the Mailer is now the only module
3440 to use it when composing emails.
3442 * UI/WebServerResources/generic.js: added code for handling the
3443 new scheme used for describing SOGo folders, common code to handle
3444 folder addition or removal.
3446 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3447 -activateFolderAction]): new method that change the "active"
3448 settings in the folder-related fields in the user settings.
3449 ([UIxFolderActions -deactivateFolderAction]): see above.
3451 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3452 -checkRightsAction]): removed method.
3454 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3455 -updateAdditionalAddressBooksAction]): removed method.
3457 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3458 -updateCalendarsAction]): removed method.
3460 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3462 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3463 -checkRightsAction]): removed method.
3465 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3466 -canAccessContentAction]): new method designed to replace
3467 [UIxCalMainView checkRightsAction] in a more universal way.
3469 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3471 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3472 -roleOfUser:uidinContext:context]): take all the subkeys into
3473 account, not only the "personal" folder.
3475 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3476 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
3477 to the new components.
3479 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
3482 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3483 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
3484 field of the sogo_user_profile table, where the user-customizable
3485 changes will be saved.
3486 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
3487 similar to the one above, using the "settings" field where the
3488 automatic settings will be saved.
3490 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
3491 module to bind the userdefaults to a property list contained in a
3492 specified field of the sogo_user_profile table.
3493 ([AgenorUserDefaults
3494 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
3495 added a "fieldName" parameter.
3497 * UI/Common/UIxFolderActions.m: new module implementing web
3498 actions common to all GCS-based folders.
3500 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3502 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
3503 put a carriage return after the day name.
3505 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3506 -readFreeBusyAction]): restored method.
3508 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3510 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3511 -defaultAction]): remade module to redirect automatically to the
3514 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
3516 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3518 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3519 -deleteAction]): new web method to delete personal addressbook
3522 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3523 -delete]): override method to refuse the deletion of the folder if
3524 its nameInContainer is "personal".
3526 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
3527 that forwards the deletion request to the folder manager.
3529 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3531 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
3532 -zoomList]): new method that returns the list of available zoom factors.
3534 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3535 -changeStatusAction]): rewrote method.
3537 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3538 -_handleAttendeesEdition]): make sure "attendeesNames" has a
3539 length > 0 before computing the attendees. Otherwise there will be
3540 an invalid empty entry.
3541 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
3542 organizer when there are attendees and remove it when the
3543 attendees are removed.
3545 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3547 * UI/Scheduler/UIxAttendeesEditor.m): new component.
3549 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
3550 the task and appointment editors. Now a container component
3551 handling the common elements of tasks and events.
3553 * UI/Scheduler/UIxTaskEditor.m: same as below.
3555 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
3556 a subclass of UIxComponentEditor but a subcomponent of it.
3558 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
3559 toolbar can have the special value "none" to indicate there is
3560 none attached to the window.
3562 * SoObjects/Appointments/SOGoCalendarComponent.m
3563 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
3565 ([SOGoCalendarComponent -isParticipant:email]): new method.
3566 ([SOGoCalendarComponent -calendar:create]): takes one parameter
3567 "create" which is a boolean indicating whether we want to create
3568 the calendar if it does not exist.
3570 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3572 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
3573 of a table, the same way the dayly and weekly views have been for
3576 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
3578 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
3581 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
3582 property to point at the user folder
3584 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3586 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3587 -userInContext:]): returns "SOGoUser".
3589 * SoObjects/Appointments/SOGoCalendarComponent.m
3590 ([SOGoCalendarComponent -contentAsString]): overriden method that
3591 takes the privacy into account and discard the relevant fields if
3592 needed by generating a new content string and caching it.
3593 ([SOGoCalendarComponent
3594 -saveContentString:contentStringbaseVersion:baseVersion]): if the
3595 new method above has cached a content string, release it and set
3596 it to nil so that it will have to be regenerated in the case it is
3598 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
3599 discard the fields that have to be hidden when the card is
3602 * SoObjects/Appointments/SOGoAppointmentFolder.m
3603 ([SOGoAppointmentFolder
3604 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
3605 sure the cards are now handled as instances of
3606 SOGoCalendarComponent instead of SOGoContentObject so that their
3607 content string is taking the privacy classifiction into account.
3608 ([SOGoAppointmentFolder -_privacySqlString]): new method that
3609 generates a query to determine what information can be given and
3610 if the card itself has to be shown.
3612 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3613 -getICalPersonsFromValue:selectorValue]): removed useless
3614 "isAccessRestricted" method.
3616 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3617 -setStyle:_style]): test whether the values of orgmail and
3618 partmails are null before manipulating them, otherwise SOGo sends
3619 a "rangeOfString:" message to an NSNull, which makes it crashes.
3621 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3622 -extractQuickFieldsFromEvent:_event]): we now use the new
3623 "symbolicAccessClass" method from iCalEntity to determine the
3624 value of the "classifiction" field.
3625 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
3628 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3630 * SoObjects/Appointments/SOGoAppointmentFolder.m
3631 ([SOGoAppointmentFolder
3632 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
3633 see below, the query is adapted consequently.
3635 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3636 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
3637 renamed to "classification" and can any integer as value.
3638 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
3641 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3643 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3644 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
3645 don't prepend anything to the class and id named. Instead, we
3646 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
3649 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3651 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
3652 -rolesOfUser:logininContext:context]): if object does not exists
3653 (for example when it's being created), the current user has the
3654 same rights on it than he/she has on its parent container.
3656 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3657 -nameExistsInFolder:objectName]): methods that tests if a c_name
3658 corresponding to the name passed as parameter is present in the db
3661 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3663 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3664 -rolesForObject:objectinContext:context]): test for
3665 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
3667 * SoObjects/Appointments/SOGoCalendarComponent.m
3668 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
3669 returns the roles of the user on the container object if the event
3672 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3674 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
3675 alternativeViewer a multipart/related message is being handled.
3677 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
3680 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
3681 text/html component before text/plain.
3683 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3684 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
3685 fetching of HTML parts.
3687 * SoObjects/Appointments/SOGoCalendarComponent.m
3688 ([SOGoCalendarComponent -componentTag]): new template method that
3689 returns the vcalendar tag of the current object.
3690 ([SOGoCalendarComponent -component]): new method that returns the
3691 first object matching [self componentTag] within the current
3692 calendar object. This method replaces 'firstEventInCalendar:' as
3693 well as "firstTaskInCalendar:".
3694 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
3695 moved method from SOGoAppointmentObject.m.
3697 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3699 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
3700 module which shows each selected user's calendar in a different
3701 column instead of mixing their events together.
3703 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
3704 replaced use of [NSString stringByTrimmingWhiteSpaces] with
3705 [NSString stringByTrimmingSpaces].
3707 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
3708 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
3711 * UI/Scheduler/UIxCalDayOverview.m,
3712 UI/Scheduler/UIxCalDayChartview.m,
3713 UI/Scheduler/UIxCalDayListview.m,
3714 UI/Scheduler/UIxCalWeekOverview.m,
3715 UI/Scheduler/UIxCalWeekChartview.m,
3716 UI/Scheduler/UIxCalWeekListview.m,
3717 UI/Scheduler/UIxCalInlineMonthOverview.m,
3718 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
3720 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3722 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3723 -appendPersonalSourcesInContext:context]): release connectoin
3724 channel when everything is done.
3726 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3727 -newAbAction]): new action method to crate a new contact folder
3730 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
3731 that requests the folder manager to create a folder table with the
3732 specified type at the specified path. The type is taken from [self
3735 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3736 -folderType]): implemented.
3738 * SoObjects/Appointments/SOGoAppointmentFolder.m
3739 ([SOGoAppointmentFolder -folderType]): implemented.
3741 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3742 -appendPersonalSourcesInContext:context]): we now fetch all
3743 folders with type "Contact" that belong to the current user.
3744 ([SOGoContactFolders -newFolderWithName:name]): new method to
3745 create a new contact folder.
3747 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
3748 resulting url with [NSString+Utilities hostlessURL] instead of
3749 using NSURL. This is because the url in question sometimes has a
3750 hostname and sometimes not. "hostlessURL" ensure the hostname is
3752 ([UIxComponent -applicationPath]): same as above.
3754 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
3756 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
3757 folders before doing the one on messages.
3759 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3761 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
3762 makeObjectsPerform:withObject:withObject: for GNUstep
3765 * OGoContentStore/GNUmakefile, Protocols/common.make,
3766 SoObjects/common.make, UI/common.make: install in
3767 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
3769 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
3771 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
3774 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3776 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
3777 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
3780 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3781 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
3782 password would be accepted anyway as long as its length was > 0.
3783 This can be the case ONLY when LDAP is disabled otherwise we have
3784 a serious security issue...
3786 * SoObjects/Appointments/SOGoAppointmentObject.m
3787 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
3788 user is not an organizer nor a participant, he is declared as
3789 "Owner" if he owns the calendar the entry where the entry is
3790 contained. Other cases should not be possible.
3792 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3794 * UI/Contacts/UIxContactEditor.m: display and handle the new
3797 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3798 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
3801 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3802 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
3805 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3807 * SoObjects/Appointments/SOGoCalendarComponent.m
3808 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
3809 returns the value of ud "SOGoAppointmentSendEMailNotifications"
3811 ([SOGoCalendarComponent
3812 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
3814 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3816 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3817 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
3818 so that the mailbox cache is refreshed everytime the user presses
3819 on "get mail". I doubt a mailbox cache really is useful in general
3822 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3824 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3825 -userInContext:]): if the lookup is on "freebusy.ifb" and the
3826 username is "anonymous" the user is automatically set to
3829 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3831 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3832 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
3833 user with password "freebusy".
3835 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
3836 -contentAsString]): the default timerange is now 14 days before
3837 currentday and 1 month after.
3839 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3841 * SoObjects/Appointments/SOGoAppointmentFolder.m
3842 ([SOGoAppointmentFolder
3843 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
3844 escape the record string in a way suitable with XML encoding.
3846 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3848 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
3849 calendar view would not be updated properly.
3851 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3853 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3854 -newStartDate]): fix the handling of the component start date
3855 depending on the "hm" and the "day" parameters.
3857 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3858 -roleOfUser:uidinContext:context]): set role of current user to
3859 "Assistant" if the object that is accessed is "freebusy.ifb".
3861 * SoObjects/Appointments/SOGoAppointmentFolder.m
3862 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
3863 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
3864 ([SOGoAppointmentFolder
3865 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
3866 lookupCalendarFolderForUID: method, which doesn't do security
3869 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3871 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
3872 accessor that returns the comma-separated list of users with role
3874 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
3875 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
3876 "checkedUsers". Instead, each user is either classified in the
3877 list of assistants or the list of delegates.
3879 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3881 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
3882 -composeAction]): method imported from removed container modules.
3883 ([UIxMailMainFrame -mailFolderName]): method imported from removed
3886 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
3887 for wrapping UIxMailView with the "popupview" action.
3889 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
3890 since its the component that displays the same splash screen than
3891 the one in Thunderbird/Icedove.
3893 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
3894 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
3895 UI/MailerUI/UIxMailListViewContainer.[hm],
3896 UI/MailerUI/UIxMailViewContainer.[hm]: removed
3898 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3900 * UI/WebServerResources/HTMLElement.js: replaced the functional
3901 selectNode() and deselectNode() functions with select() and
3902 deselect() methods of HTMLElement.
3904 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
3905 events are initialized from here now instead of in the HTML code.
3907 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3908 -checkRightsAction]): new method similar to the one with the same
3909 name in UIxCalMainView.m.
3911 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
3912 code to handle the publishing of freebusy information.
3914 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3916 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3917 -checkRightsAction]): new action method that returns a
3918 comma-separated list of boolean values matching the right of the
3919 current user to "view" (as a permission) each foreign calendar
3920 stored in his preferences.
3922 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
3923 new method that sets a customOwner, which can be returned with
3924 ownerInContext it set.
3926 * SoObjects/Appointments/SOGoAppointmentFolder.m
3927 ([SOGoAppointmentFolder
3928 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
3930 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3932 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
3933 below, but for the Contacts and Calendar collections.
3935 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
3936 new acl facilities method from sope-gdl/GCSFolder.m.
3938 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3939 -roleOfUser:uidinContext:context]): new method that returns
3940 SOGoRole_Assistant when the user is an assistant or a delegate on
3941 the "personal" ab object. This is so that setting roles on the
3942 SOGoContactFolders object is not required.
3944 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3946 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
3948 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
3949 to the handling of the user selection for the acls.
3951 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
3952 values from SoPermissions with ones specific to SOGo.
3954 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
3955 handles the storage for the acls.
3957 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
3958 class for SOGoAppointmentObject and SOGoTaskObject.
3960 * UI/Common/UIxAclEditor.[hm]: new component that provides a
3961 general editor for folder acls.
3963 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
3965 ([NSString -davMethodToObjC]): method that returns the method name
3966 for a DAV property implementation.
3968 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
3970 ([NSArray -stringsWithFormat:format]): new method that returns
3971 formatted occurences of the strings stored in the array.
3973 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
3974 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
3975 subclass module of SoWebDAVValue that supports collections of
3976 properties of the same type.
3978 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3980 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3981 -lookupFolder:ofClassNamed:inContext:]): added the ability to
3982 configure the name of the SOGoDraftFolders with the ud var
3983 "SOGoDraftsFolderName".
3985 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3987 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
3988 -userTimeZone:username]): new method that returns the timezone for
3989 the specified user depending on his preferences and the server
3992 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3993 -stringForData:partInfo:]): take the encoding into account and
3994 translate the text to "normal" before processing the charset data.
3996 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3998 * UI/WebServerResources/generic.js: the progress indicator is on
3999 when loading the page so we turn it off, and we turn it back on
4000 whenever we switch to another module...
4002 * UI/WebServerResources/SchedulerUI.js: make sure the day view
4003 synchronization mechanism works everywhere.
4005 * UI/WebServerResources/generic.js: the log window is not only
4006 visible when UIxDebugEnabled is set.
4008 * UI/WebServerResources/SchedulerUI.js: the month overview's day
4009 cells are now initialized with the DOM event interface methods
4010 instead of with html attributes.
4012 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
4013 headers (should be made configurable at some point)...
4015 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
4016 "not null" constraint on startdate, enddate, isopaque,
4017 participants and partmails.
4019 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4021 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
4022 -hoursToDisplay]): prevent a crash by retaining the
4023 "hoursToDisplay" array after it's created.
4024 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
4025 clickable hours DIV.
4027 * UI/WebServerResources/SchedulerUI.js: made the event
4028 participation status modification asynchronous, which also fixes a
4029 bug where the window would sometimes close before the accept or
4030 decline action was completed. Also, adapted the event handling
4031 related to the days or weeks view with the new DIV-based layout.
4033 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
4035 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
4036 DIV-based presentation of the days and weeks.
4038 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
4040 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
4041 might return an exception so we have to handle it if we don't
4044 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4046 * UI/WebServerResources/SchedulerUI.js: updated the list
4047 initialization code to use the new event management scheme, adding
4048 what was missing to be able to delete events and tasks again.
4050 * UI/WebServerResources/MailerUI.js: added code to activate the
4051 "Get mails" button. Fixed a bug which prevented messages to be
4054 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
4055 navigation and focus handling of INPUTs.
4057 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4059 * UI/WebServerResources/MailerUI.js: added code to handle the
4060 possible drag and drop events to manager in the mail module.
4061 Moving messages, opening parent folders, ...
4063 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
4064 the drag and drop manager as well as the interface to HTMLElement
4065 to trigger drag and drop events.
4067 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
4068 action to move the current message to the mailbox named after the
4069 value of parameter "tofolder".
4071 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
4072 -moveToFolderNamed:folderNameinContext:]): new method base on
4075 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4077 * UI/WebServerResources/generic.js: added and activated many
4078 "load" handlers to configure generic widgets used across the
4079 modules. More events are now handled in a DOM-fashion way instead
4080 of by setting the relative attributes in the templates.
4082 * UI/Templates/UIxSortableTableHeader.wox: all the events are
4083 declared from the javascript DOM onload handlers.
4085 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
4088 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
4089 declared from the javascript DOM onload handlers.
4091 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
4092 we want everything to be separated from each other, as much as
4095 * UI/WebServerResources/SOGoDragHandles.js: new module containing
4096 the "SOGoDragHandlesInterface", implementing methods that can be
4097 attributed to DIV so that they can be used as drag handles.
4099 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
4100 -asQPSubjectString]): initialize the tmp strings with '0' to make
4101 sure they don't contain garbage.
4103 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4105 * UI/WebServerResources/MailerUI.js: register the messageList
4106 table as a dragging source and the leaf of the navigation tree as
4107 dnd destinations to the DNDManager.
4109 * UI/WebServerResources/generic.js: initialize tabs from the
4110 "unload" event listener that is added programmatically instead of
4111 from the template... Also, added the new DNDManager object.
4113 * UI/WebServerResources/HTMLTableElement.js: added code to
4114 simulate XUL drag n drop events. This code will possibly be moved
4115 to HTMLElement.js instead later...
4117 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4118 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
4121 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4122 -_qualifierForFilter:filter]): only search records which starts
4123 with the specified pattern.
4125 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4127 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
4128 -asQPSubjectString]): new method that returns the special QP
4129 string with its qp declaration for email subjects.
4130 ([SOGoDraftObject -bodyPartForText])
4131 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
4132 double-encode data in UTF-8.
4134 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4135 -newStartDate]): new method to determine the start date depending
4136 on the URL parameters, the current day and the current time.
4137 ([UIxComponentEditor -toolbar]): new method to determine the
4138 filename of the toolbar that should be drawn depending on the
4139 ownership and the list of attendees of the task/event wrt to the
4142 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4143 -setDayStartHour:aStartHour]): adjust the minutes to the next
4144 quarter of hour, if not already set to a quarter.
4146 * UI/WebServerResources/UIxAppointmentEditor.js,
4147 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
4150 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4152 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4153 -loadValuesFromComponent:component]): handles access class
4154 (privacy) and status.
4156 * UI/Contacts/UIxContactsListViewContainer.m
4157 ([UIxContactsListViewContainer -additionalFolders]): return nil if
4158 [self additionalAddressBooks] returns an empty string.
4160 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4162 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
4163 rangesOf7Days]): enhanced and debugged algorithm to feed the array
4164 with slices where the first day is still in the requested month.
4166 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
4169 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
4170 of events in the day boxes of the calendar's monthly view.
4172 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
4173 -davContentType]): declare "text/calendar".
4175 * SoObjects/Appointments/SOGoAppointmentObject.m
4176 ([SOGoAppointmentObject -davContentType]): declare
4179 * SoObjects/Appointments/SOGoAppointmentFolder.m
4180 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
4181 HTTP methods are handled by SOPE and requires nil to be returned,
4182 this method now invokes the new
4183 "requestNamedIsHandledLater:inContext:" method to check that.
4184 ([SOGoAppointmentFolder
4185 -requestNamedIsHandledLater:nameinContext:context]): new methods
4186 that returns "YES" only for the "OPTIONS" http method (for now...).
4187 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
4188 overloaded method to append the "access-control" and
4189 "calendar-access" DAV abilities to the initial declaration.
4191 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
4192 imitate the look of Sunbird/Lightning's monthly view.
4194 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
4195 UIxCalMonthViewOld.[hm].
4197 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4199 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
4200 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
4202 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
4203 returns an image name based on the participation status of the
4206 * UI/WebServerResources/SchedulerUI.js: same strip down as for
4209 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
4210 ([UIxContactsListViewContainer -additionalFolders])
4211 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
4212 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
4213 methods to handle the external addressbooks a user has subscribed
4214 too, by retriving them from his preferences.
4216 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4217 -updateAdditionalAddressBooksAction]): new method that updates the
4218 user settings with the list of addressbook he has subscribed to.
4220 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
4221 module for the address book selector.
4223 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
4224 a toolbar with two buttons ("add" and "remove") to manage the
4225 additional addressbooks a user might subscribe to.
4227 * UI/WebServerResources/ContactsUI.js: added code to handle
4228 "external addressbooks" from the Javascript point-of-view, by
4229 extending existing methods and adding code for the "add ab" and
4230 "remove ab" buttons.
4232 * UI/WebServerResources/generic.js: moved extensions methods to
4233 DOM elements to separate files for better clarity.
4235 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
4236 new method that returns "pageContent" as class, but also "popup"
4237 for the DIV where the page content lies, so that we can manipulate
4238 the content of popup's with CSS identifiers.
4240 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4242 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4243 -displayStyle]): new method that returns a string containing the
4244 css style relative to the current appointment cell. This code is
4245 currently inactive but might be reused later.
4247 * UI/WebServerResources/SchedulerUI.js: added code to handle the
4248 display of the selected day (the day pointed by the mouse, or the
4249 current day when changing the view).
4251 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
4252 -dayCellClasses]): new method that returns a string containing the
4253 css classes applicable to the current cell, depending on the
4254 position of the day in the week, the day of today and the
4257 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
4258 -currentContactAptBorder]): new method that returns the
4259 appropriate border color for the specified user.
4261 * SoObjects/Appointments/SOGoAppointmentObject.m
4262 ([SOGoAppointmentObject
4263 -saveContentString:contentStringbaseVersion:baseVersion]):
4264 overloaded method that parse new events and detects if they have
4265 an organizer or not. If they are new and have no organizer set
4266 (Sunbird/Lightning...), the owner of the event is set as
4269 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
4270 category that provides facility methods and interfaces to the
4273 * SoObjects/Contacts/product.plist: give full access to ANY
4274 authenticated user, not just the owner (to every objects...).
4276 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4278 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
4279 every replica widgets are declared as such to their master
4280 counterpart. Take the days into account when displaying the time
4281 range taken by the appointment.
4283 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
4284 -getICalPersonsFromValue:selectorValue]): method taken from
4285 UIxFreeBusyUserSelector, that is shared both by
4286 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
4288 * SoObjects/Appointments/SOGoAppointmentFolder.m
4289 ([SOGoAppointmentFolder
4290 -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.
4292 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
4293 derived and taken as a subset of UIxFreeBusyUserSelector that
4294 implements the table part of the FreeBusy view. Most of the
4295 methods of UIxFreeBusyUserSelector relative to that table were
4296 moved into UIxFreeBusyUserSelectorTable, which can also be used as
4297 a standalone view for AJAX operations.
4299 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4301 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4302 -vCard]): change reverted.
4304 * UI/Contacts/UIxContactEditor.m: check whether the client contact
4305 folder has selector "globallyUniqueObjectId" before calling that
4308 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4309 -vCard]): the "setVClass" NGVCard method really is "setClass"
4312 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4313 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
4314 request the "streetAddress" instead of the "streetaddress".
4315 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
4316 mails that *contain*, and not just *start with* the search
4319 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4320 -vCard]): mark address returned from LDAP as the work address.
4322 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
4323 span covered with the anchor, not only the textual information
4326 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
4327 argument (event or task) to newEvent in the appointmentListMenu.
4328 Make the appointmentsListView display the appointmentsListMenu.
4330 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
4331 12 to 50 before displaying "...".
4332 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
4333 if its length > 0, whether location itself is nil or not...
4334 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
4335 of which the length > 0.
4337 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4339 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
4340 french and ISO dates.
4342 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
4343 from UIxContactSelector to handle contact lists (current and
4344 additional contacts).
4346 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4347 -_freeBusyAsText]): added handling of an "additional"-named query
4348 parameter that describe the number of additional days after
4349 enddate that should be returned.
4351 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4352 -_responseForResults:results]): give priority to results with
4353 "c_uid" fields. If none returned, use the first contact received.
4355 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4356 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
4357 2 and "CANCELLED" to 0.
4359 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4361 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
4362 of start and end dates to short string dates.
4364 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4365 -readFreeBusyAction]): new method that returns an array of numbers
4366 corresponding to the state in the freebusy of each "quarter of an
4367 hour" between the "sday" and "eday" date parameters passed in the
4368 url. This permits to handle the display of the freebusy with Ajax
4370 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
4371 since the free busy displays 2 days ahead.
4373 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4374 -contactSearchAction]): new action that returns the uid and the
4375 username + email of the user whose name contain the value of the
4376 "search" url parameter.
4378 * SoObjects/Appointments/SOGoAppointmentFolder.m
4379 ([SOGoAppointmentFolder
4380 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
4381 useful for the computing of the status of the freebusy.
4383 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
4384 -init]): new component that incarnates a user selector for events
4385 inspired by the new one found in Thunderbird Lightning.
4387 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4389 * UI/WebServerResources/generic.js: added code to enable or
4390 disable anchor visually (following our internal algorithm).
4392 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
4393 added new "url" ivar with its classic accessors.
4394 ([UIxComponentEditor -urlButtonClasses]): new method that returns
4395 the class strings for the url button on the appointment/task
4396 editor (depending on the validity of the url).
4398 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
4399 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
4400 the template to match the Lightning's new task/appointment editor.
4402 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
4404 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
4406 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4408 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4409 ([SOGoContactLDAPFolder
4410 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
4412 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
4413 iCalEntityObject instances instead of just iCalEvent's.
4415 * SoObjects/Appointments/SOGoAppointmentFolder.m
4416 ([SOGoAppointmentFolder
4417 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
4419 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
4420 bad way of handling ownership that way.
4422 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4423 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
4424 on "cn", just like Mozilla.
4426 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4428 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
4429 "to" should be retained, otherwise it will be autoreleased and a
4432 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4433 -writeAction]): updated method to fetch the card before initing
4436 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4437 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
4440 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
4441 -iCalStringTemplate]): start and due date are now optional.
4443 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4444 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
4445 appropriate accessors to be settable through the templates.
4447 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
4448 new "isDisabled" ivar with appropriate accessors to be
4449 settable through the templates.
4451 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4452 -availableCalendars]): new method that list the calendars to which
4453 the user has subscribed.
4454 ([UIxComponentEditor -componentOwner]): returns the owner of the
4457 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4458 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
4459 quickentries to null whenever each or all of them are null, by
4460 providing an impossible timestamp from with NSNotFound as value.
4462 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4464 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
4465 that handles the creation of new fields with the new APIs and the
4466 new node structure on the page.
4468 * UI/Scheduler/UIxAppointmentEditor.m,
4469 UI/Scheduler/UIxTaskEditor.m:
4470 refactored to user UIxComponentEditor as parent class.
4472 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
4473 containing the methods common to the UIxTaskEditor and the
4474 UIxAppointmentEditor.
4476 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4478 * SoObjects/Appointments/SOGoAppointmentFolder.m
4479 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
4480 the handling of time-ranges.
4482 * UI/WebServerResources/ContactsUI.js: specify a notification type as
4483 parameters when onConfirmContactSelection in invoked.
4485 * UI/WebServerResources/generic.js: specify a notification type as
4486 parameters when onContactRemove in invoked.
4488 * UI/WebServerResources/SchedulerUI.js: when the user deselects
4489 all calendars, select his entry.
4491 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4493 * UI/WebServerResources/SchedulerUI.js: edit and delete events
4494 with their owner-relative urls. Generate a correct entry in the
4495 css color table when a user is added to the calendars list. Put
4496 the same color next to the user id.
4498 * UI/WebServerResources/generic.js: implemented some new helper
4501 * SoObjects/Appointments/SOGoAppointmentFolder.m
4502 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
4503 entries if their owner is not the current user.
4505 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4506 -displayClasses]): return the correct class for the current event
4507 representation depending on its owner.
4509 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
4510 and associate a color for each user login depending on its
4511 position in the list.
4513 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
4514 -currentRowCSSClass]): return the correct class for the current
4515 row depending on the owner of the event.
4517 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4518 -setColors:colors]): new method to associate a color table with
4519 each user in the list.
4521 * SoObjects/Appointments/SOGoAppointmentFolder.m
4522 ([SOGoAppointmentFolder
4523 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
4525 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
4526 NSObject to associate an instance with a user.
4528 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4530 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
4533 * UI/WebServerResources/ContactsUI.js: added handling of
4534 notification of changes to contact selectors.
4536 * UI/WebServerResources/generic.js: added handling of notification
4537 of changes to contact selectors.
4539 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4540 -updateCalendarsAction]): proxy method to update the user
4541 preference table with the new selected calendar uids.
4543 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
4544 -calendarsContactsAction]): new method.
4546 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
4547 ([UIxContactSelector -setHasCheckBoxes:aBool])
4548 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
4549 permit the drawing of checkboxes instead of card icons.
4551 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
4552 wrap a selector the the "Calendars" tab.
4554 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
4555 new user calendar selector.
4557 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4559 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
4560 may cover hour 0 to hour 23.
4562 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4563 -iCalStringFromQueryParameter:format:]): dates explicitly set to
4566 * UI/WebServerResources/SchedulerUI.js: manage both lists of
4567 objects wrt to the toolbar actions.
4569 * UI/WebServerResources/generic.js: added code to the "String"
4570 class to decode number-encoded char entities.
4572 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4573 -batchDeleteAction]): new method to delete selected entries in the
4576 * SoObjects/Appointments/SOGoAppointmentFolder.m
4577 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
4578 that delete identified entries in batch.
4580 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4581 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
4583 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
4584 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4585 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
4586 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4588 return a UIxJSClose component if everything went fine.
4590 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
4593 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
4594 UIxAppointmentEditor.m.
4596 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
4597 a very light page with javascript code to close a window, by
4598 calling a method on the opener if specified. This component is
4599 designed to work as a response to form postings.
4601 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4603 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
4604 SOGoAppointmentObject adapted for the handling of tasks.
4606 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
4607 extracted from SOGoAppointmentObject.
4609 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4610 -saveUrl]): returns the url needed to POST the new form to.
4611 redirect the user to <aptid>/editAsAppointment instead of /edit,
4612 so that SOGoAppointmentFolder can return the correct object type.
4614 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
4615 -compareAptsAscending:_other]): accept empty start or end dates.
4617 * SoObjects/Appointments/SOGoAppointmentFolder.m
4618 ([SOGoAppointmentFolder
4619 -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.
4620 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
4621 components of type "vtodo" as well as "vevent".
4622 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
4623 url specified ends with AsTask or AsAppointment, returns the
4624 an object of the appropriate class, otherwise deduce it from its
4625 content if the HTTP method is "PUT", otherwise read its type from
4628 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4629 -extractQuickFieldsFromTodo:_task]): extract quick fields from
4632 * UI/Scheduler/UIxCalView.m ([UIxCalView
4633 -fetchCoreAppointmentsInfos]): replacement methods for
4634 fetchCoreInfos but by retrieving object with component "vevent".
4635 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
4638 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
4639 UIxCalAptListView adapted for the handling of tasks.
4641 * UI/Scheduler/UIxTaskProposal.[hm],
4642 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
4643 clones of the UIxAppointment* classes for the handling of tasks.
4645 * UI/WebServerResources/UIxTaskEditor.js: clone of
4646 UIxAppointmentEditor adapted for the handling of tasks.
4648 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
4649 Scroll the daily view to the appropriate hour when an appointment
4650 is selected in the appointments list.
4652 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4654 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4655 -setDayStartHour:aStartHour]): specifies the user timezone on the
4658 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
4661 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
4662 ([NSCalendarDate -driftedDate]): methods made useless by a better
4663 comprehension of the NSTimeZone API...
4665 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4667 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
4668 new methods from the NSCalendarDate methods.
4670 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
4671 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
4673 +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).
4674 ([NSCalendarDate -adjustedDate]): this method returns another
4675 instance set to the correct hour after the original date was set
4676 from a non-GMT timezone. This date can be used for storage.
4677 ([NSCalendarDate -driftedDate]): this method does exactly the
4678 opposite of -adjutedDate, that is, it enables the method
4679 hourOfDay, minuteOfHour etc... to return the values according to
4680 the original date's timezone. This date CANNOT be used for storage.
4682 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
4683 -shortDateString]): new method that will return a "short date
4684 string" (yyyymmdd) from a calendar date object.
4686 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4687 -_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.
4689 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
4690 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
4692 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4694 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
4695 view of the day at the height of hour 8:00.
4697 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
4698 ([UIxCalView -dayEndHour]): returns 24.
4700 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
4701 ([UIxContactFoldersView -newAction]): invoke
4702 _selectActionForApplication: on self with the proper attribute too.
4704 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
4705 we now use the action mechanism in UIxContactsListView to keep the
4706 same view for the contact selectors and the regular contact view.
4708 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
4709 UIxContactsListViewContainerBase.[hm]
4711 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
4713 * UI/WebServerResources/generic.js: generalized emailstring
4714 handling functions. Generalized address book access functions.
4716 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4717 -isPopup]): return YES if the "popup" query parameter is set.
4719 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4720 -defaultAction]): keep the url parameters when redirecting.
4721 ([UIxContactFoldersView -selectForSchedulerAction])
4722 ([UIxContactFoldersView -selectForMailerAction]): new action
4723 methods for the /scheduler-contacts and /mailer-contacts invocations.
4725 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
4726 newly available NSString+URL category.
4728 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
4729 -asURLParameters]): handle dictionary entries which could be
4730 instances of NSArray rather than NSString.
4732 * SoObjects/SOGo/NSString+URL.m ([NSString
4733 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
4734 ([NSString -urlWithoutParameters]): new method that returns the
4735 url without its parameters.
4737 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
4739 * SoObjects/SOGo/NSDictionary+URL.[hm],
4740 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
4742 * UI/WebServerResources/UIxMailEditor.js: add support for
4743 additions of different types (to, cc, bcc) of recipients from the
4746 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
4749 * UI/Contacts/UIxContactsMailerSelection.m,
4750 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
4751 UI/Contacts/UIxContactsSelectionView.m to provide a different set
4752 of widgets depending on the application invoking the contact list.
4754 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4756 * UI/WebServerResources/ContactsUI.js: hide the current contact
4757 whenever the user changes of contact folder.
4759 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
4760 now provided by the template when loading the page.
4762 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4763 -iCalPersonWithUid:uid]): new method taken from removed module
4766 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4768 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
4769 -categoriesAsString]): same as below.
4771 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
4772 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
4774 * SoObjects/Appointments/SOGoAppointmentObject.m
4775 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
4776 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
4779 * SoObjects/Appointments/SOGoAppointmentFolder.m
4780 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
4781 hackish test to detect whether the request concernes VEVENT's or
4782 anything else. Return events only in the former case.
4783 ([SOGoAppointmentFolder
4784 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
4785 c_name quickfield so that the calendar list can identify the
4786 appointments with their complete "filename".
4788 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
4789 groupsOfClass:fromSource: to parse the given vcalendar.
4791 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
4793 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
4795 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
4798 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
4800 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4802 * SoObjects/Appointments/SOGoAppointmentFolder.m
4803 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
4804 sensitive to the CalDAV method names.
4805 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
4806 "calendar-query" CalDAV method name.
4808 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
4809 code coming originally from MailerUI.js.
4811 * UI/WebServerResources/UIxContactEditor.js: imitate the
4812 Thunderbird address book by completing the display name with the
4813 content of the first and last name fields, until the display name
4814 is modified manually.
4816 * UI/WebServerResources/generic.js: added a "trim" method to the
4819 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4820 -displayName]): new method that returns the display name from "cn"
4821 or from the "displayName" key if found.
4823 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4824 -initSnapshot]): check if "[card n]" returns anything to avoid a
4827 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
4828 that returns an unparsed doctype definition for the pages.
4830 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4831 -vCard]): set the card's fn to attribute "displayName" if found
4834 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4836 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4837 -vCard]): handle the "streetAddress" and "l" fields.
4839 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
4840 header fields by converting the tables to DIVs and SPANs.
4842 * UI/WebServerResources/generic.css: attempted unification of font
4843 families and size across all the elements. changed the
4844 logConsole's "position" from "fixed" to "absolute" to avoid
4847 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4849 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
4850 empty the contact view when the current contact is being deleted.
4852 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
4853 parse the email field and provide the address full name if found
4854 as the "contactFN" parameter.
4856 * UI/WebServerResources/generic.js (openMailTo): do not give a
4857 name to the opened window so that serveral ones can be opened at
4860 * UI/MailPartViewers/UIxMailPartTextViewer.m
4861 ([UIxMailPartTextViewer -flatContentAsString]): override method by
4862 replacing carriage returns with "<br />" in the result string from
4863 super's implementation.
4865 * UI/Contacts/UIxContactView.m ([UIxContactView
4866 -_urlOfType:aType]): don't manage non-mailto urls through
4867 javascript, let the user decide what's best for him.
4869 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4870 -newAction]): transfer all the query parameters by using the
4871 "asURLParameters"'s result string from [self queryParameters].
4873 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4874 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
4875 query parameters and put their values (if any) into the snapshot.
4877 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
4878 carriage-returns to "<br />".
4879 ([UIxContactView -workCompany]): explicitly initialize company to
4880 nil if org is nil or empty.
4882 * UI/WebServerResources/UIxContactEditor.js: updated validation
4883 code after we added and renamed some fields.
4885 * UI/WebServerResources/ContactsUI.js: added code to cache contact
4886 cards and to handle card updates.
4888 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4890 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
4891 test the length of the returned string since they will never be
4894 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
4895 return self if the process went successful, returns an exception
4896 otherwise (and only otherwise...).
4898 * OGoContentStore/OCSContactFieldExtractor.m
4899 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
4900 adapted method to the new VCard api. Since the cards are stored in
4901 vcard format, we no longer deal with a dictionary but with a
4904 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4906 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
4907 return a string with a "mailto" url.
4908 ([UIxContactView -_urlOfType:aType]): generic method to return a
4909 url string with a html anchor pointing to it.
4911 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
4912 since subclass "UIxContactEditor" did nothing. Implemented code to
4913 display and modify the values parsed from the vcards, displayed in
4914 a way similar to the Thunderbird addressbook.
4916 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4917 -save]): new dummy method.
4919 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4920 -save]): made method void.
4922 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4924 * UI/Contacts/UIxContactView.m: added many wrapper methods to
4925 display blocks of data à la Thunderbird Addressbook. If data is
4926 available, those wrappers (around the NGVCard methods) will
4927 enclose the results in a proper HTML output with the correct label
4928 (if present), otherwise it will return an empty string.
4929 ([UIxContactView -vcardAction]): new action to return the contact
4930 as text/vcard (for exporting).
4932 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4933 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
4935 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4936 -vCard]): create a new NGVCard instance when no data is available
4938 ([SOGoContactGCSEntry -save]): save the vCard using the new
4939 "versitString" API method/message.
4941 * UI/Contacts/UIxContactView.h: separated interface from
4944 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
4945 views and display them beneath the list.
4947 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4949 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
4950 the timezone even when it's the server timezone.
4952 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4953 -privateContacts:inContext:]): no long configure the calendar
4954 object with the user's timezone since it's now accessible
4955 application-wide throught the SOGoObject methods.
4957 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
4958 method. Removed the "backendTimeZone" method.
4960 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
4961 instead of SoComponent.
4963 * SoObjects/Appointments/SOGoAppointmentObject.m:
4964 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
4965 [self serverTimeZone] instead of "EST" (which was removed).
4967 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
4968 "timeZone" ivar and its accessors.
4970 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
4971 centralized method returing the timezone configured in the
4972 userdefaults db or "Canada/Eastern" if missing.
4973 ([SOGoObject -userTimeZone]): new centralized method returing the
4974 timezone of the current user or the server timezone if missing
4975 from the user configuration table.
4977 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4979 * UI/WebServerResources/SchedulerUI.js: implemented caching of
4982 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
4983 return a path based on the object's context instead of the first
4984 level in SOGo's object hierarchy...
4986 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4988 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
4991 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
4992 timezone ([self viewTimeZone]) to the WEMonthOverview component to
4993 avoid a confusion with the days.
4995 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
4998 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
4999 imitate Sunbird's synchronization between the 3 visible views.
5001 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
5002 sure the numbers in dateString are formatted so as to take 4 chars
5003 for the year and 2 for the day and the month, otherwise
5004 NSCalendarDate will return a nil date.
5005 ([UIxComponent -applicationPath]): return a path based on the
5006 object's context instead of the second level in SOGo's object
5009 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5011 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
5012 user's timezone abbreviation to the date string passed as parameter to
5013 NSCalendarDate to generate an accurate date instance. Do the same
5014 when no date is specified and today is chosen.
5016 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
5017 form's time values to integers before comparing them.
5019 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
5020 ([UIxCalAptListView -currentEndTime]): initialize the resulting
5021 dates timezone with [self viewTimeZone].
5023 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
5024 "viewTimeZone" ivar destined to hold an instance of the user's
5026 ([UIxComponent -viewTimeZone]): take the timezone from the user's
5029 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5031 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
5032 rearranged the layout.
5034 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
5035 manage showing and hiding appointment details.
5037 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5038 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
5039 timezone by taking the current user's timezone setting.
5041 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
5043 * SoObjects/Appointments/SOGoAppointmentObject.m
5044 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
5045 set default timezone to EST, although this code should be
5046 rewritten to handle a system and a user default value.
5048 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
5049 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
5050 take the values from the hour and minute INPUTs when data is
5051 POSTed since we no longer use the UIxTimeSelector component.
5052 ([UIxTimeDateControl -selectableHours])
5053 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
5054 template SELECTs to display reasonable and acceptable values
5055 instead of all the possibilities.
5057 * UI/WebServerResources/generic.js: adapted code for the new
5058 implementation of the UIxContactSelector component (added a
5059 "remove" button, removed the previous INPUT and replaced them with
5060 links of class "button").
5062 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
5063 UIxTimeDateControl.m.
5065 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
5066 ([UIxCalDayTable -currentAppointmentHour]): new methods that
5067 returns correctly formatted values used as attributes for JS code.
5069 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
5070 -initialContactsAsString]): renamed implementation of
5071 initialParticipants.
5072 ([UIxContactSelector -currentContactId])
5073 ([UIxContactSelector -currentContactName]): new methods used when
5074 listing the initial contacts in the widget. Currently, both return
5075 the person's cn but the latter should ultimately return a user
5078 * UI/Contacts/UIxContactSelector.h: separated interface from
5079 UIxContactSelector.m.
5081 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
5082 all javascript code is now put in Scheduler.js/generic.js.
5084 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
5085 moved into NSCalendarDate+Scheduler instead.
5087 * SoObjects/Appointments/SOGoAppointmentFolder.m
5088 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
5089 configure the timezone from SOGoUserFolder when the instance is
5091 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
5092 the value of the new "timezone" ivar.
5094 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5096 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
5097 the date selector in the first page and the container of the
5098 future calendar selector in the second page.
5100 * UI/WebServerResources/generic.js: added code for handling tabbed
5103 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
5104 returns the bundle name associated to the current running product.
5106 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5108 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
5109 exception by invoking a timeout on the opener rather than invoking
5110 the list refresh method.
5112 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
5115 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
5116 ([UIxCalWeekView -prevWeekQueryParameters])
5117 ([UIxCalWeekView -nextWeekQueryParameters])
5118 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
5119 that return the dates relatively to the current day.
5120 ([UIxCalWeekView -lastWeekName])
5121 ([UIxCalWeekView -currentWeekName])
5122 ([UIxCalWeekView -nextWeekName])
5123 ([UIxCalWeekView -weekAfterNextWeekName])
5124 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
5125 methods that returns the label for the corresponding weeks.
5127 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
5128 used by UIxCalDayView and UIxCalWeekView to display the events
5129 occuring in one or more days.
5131 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5133 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
5134 entries in the new "monthMenu" and "yearMenu".
5136 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
5137 method to return the current day as a string formatted depending
5138 on the current locale.
5140 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
5141 ([UIxCalAptListView -endDate]): "today" is now the default filter
5142 for displayed events.
5143 ([UIxCalAptListView -currentSerialDay]): new method returning the
5144 date of the current enumerated appointment in serial form
5147 * UI/WebServerResources/SchedulerUI.js: added code to select the
5148 relevant day when an appointment is selected. Added code to popup
5149 a month and a year menu whenever the header entries are clicked in
5150 the calendar widget.
5152 * UI/WebServerResources/generic.js: made addClassName and
5153 removeClassName methods of HTMLElement.
5155 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5157 * UI/WebServerResources/MailerUI.js: fixed the contact creation
5158 from email addresses.
5160 * UI/WebServerResources/generic.js: centralized the search-related
5161 functions here since the same code was used across the 3
5164 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
5165 ([UIxCalAptListView -endDate]): return the required dates needed
5166 depending on the value given to the "filterpopup" url parameter.
5168 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
5169 code by invoking UIxComponent's labelForKey:.
5171 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
5172 [self pageResourceManager] instead of [self resourceManager].
5174 * UI/Contacts/UIxContactEditorBase.m: invokes
5175 globallyUniqueObjectId on the clientobject's class instead of the
5176 hardcoded "SOGoFolder".
5178 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
5179 -newAction]): redirect the "new" action to the personal (default)
5182 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
5183 +objectWithName:inContainer:]): new constructor.
5185 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
5186 -lookupContactWithId:recordId]): always create a contact object,
5187 even if it does not exist.
5189 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5191 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
5192 component that lays out the different components of SOGoCalendar.
5193 Only serves as an Objective-C counterpart to its xml template.
5195 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
5198 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
5199 display a widget to handle the information displayed in the
5200 appointments list. Not currently used, lacks implementation.
5202 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
5203 display a calendar as a dynamic widget from where one can select
5204 the current visible day.
5206 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
5207 extracted from UIxCalInlineMonthOverview.m.
5209 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
5210 calendarPageURL methods. The javascript code is handled by .js
5211 files as much as possible...
5213 * UI/WebServerResources/ContactsUI.js,
5214 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
5217 * UI/WebServerResources/SchedulerUI.js: implemented functions to
5218 handle the new widgets. XmlHTTPRequest code taken from
5221 * UI/WebServerResources/generic.js: put some functions related to
5222 element selections as methods to HTMLElement and HTMLTableElement.
5224 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
5225 display the list of appointments (embodies the code-size of
5226 UIxCalAptListView; answers to the "aptlist" method).
5228 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5230 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
5231 -correctURLAction]): new short action method replacing the method
5232 below by taking far less code.
5234 * SoObjects/Appointments/SOGoAppointmentFolder.m
5235 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
5236 with an action in the view-related code.
5238 * UI/Scheduler/UIxAppointmentEditor.m: invoke
5239 "stringByEscapingHTMLString" on the resulting value to avoid
5240 issues with accented characters.
5241 ([-jsCode]): removed method since the javascript code was merged
5242 into SchedulerUI.js.
5244 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5246 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
5247 new class method that returns an iCalPerson based on the UID given
5250 * UI/Contacts/UIxContactsListViewContainerBase.m:
5251 UIxContactsListViewContainer renamed to serve as a base class for
5252 the contact lists in both the contact editor and the contact
5255 * SoObjects/Contacts/SOGoContactLDAPFolder.m
5256 ([SOGoContactLDAPFolder
5257 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
5258 setUserIdentifier:setRootDN:]): an LDAP field specifying the
5259 loginname of the users can now be specified.
5261 * UI/WebServerResources/generic.js: added code to manage contact
5262 lists through the new implementation of the UIxContactSelector.
5264 * UI/Templates: put the templates related to SchedulerUI in its
5267 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
5268 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
5269 entry for "uid" with the field name representing the login name of
5270 the user in the corresponding LDAP branch.
5272 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5274 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
5275 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
5276 request is a PUT, always create an entry, even if we're not sure
5279 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5281 * UI/WebServerResources/ContactsUI.js: implemented live-search.
5283 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
5284 -appendSystemSourcesInContext:context]): populated method with
5285 code that creates entries mapped to instances SOGoContactFolder,
5286 based on the configuration found in the NSUserDefaults under the
5287 key "SOGoLDAPAddressBooks".
5288 ([SOGoContactFolders
5289 -lookupName:nameinContext:contextacquire:acquire]):
5290 "contactsources" do not exist anymore, SOGoContactFolder was split
5291 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
5292 and one protocol: SOGOContactFolder, instead.
5293 ([SOGoContactFolders -contactFolders]): new accessor used by the
5294 views of SOGoContactXXXFolder to list the possible sources.
5296 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
5297 defines the methods that UIxContactsView, ..Editor and so on...
5300 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
5301 defines the methods that UIxContactsListViewBase expects as well
5302 as the data fields returned in the contact lists.
5304 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
5305 returns entries an LDAP server. Conforms to the new
5306 SOGOContactFolder protocol.
5308 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
5309 returns a vCard based on contact entries from an LDAP server.
5310 Conforms to the new SOGOContactObject protocol.
5312 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
5313 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
5314 entry for the textual representation of the vCard.
5316 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
5319 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
5320 "SOGoContactObject".
5322 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
5323 method that generates a textual representation of the vcard.
5325 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
5327 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
5328 "SOGoContactFolder".
5330 * SoObjects/Contacts/SOGoContactSource.h,
5331 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
5334 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
5335 -singleAttributeWithName:key]): new method that returns the first
5336 object associated with an ldap key (where generally one value is
5339 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
5340 map the entry into an NSDictionary for processing by
5341 UIxContactsListViewBase.m with the least possible overhead.
5343 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
5346 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5348 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5349 -privateContacts:inContext:]): now returns an instance of
5352 * UI/Contacts/UIxContactsListViewContainer.m
5353 ([UIxContactsListViewContainer -contactFolderName]): new method to
5354 return the absolute path to the current contact folder, called
5355 from within the template.
5357 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
5358 JS code to initialize the 'currentContactFolder' generic var.
5360 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
5361 +contactFolderWithSource:inContainer:andName:]): new class
5362 method meant to return an instance connected to the specified
5363 source. Currently useless but won't be anymore in the next few
5366 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
5367 the "lookupFreeBusyObject" method since it does not exist.
5369 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
5370 as a "view" for the SOGoContactFolders object. Does nothing but
5371 redirect the browser to the URL of the personal address book of
5372 the user. It does not even have a template.
5374 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
5375 implementing the SOGoContactSource protocol. Does nothing
5376 currently but will be used to implement access to the personal
5377 address book of the user stored in the SOGo database.
5379 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
5380 protocol defining an API common to all possible types of contact
5383 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
5384 serving as the root of the contact folders available to the
5385 current user. Correctly lists the contact sources in webdav.
5387 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5389 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
5390 -composeAction]): new action method that permits external object
5391 to write a message from the default (primary) account.
5393 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5394 -initSnapshot]): new method with code taken from "defaultAction"
5395 but needed for others.
5396 ([UIxContactEditorBase -writeAction]): new action designed to
5397 compose the correct URL needed to obtain the MailerUI's email
5398 editor with the correct "mailto" parameter.
5400 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
5401 Common so that other modules can use it.
5403 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
5404 easier to manage both ajax and non-ajax requests.
5406 * UI/Contacts/UIxContactsFilterPanel.m: clone of
5407 UIxMailFilterPanel, but applicable to contact lists.
5409 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
5410 -vcardContentFromSOGoContactRecord]): use the new standard methods
5411 created for each type of entry. If a line is determined to not
5412 contain information, it will be skipped.
5414 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
5415 +initialize]): init defaultMailDomain with the user default
5416 "SOGoDefaultMailDomain".
5418 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5420 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5421 -saveAction]): reorganized methods to only have ONE return point.
5422 Invoke saveRecord: directly on the clientObject instead of
5423 saveContentString, which does the same thing anyway.
5425 * SoObjects/Contacts/NSDictionary+Contact.m
5426 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
5427 method to convert the dictionary returned with the user submission
5428 to a record in VCARD format to be stored in the database.
5430 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5432 * UI/WebServerResources/MailerUI.js: when opening the context menu
5433 of the message list, select the message below the mouse cursor and
5434 deselect the other selected messages temporarily. This mimics the
5435 behaviour of Thunderbird for that matter and was already
5436 implemented for the entries of the folder tree.
5438 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
5439 -iconForMenuItem]): new method that returns the fully qualified
5440 relative URL to the icon representing the mailbox, or the default
5441 mailbox icon if needed.
5443 * UI/SOGoUI/UIxComponent.m ([UIxComponent
5444 -urlForResourceFilename:filename]): automatically return an empty
5445 string whenever the filename passed as argument is nil.
5447 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
5448 "desc" parameter set to 1 so that they are sorted in descending
5449 order by default. Also, added "onHeaderClick()", triggered by
5450 clicking on the message list header elements.
5452 * UI/MailerUI/UIxMailSortableTableHeader.m
5453 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
5455 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5456 -isSortedDescending]): defaults to "YES" when the sort order is
5459 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5461 * UI/WebServerResources/MailerUI.js:
5462 - message cache: set the max num of cached messages to 20. Limit
5463 the cached message size to 30000 bytes.
5464 - ajax: when a message request is called while one is already
5465 being performed, the latter will be cancelled. Idem when
5466 retrieving the content of a mailbox.
5467 - folder tree: when a mailbox is selected because of the URL
5468 requested (initMailboxSelection), the dtree is expanded throughout
5469 the mailbox entry's parent hierarchy to ensure it is made visible
5470 when the page is being displayed. (new function: expandUpperTree).
5471 - mailbox loading: when loading a mailbox where a message was
5472 previously selected, we invoke its url with the "pageforuid"
5473 parameter correctly specified. During callback processing, we scan
5474 the table for the related row and reselect it.
5475 Also, the message area is set blank before loading any mailbox.
5477 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5478 -defaultAction]): if the "pageforuid" parameter is passed in the
5479 url, take its value and invoke [self firstMessageOfPageFor:]
5480 consequently to deduce the first message to display. Otherwise,
5481 set it to "idx", otherwise set it to 0.
5482 ([UIxMailListView -firstMessageOfPageFor:]): new method
5483 that determines the first message of the page where the message
5484 passed as parameter is contained.
5486 * UI/WebServerResources/UIxMailListView.js: removed this module,
5487 its code was put in MailerUI.js instead.
5489 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5491 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
5492 which returns the nodes for the parent specified in "parentMenu".
5493 Used to generate the javascript code for the folder dtree.
5495 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
5496 using that container-template are now using UIxMailMainFrame
5497 since UIxMailPanelFrame had no real interest. File removed.
5499 * UI/WebServerResources/dtree.{css,js}: new files to handle
5500 javascript-generated mailbox tree. Modified from original version
5501 by integrating the previous code with the one we are using for
5502 selections and mailbox handling. Minor visual enhancements too...
5504 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5506 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
5507 returned, put it in an NSArray before returning it (fixes
5510 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5512 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
5513 that returns a url string stripped from its "http://hostname"
5516 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
5518 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
5520 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5522 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
5523 -mailDateFormatter]): retrieve the timezone from the user settings
5524 and pass it to the returned dateFormatter. Also, the dateFormatter
5525 is kept in a static variable to avoid useless
5526 creations/destructions.
5528 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
5529 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
5531 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
5532 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
5533 s/Criteria/Text/ to handle the "criteria" form parameter.
5535 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5537 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
5538 to integrate better with the firefox look&feel. Added entries for
5539 the new "menu" DIV class (popup menus).
5541 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
5542 takes any chunk of text as param, detects the user email and the
5543 optional first and last names and return them in a well-formatted
5544 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
5545 namespace conflict. Added "onMenuClick(node, event, menuId)" to
5546 handle popup menus through "onclick" element attributes (node =
5547 this, event = event and menuId = name of the menu DIV id to
5550 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5551 -snapshot]): add an entry for "email" into the snapshot
5552 dictionary if a "contactEmail" URL parameter was detected and if
5553 the entry for "email" is empty.
5555 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
5556 button now invokes the newContact() js function in ContactsUI.js
5557 instead of opening "new" directly. newContact() pops up a window
5558 stripped from its navigation bar.
5560 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
5561 bundle (AddressBook).
5563 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
5564 "menu" and id "addressMenu" have the header email addresses
5565 display it with the new menu code in generic.js.
5567 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
5568 replaced the body tables with a div of class "pageContent"
5569 (standardization across the page templates).
5571 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
5572 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
5573 those are now inherited from UIxPageFrame.
5575 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
5577 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
5578 a "mailto" URL parameter is detected and the "to" array is empty,
5579 initialize "to" with the value of "mailto" before returning it.
5581 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
5582 -composeAction]): rewrote method in a cleaner way and with usage
5583 of the URL extensions to NSString and NSDictionary (see below).
5584 Also, if a "mailto" url parameter is detected, pass it to the
5587 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
5590 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
5591 returns a parameter string to add to a base URL.
5593 * UI/Common/NSString+URL.m ([NSString
5594 -composeURLWithAction:parameters:andHash:useHash]): new method to
5595 compose a complete URL from an object URL with parameters and an
5596 optional '#' character.
5598 * UI/Common/UIxPageFrame.h: separated interface from
5601 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
5603 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
5605 * UI/WebServerResources/generic.js: added code to manage
5606 selections within HTML containers.
5608 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
5609 added method to determine the possible URL for a product-specific
5610 javascript filename of the forme <productname>.js.
5611 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
5612 ([UIxPageFrame -isPopup]): new method to determine whether the
5613 application navigator bar should be displayed (main page) or not
5616 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
5617 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
5618 the user through LDAP.
5620 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5622 * The toolbar code from the MailerUI product was taken, renamed as
5623 "UIxToolBar" and put into UI/Common. Toolbar plists were created
5624 for the Contacts and Scheduler products and put in their respectir
5625 Toolbars/ subdirectories. Finally,
5626 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
5627 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
5628 and an invocation to the UIxToolbar component was put at the top
5629 of UI/Templaces/UIxPageFrame.wox.
5631 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
5632 within the templates whether a separator should be displayed.
5634 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
5635 that returns NO if the toolbar is empty.
5637 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5639 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
5641 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
5642 new toolbar objects.
5644 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
5646 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
5647 linkbanner as a DIV instead of a TABLE.
5649 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
5651 returns 'YES' to request the display of the navigation bar between
5654 2006-06-15 ludovic@inverse.ca
5656 * It's now possible to set the default
5657 domain using for email using the
5658 SOGoDefaultMailDomain preference key.
5660 2006-06-15 ludovic@inverse.ca
5662 * Initial import of SOGo from trunk.