1 2007-12-12 Ludovic Marcotte <ludovic@inverse.ca>
3 * UI/MailPartViewers/UIxMailRenderingContext.{h,m}
4 Removed template caching which added very little
5 and created re-entrant issues.
7 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
8 Added a hack (and stated so in the source file)
9 to avoid what seems to be a bug in libxml.
11 2007-12-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
13 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
15 ([SOGoContentObject -davLastModified])
16 ([SOGoContentObject -davContentLength]): implemented dav methods.
18 2007-12-10 Francis Lachapelle <flachapelle@inverse.ca>
20 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
21 -GETAction:]): when asAttachment is set to true, the header
22 "content-disposition" is set to "attachment" so browsers like IE
23 and Safari properly asks the user to save the file.
25 2007-12-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
27 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
28 ([UIxMailPartHTMLViewer -flatContentAsString]): when in
29 UIxMailPartAlternative, scan the filenames of potential cid at the
30 same level as our parent.
32 2007-12-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
34 * Main/SOGo.m ([SOGo -run]): the table creation script now have a
35 @{tableName} substitution variable to be substitued with the real
36 table name obtained from the configuration variables.
38 2007-12-07 Ludovic Marcotte <ludovic@inverse.ca>
40 * UI/MailPartViewers/UIxMailRenderingContext.m
41 We treat multipart/appledouble like multipart/mixed
42 for now. That allows the user to save both parts.
44 * Corrected typos in Localizable.string files.
46 2007-12-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
48 * UI/Common/UIxAclEditor.m ([-currentUserIsOwner]): replaced
49 method with -canModifyAcls that invokes the security manager
50 instead for the permission "SaveAcls" on the client object.
52 * SoObjects/Appointments/SOGoCalendarComponent.m
53 ([SOGoCalendarComponent -contentAsString]): securize the returned content.
54 ([SOGoCalendarComponent -aclsForUser:uid]): check whether the user
55 is an organizer or a participant as well.
57 * SoObjects/Appointments/SOGoAppointmentObject.m
58 ([SOGoAppointmentObject -changeParticipationStatus:_status]): the
59 user we should change the status of is not the active user but the
60 owner of the object. This is for delegation.
62 * SoObjects/Appointments/SOGoAppointmentFolder.m
63 ([SOGoAppointmentFolder -fetchContentObjectNames]): fetch the
64 elements through the fetchFields:from:to:title:component: method
65 method, so that the result is already filtered depending on the
68 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
69 -toolbar]): if the current user is a delegate, take the permission
70 "ModifyComponent" into account. Also, do not let him/her modify an
71 event for which he/she is the organizer.
73 * SoObjects/Contacts/SOGoContactLDAPFolder.m
74 ([SOGoContactLDAPFolder -davResourceType]): declared as a carddav
75 addressbook collection.
77 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
78 -davResourceType]): declared as a carddav addressbook collection.
80 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davLastModified]):
81 override SoObject's implementation. Otherwise a localized date is returned.
83 * UI/Common/UIxPageFrame.m ([UIxPageFrame -isCalendar])
84 ([UIxPageFrame -isContacts], [UIxPageFrame -isMail]): getters to
85 determine which module is the current one.
87 2007-12-06 Francis Lachapelle <flachapelle@inverse.ca>
89 * UI/Scheduler/NSArray+Scheduler.m ([NSArray -compareEventsTitleAscending:otherEvent])
90 ([NSArray -compareEventsLocationAscending:otherEvent])
91 ([NSArray -compareEventsEndDateAscending:otherEvent])
92 ([NSArray -reversedArray]): new methods that sort an array of
93 events depending of various parameters.
95 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
96 -eventsListAction]): added support for sorting events.
98 2007-12-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
100 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction])
101 ([UIxMailEditor -sendAction]): make sure that the attachments
102 having the same filename are correctly sequenced (ex: base.ext,
103 base-1.ext, base-2.ext).
105 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
106 -fetchBLOB]): added support for quoted-printable decoding. Also,
107 we return nil if the type is not supported.
109 2007-12-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
111 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -newAction]):
112 create task obejcts with the .ics extension.
114 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
115 -newAction]): create appointment objects with the .ics extension.
117 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -newAction]):
118 create objects with the .vcf extension.
120 * Main/NSException+Stacktrace.m: added missing symbols from
121 NSException.m and NSDebug.m (GNUstep).
123 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
124 -foldersSearchAction]): make use of the new search methods in
125 SOGoUserFolder (see below).
127 * UI/Contacts/UIxContactFoldersView.m ([-foldersSearchAction]):
128 moved method into ../MainUI/SOGoUserHomePage.m.
130 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
131 -foldersOfType:folderTypeforUID:uid]): only return folders owned
132 by the specified user.
134 2007-12-05 Francis Lachapelle <flachapelle@inverse.ca>
136 * SoObjects/Mailer/SOGoDraftObject.m: the condition for replyToAll
137 has to be done later to avoid duplicated to and cc addresses.
139 2007-12-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
141 * SoObjects/Appointments/SOGoAppointmentFolder.m
142 ([SOGoAppointmentFolder -davCalendarQuery:queryContext]): fixed a leak.
144 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder -davSubscribe:localContext])
145 ([SOGoGCSFolder -davUnsubscribe:localContext]): subscribe an
146 unsubscribe from DAV-based accesses. We could be compatible with
147 Microsoft's extensions but we have no need for a "subcription id",
148 so we implement our own.
150 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
151 -POSTAction:localContext]): new method to intercept DAV POSTs,
152 which we now use to implement certain custom commands such as
153 "subscribe" and "unsubscribe".
155 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
156 -davNamespaces]): declare the
157 "urn:inverse:params:xml:ns:inverse-dav" xml ns.
158 ([SOGoUserFolder -foldersOfType:folderTypeforUID:uid]): new method
159 designed to replace the UIxContactFoldersView.m mechanism for
160 displaying folders to subcribe to, as a common code base for both
161 Web and DAV-based subscriptions.
162 ([SOGoUserFolder -foldersOfType:typematchingUID:uid]): same as
164 ([SOGoUserFolder -davCollectionQuery:queryContext]): new method
165 that implement a custom DAV-based protocol query for querying
166 folder based on specified attributes.
168 2007-12-03 Ludovic Marcotte <ludovic@inverse.ca>
170 * Main/NSException+Stacktrace.{h,m} - new files
171 to handle automatic stack trace generation
172 upon an uncaught exception.
174 * Updated the templates and Localizable.string files
175 to fix typos and add new strings.
177 * SoObjects/Mailer/SOGoMailBodyPart.m
178 Fixed attachment retreival when the first character
181 * SoObjects/SOGo/SOGoGCSFolder.m
182 Fixed the sending of emails when folders are created/removed.
183 Notifications are sent if the defaults SOGoFoldersSendEMailNotifications
186 * UI/Common/UIxUserRightsEditor.m
187 * UI/Templates/SOGoACLEnglishModificationAdvisory.wox
188 * UI/Templates/SOGoACLFrenchModificationAdvisory.wox
189 * UI/Templates/SOGoACLGermanModificationAdvisory.wox
190 Added the capabilities to email notifications when ACLs have
191 changed on a DAV collection or an IMAP mailbox. Also added
192 new templates (3 .wox) to deal with this.
194 * UI/WebServerResources/ContactsUI.js
195 UI/WebServerResources/SchedulerUI.js
196 Added warnings on operations w/o selection.
198 2007-11-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
200 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
201 -appendSubscribedSources]): don't include sources for which we
202 don't have the SOGoPerm_AccessObject permission.
204 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
205 -rfc822DateString]): we want positive timezones to be specified
206 with a leading "+" too.
208 2007-11-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
210 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
211 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
212 return nil if the subscribed folder has no display name (meaning
213 it no longer exists).
215 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
216 -appendPersonalSources]): don't include sources which are no
219 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
220 -ocsPathOfContainer]): return the intended value, not that of
223 * SoObjects/Appointments/SOGoCalendarComponent.m
224 ([SOGoCalendarComponent -sendResponseToOrganizer]): send the
225 message only of sendEMailNotifications is set.
227 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -subscriptionRoles]):
228 new method that returns the roles that qualifies for adding the
229 special "authorized subscribed" sogo role.
231 2007-11-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
233 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
234 -aclsForUser:uid]): copy all the roles from the container. If the
235 object is new, make sure the roles contain "ObjectEditor" if and
236 only if "ObjectCreator" is present.
238 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
239 -aclsForUser:uid]): no longer take the "ObjectReader" role into
242 * UI/Common/UIxFolderActions.m ([UIxFolderActions
243 -canAccessContentAction]): always return HTTP status 204. We want
244 this because we are relying on the SOPE access control manager to
245 grant access to this method. This requires a fine-tuned access
246 control in SOGo itself...
248 * UI/Contacts/UIxContactsUserRightsEditor.m ([-userCanReadObjects])
249 ([-setUserCanReadObjects:userCanReadObjects]): removed methods.
251 * UI/MailerUI/UIxMailUserRightsEditor.m ([UIxMailUserRightsEditor
252 -updateRights]): no longer take the "ObjectReader" role into account.
253 ([-userCanReadMails], [-setUserCanReadMails:userCanReadMails]):
256 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
257 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): specify context
258 when looking up the Calendar folder.
260 2007-11-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
262 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): same as below.
264 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
265 -event]): create the event if it doesn't exist.
267 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -userHasCalendarAccess])
268 ([UIxPreferences -userHasMailAccess]): same as below, for
269 displaying preference tabs.
271 * UI/Common/UIxPageFrame.m ([UIxPageFrame
272 -userHasCalendarAccess]): new accessor for the link banner.
273 ([UIxPageFrame -userHasMailAccess]): same as above.
275 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
276 -toManyRelationshipKeys]): do not report the path to modules to
277 which the user has no access. No longer cache this information
278 statically, the array will be generated at each call.
279 ([SOGoUserFolder -lookupName:_keyinContext:_ctxacquire:_flag]):
280 ignore the path to modules to which the user has no access.
282 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -canAccessModule:module]):
283 new method that returns whether the user has access to the
286 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
287 -initFromUDSource:udSource]): take a new parameter named
288 'ModulesContraints' that defines a set of constraints for
289 accessing specified named modules. This is an optout, meaning the
290 modules will be present unless a constraint is specified.
292 * SoObjects/Appointments/SOGoAppointmentFolder.m
293 ([SOGoAppointmentFolder
294 -roleForComponentsWithAccessClass:accessClassforUser:uid]): cache
295 acl to reduce method calls.
296 ([SOGoAppointmentFolder
297 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
298 if the user is not the current user, we strip the useless info
301 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
302 -labelForKey:key]): new category method.
304 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
305 -event]): same as below.
307 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): request a
308 secured version of the component.
310 * UI/MailPartViewers/UIxMailPartViewer.m
311 ([-fallbackStringEncoding]): removed method.
312 ([UIxMailPartViewer -flatContentAsString]): we no longer use [self
313 fallbackStringEncoding]. Instead we directly specify
314 NSISOLatin1StringEncoding if UTF-8 has failed.
316 * UI/MailPartViewers/UIxMailPartICalViewer.m
317 ([-fallbackStringEncoding]): removed method.
319 2007-11-25 Ludovic Marcotte <ludovic@inverse.ca>
321 * SoObjects/Mailer/SOGoMailForward.m
322 Use [sourceMail decodedSubject] instead of [sourceMail subject]
323 Signature fix in -signature - see the comment
326 * SoObjects/Mailer/SOGoMailObject.m
327 Improved -stringFromData: to try UTF-8 then fallback to Latin1
329 * SoObjects/Mailer/SOGoMailReply.m
330 Modified -messageBody to strip the signature from the reply.
331 Also modified -signature to add "-- \n%@" instead of the
332 broken ""--\r\n%@" pattern.
334 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m
335 We now favor text/calendar parts over text/html and
336 text/plain parts when viewing a multipart/alternative mail.
337 This allows us to show the email invitations coming from
340 * UI/MailerUI/UIxMailAccountActions.m
341 Signature fix in -composeAction - see the comment
344 * UI/MailPartViewers/UIxMailPartViewer.m
345 Modified -flatContentAsString to use UTF-8 as the
346 default fallback encoding for 8-bit content.
348 * SoObjects/Mailer/SOGoDraftObject.m
349 Modified _fillInReplyAddresses:replyToAll:envelope:
350 so that if there's no recipient, we add at least
352 Fixed a mem leak in the same method.
354 2007-11-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
356 * UI/MailPartViewers/UIxMailRenderingContext.m
357 ([UIxMailRenderingContext -viewerForBodyInfo:_info]): same as below.
359 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
360 -plainTextContentFetchKeys]): same as below.
362 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
363 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): accept the
364 application/ics type from Google Calendar.
366 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
367 +distantFuture]): rewrote method to return an object that is
368 compatible with NSCalendarDate, unlike the implementation in
370 ([NSCalendarDate +distantPast]): same as above.
372 2007-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
374 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: fixed infinite loop
375 when charset is us-ascii, match it to ascii rather than none.
377 * SoObjects/Appointments/SOGoAppointmentFolder.m
378 ([SOGoAppointmentFolder
379 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
380 added search on the c_title column too.
382 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
383 -eventsListAction]): take the "search" url parameter into account.
384 ([UIxCalListingActions -eventsListAction]): fetch events matching
385 the title filter too.
387 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -connectAction]): the
388 user infos are now posted as "application/x-www-form-urlencoded".
389 So we have to have like a form has been posted.
391 2007-11-21 Francis Lachapelle <flachapelle@inverse.ca>
393 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
394 -calendarList]): also returns the calendar of the current
395 event. This is required so the proper calender is selected when
396 you view an event to which you don't have write access.
398 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
399 also returns true for super users.
401 2007-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
403 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
404 -lookupImap4BodyPartKey:inContext:]): return a correct body part
405 when "0" is requested, taking its mime-type into account.
407 * UI/MailPartViewers/UIxMailRenderingContext.m
408 ([UIxMailRenderingContext -flatContentForPartPath:_partPath]):
409 return content for part "0", which would be the message body.
411 2007-11-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
413 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
414 ([_UIxHTMLMailContentHandler
415 -setContentEncoding:newContentEncoding]): new method that
416 specifies an xml charset to return to the parser.
417 ([UIxMailPartHTMLViewer -flatContentAsString]): specifies the
418 charset to the content handler before parsing.
420 * SoObjects/Appointments/SOGoAppointmentObject.m: don't take an
421 empty c_name as a valid response when looking up an event. Create
422 one in that case instead.
424 2007-11-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
426 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -signature]):
427 returns the signature for the default identity of the default
429 ([UIxPreferences -setSignature:newSignature]): accessor that sets
430 the default signature.
432 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
433 -composeAction]): append the message signature to the new draft.
435 * SoObjects/Mailer/SOGoMailReply.m ([SOGoMailReply -signature]):
438 * SoObjects/Mailer/SOGoMailForward.m ([SOGoMailForward
439 -signature]): new method that takes the user's signature and put
440 it at the end of the message, if exists.
442 * UI/Common/UIxPageFrame.m ([UIxPageFrame -isSuperUser]): new
443 accessor that forwards the call to the active user.
445 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -signature]): returns the
446 user default signature.
447 ([SOGoUser -isSuperUser]): declares whether the user is listed
448 among the super users.
450 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
451 -setComponent:newComponent]): retain the component object.
452 ([UIxComponentEditor -organizerIdentity]): new accessor method to
453 handle list of possible organizers.
455 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
456 -event]): retain the returned event object.
458 * SoObjects/Appointments/SOGoAppointmentObject.m
459 ([SOGoAppointmentObject -saveComponent:newEvent]): reset the
460 organizer only if there are no attendees AND the owner of the
461 component is not the organizer him-/herself.
463 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
464 -toolbar]): rewrote in a way that ensures that each case is
467 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -isEqual:otherUser]): new
470 * UI/Scheduler/UIxTaskEditor.m ([-acceptAction])
471 ([-declineAction]): commented out unused methods.
473 * UI/MailPartViewers/UIxMailPartICalActions.m
474 ([UIxMailPartICalActions -deleteFromCalendarAction]): actually
475 delete the found object.
477 2007-11-18 Ludovic Marcotte <ludovic@inverse.ca>
479 * SoObjects/Mailer/SOGoMailBodyPart.m
480 SoObjects/Mailer/SOGoMailObject.m
481 UI/MailPartViewers/UIxMailPartViewer.m
482 Added support of messages containing non-textual
483 content and no parts.
485 * UI/MailerUI/UIxMailView.m
486 SoObjects/Mailer/SOGoMailObject.m
487 UI/Templates/MailerUI/UIxMailView.wox
488 Added support for the Reply-To header upon
491 2007-11-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
493 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]):
494 invoke saveComponent:.
496 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -hasOrganizer])
497 ([UIxComponentEditor -organizerName]): new template accessor
498 related to displaying the event's organizer.
499 ([-containsConflict:_component]): removed method.
500 ([UIxComponentEditor -takeValuesFromRequest:_rqinContext:_ctx]):
501 set RSVP to "TRUE" on each attendee.
503 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
504 -saveAction]): invoke saveComponent:.
506 * UI/MailPartViewers/UIxMailPartICalViewer.m
507 ([UIxMailPartICalViewer -isLoggedInUserTheOrganizer]): make use of
508 the -userIsOrganizer: category method.
509 ([-isLoggedInUserAnAttendee]): make use of -userIsParticipant:.
510 ([UIxMailPartICalViewer -hasSenderStatusChanged]): new template
511 accessor that determines whether the "Update" button should be
514 * UI/MailPartViewers/UIxMailPartICalActions.m
515 ([UIxMailPartICalActions -deleteFromCalendarAction]): implemented
517 ([UIxMailPartICalActions -updateUserStatusAction]): implemented
520 * UI/Common/UIxPageFrame.m ([UIxPageFrame
521 -setCssFiles:newCSSFiles]): new accessor that enables the
522 sub-templates to specify extra CSS files to load.
524 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
525 -homeFolderInContext:context]): cache the home folder of the user
526 object instead of the current user.
528 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
529 -deleteEntriesWithIds:ids]): invokes the "prepareDelete" optional
530 method if the child object implements it.
532 * SoObjects/SOGo/SOGoContentObject.m ([-setContentString:])
535 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
536 -setBaseDN:newBaseDNIDField:newIDFieldCNField:newCNFieldUIDField:newUIDFieldmailFields:newMailFieldsandBindFields:newBindFields]):
537 take a new "mailFields" parameter defining an array of fields
538 where to look at when searching the user's emails. It defaults to
539 the standard "mail" LDAP field.
541 * SoObjects/Appointments/SOGoAptMailICalReply.[hm]: new
542 SoComponent implementing a template for ITIP replies.
544 * SoObjects/Appointments/iCalPerson+SOGo.m ([iCalPerson
545 -mailAddress]): new method that returns a properly formatted email
546 address for the specified person entry.
547 ([iCalPerson -uid]): new method that tests whether the user is
548 known to the system and if so, returns its user id.
550 * SoObjects/Appointments/iCalPerson+SOGo.[hm]: new category module.
552 * SoObjects/Appointments/iCalEventChanges+SOGo.m
553 ([iCalEventChanges -sequenceShouldBeIncreased]): determine whether
554 the changes involved need a sequence inscrease, based on the
557 * SoObjects/Appointments/iCalEventChanges+SOGo.[hm]: new category
560 * SoObjects/Appointments/iCalEvent+SOGo.m ([iCalEvent
561 -isStillRelevant]): new overriden method determining the relevance
562 of the current event based on its end date.
564 * SoObjects/Appointments/iCalEvent+SOGo.[hm]: new category module.
566 * SoObjects/Appointments/iCalEntityObject+SOGo.m
567 ([iCalEntityObject -attendeeUIDs]): new category methods that
568 returns an array containing the uids of the system-know attendees.
569 ([iCalEntityObject -isStillRelevant]): new template method.
570 ([iCalEntityObject -itipEntryWithMethod:method]): clone the
571 current entry calendar with the specified ITIP method.
572 ([iCalEntityObject -attendeesWithoutUser:user]): returns an array
573 of attendees while making sure the specified user is not listed.
575 * SoObjects/Appointments/SOGoCalendarComponent.m
576 ([SOGoCalendarComponent -calendar:create:secure]): new name for
577 -calendar:. Added a "secure" parameter that specifies whether a
578 stripped calendar instance is needed or not. Also, we no longer
579 cache the content to simplify handling of new data.
580 ([SOGoCalendarComponent -component:create:secure]): same as above.
581 ([SOGoCalendarComponent
582 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
583 test whether the component is "still relevant" before sending an
585 ([SOGoCalendarComponent -sendResponseToOrganizer]): new method for
586 sending ITIP replies.
587 ([SOGoCalendarComponent -getUIDsForICalPerson:iCalPerson]):
588 removed method. Replaced with -[iCalPerson uid] category method.
590 * SoObjects/Appointments/SOGoAppointmentObject.[hm]: rewrote
591 class. No longer override saveContentString:,
592 saveContentString:baseSequence:, .... Implemented the
593 saveComponent: and the prepareDelete methods instead. Those
594 methods are called only from the web methods. This avoids the
595 risks related to email sending and changes propagation.
597 * UI/Common/UIxTabItem.m: removed useless class module.
599 * UI/Common/UIxTabView.[hm]: removed useless class module.
601 * UI/Common/UIxPrintPageFrame.m: removed useless class module.
603 * UI/Common/UIxAppNavView.m: removed useless class module.
605 2007-11-16 Ludovic Marcotte <ludovic@inverse.ca>
607 * SoObjects/Mailer/SOGoMailBaseObject.m
610 * SoObjects/Mailer/SOGoMailBodyPart.m
611 We also grok image/jpeg and return the SOGoMailBodyPart
612 for attachments fetching.
614 * SoObjects/Mailer/SOGoMailObject+Draft.m
615 Prevent a crash in case body decoding failed during
618 * SoObjects/Mailer/SOGoMailObject.m
619 Improved body decoding during a reply to also try
620 latin1 as an encoding.
622 * UI/MailPartViewers/UIxMailRenderingContext.m
623 Greatly improved the display mechanisms for emails.
624 Also properly consider the content disposition for
627 * UI/MailerUI/UIxMailToSelection.m
628 Removed worthless code.
630 * UI/WebServerResources/MailerUI.css
631 CSS fix for table views.
633 2007-11-15 Ludovic Marcotte <ludovic@inverse.ca>
635 * UI/WebServerResources/MailerUI.js
636 We now check for empty selection and warn the
637 user about it when deleting messages
639 * SoObjects/Mailer/SOGoDraftObject.m
640 Correctly check for the presence of a subject
641 before attempting to forward a message from
644 * SoObjects/Mailer/SOGoMailObject+Draft.m
645 We no longer use "[Fwd: ]" but simply "Fwd:"
646 when forwarding email messages.
648 * SoObjects/SOGo/SOGoUser.m
649 Modified the default forwarding format to be
650 inline instead of "attachment".
652 * SoObjects/Mailer/SOGoDraftObject.m
653 We now create and use a NGMimeContentDispositionHeaderField
654 in order to avoid encoding the whole Content-Disposition
655 header in case a non-ASCII char is present!
657 2007-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
659 * SoObjects/SOGo/iCalEntityObject+Utilities.m ([iCalEntityObject
660 -findParticipant:user]): new method based on the one removed from
661 SOGoCalendarComponent below.
663 * SoObjects/SOGo/iCalEntityObject+Utilities.[hm]: new category
664 module for iCalEntityObject.
666 * SoObjects/Appointments/SOGoCalendarComponent.m
667 ([-findParticipant:user]): removed method.
669 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
670 -setContentString:newContent]): new accessor method.
672 -saveContentString:newContentbaseVersion:newBaseVersion]): invoke
673 -[self setContentString:].
675 * UI/MailPartViewers/UIxMailPartICalViewer.m
676 ([UIxMailPartICalViewer -authorativeEvent]): returns the most
678 ([-isLoggedInUserTheOrganizer]): make use of -[SOGoUser
681 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
682 -stringByConvertingCRLNToHTML]): fixed crashes due to overflows in
683 temporary buffer we are handing.
685 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
686 -setComponent:newComponent]): check that newComponent is non-nil
687 before replacing the default values.
688 ([UIxComponentEditor -calendarList]): privacy is already an ivar.
689 We don't need to refetch it.
691 2007-11-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
693 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
694 -fetchMailForReplying:sourceMailtoAll:toAll]): remove the current
695 user from the list of recipients and make sure no other address is
698 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
699 -stringByConvertingCRLNToHTML]): build the returned NSString
700 without the ending \0.
702 2007-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
704 * UI/MailPartViewers/UIxMailPartICalViewer.m
705 ([UIxMailPartICalViewer -acceptLink])
706 ([UIxMailPartICalViewer -declineLink])
707 ([UIxMailPartICalViewer -tentativeLink]): removed useless methods.
709 * UI/MailPartViewers/UIxMailPartICalAction.m
710 ([UIxMailPartICalAction -addToCalendarAction])
711 ([UIxMailPartICalAction -deleteFromCalendarAction]): new stub
714 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
715 -lookupImap4BodyPartKey:]): make use of the new method below.
717 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
718 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): new method
719 that returns an appropriate Class depending on a given mime type.
721 * UI/SOGoUI/UIxComponent.m ([UIxComponent -canCreateOrModify]):
722 new boolean accessor that determines whether someone can create
723 (i.e. modify a new entry) or modify an existing entry.
725 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
726 -lookupName:lookupNameinContext:localContextacquire:acquire]):
727 overriden method to bind looked up keys to So methods but by
728 avoiding a call to toOneRelationshipKeys. This will be the top
729 method of the chain, meant to override SoObject's behaviour.
731 * SoObjects/Contacts/SOGoContactLDAPFolder.m
732 ([SOGoContactLDAPFolder
733 -lookupName:objectNameinContext:lookupContextacquire:acquire]):
734 removed hack to prevent [super lookupName...] to read the entire
735 LDAP directory when looking up a record.
737 2007-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
739 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
740 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
743 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
744 ([UIxMailPartHTMLViewer -_attachmentIds]): the reference was one
745 character too short, which cause the images not to be displayed
746 sometimes and crashes to happen whenever the references on a
747 message were wrong (due to bugs in SOPE).
749 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
750 -hasMessageAttachment]): consider an attachment any content that
751 has a non-nil disposition.
753 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
754 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
755 fixed method to make use of the parameters instead of the useless
756 remains that weren't even initialized.
758 * SoObjects/Appointments/SOGoAppointmentObject.m
759 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
760 don't propagate the event among the attendees if this is not an
762 ([SOGoAppointmentObject -deleteWithBaseSequence:]): same as above.
764 * Main/SOGo.m ([SOGo -authenticatorInContext:context]): make use
765 of the new category method below.
767 * SoObjects/SOGo/WORequest+SOGo.m ([WORequest
768 -handledByDefaultHandler]): new method that returns whether this
769 is an "so" or alike request.
771 * SoObjects/SOGo/WORequest+SOGo.[hm]: new category module.
773 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
774 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
775 write the new folder's name in the folder cache.
777 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
778 -calendars]): same as below.
780 * UI/Contacts/UIxContactsListViewContainer.m
781 ([UIxContactsListViewContainer -currentContactFolderName]):
782 translate the display name if its the default one.
784 * SoObjects/Appointments/SOGoAppointmentFolder.m
785 ([SOGoAppointmentFolder -create]): overriden method that invokes
786 its ancestor and then activate itself within the user settings.
788 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
789 -appendPersonalSources]): when the user is the owner of the
790 current folder, we create the "personal" folder if it doesn't
791 exist by invoking "create".
793 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
794 -primaryFetchProfile]): when no row is returned, we initialize
795 "values" to a new dictionary. This solves a bug where the defaults
796 would not be initialized properly.
798 2007-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
800 * SoObjects/SOGo/SOGoGCSFolder.m ([-compare:otherFolder]): method
801 moved into the SOGoFolder class.
803 * SoObjects/Appointments/SOGoAppointmentObject.m
804 ([SOGoAppointmentObject -saveContentString:_iCalinUIDs:_uids]):
805 simplified method by directly building a similar appointment
806 object with the current folder as container.
808 * SoObjects/Contacts/SOGoContactLDAPFolder.m
809 ([SOGoContactLDAPFolder
810 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
811 take the content of an object returned by
812 lookupName:inContext:acquire: instead of the dictionary passed as
813 parameter since it represents a flattened entry return by
814 lookupContactsWithFilter...
816 * SoObjects/Contacts/SOGoFolder+CardDAV.m: NSObject+CardDAV
817 category renamed to SOGoFolder+CardDAV.
819 * SoObjects/SOGo/SOGoParentFolder.m: no longer a subclass of
820 SOGoObject, but of SOGoFolder instead.
822 * SoObjects/SOGo/SOGoUserFolder.m: no longer a subclass of
823 SOGoGCSFolder, but of SOGoFolder instead.
825 * SoObjects/Appointments/SOGoAppointmentFolder.m
826 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): fixed
827 to take the new SOGoParentFolder class into account. Also, create
828 the personal folder if it doesn't exist.
830 * SoObjects/SOGo/SOGoFolder.[hm]: new class module implementing
831 the parent of all SOGo containers.
833 * SoObjects/SOGo/SOGoGCSFolder.[hm]: SOGoFolder class renamed to
836 2007-11-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
838 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection
839 -getAddressesFromFormValues:_dict]): take NSString and NSArray
840 values. Ignore addresses with a length of 0.
842 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -mailAccounts]): we now
843 fetch the accounts from the user defaults and create default
846 2007-11-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
848 * UI/MailPartViewers/UIxMailPartTextViewer.m
849 ([UIxMailPartTextViewer -flatContentAsString]): re-added
850 conversion of line-break to sequences of HTML "BR", with a fast
853 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
854 -flatContentAsString]): simplified method now that we know
855 -[NSString stringWithData:usingEncodingNamed:] has a more robust
858 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
859 -showToAddress]): the answer is cached.
861 * UI/Common/UIxObjectActions.m ([UIxObjectActions +initialize]):
862 read "SOGoACLsSendEMailNotifications" from the user defaults to
863 determiner whether to send an email when a user is added or
864 removed from an object's acl.
866 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
867 -contentForEditing]): make sure the htmlContent flag is set to NO
868 when we select the textual part. Also we select only the relevant
871 * UI/MailerUI/WOContext+UIxMailer.m ([-mailSubjectFormatter]):
874 * UI/MailerUI/UIxMailView.m ([UIxMailView -messageSubject]): new
875 method replacing -objectTitle, written like the ones below.
877 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
878 -messageSubject]): rewrote method to act the one below.
880 * UI/MailPartViewers/UIxMailPartMessageViewer.m
881 ([UIxMailPartMessageViewer -messageSubject]): new method that
882 returns the decoded mail subject or "Untitled" if the subject is
885 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
886 -decodedSubject]): new method that invoke -decodedSubject from the
887 NSString and NSData class, depending on the identity of the
888 subject obtained from the envelope.
890 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
891 -subjectForReply]): take the value of -[SOGoMail decodedSubject]
892 instead of the subject of the envelope.
893 ([SOGoMailObject -filenameForForward]): same as above.
894 ([SOGoMailObject -subjectForForward]): same as above.
896 * SoObjects/Mailer/NSString+Mail.m ([NSString -decodedSubject]):
897 same as below for NSString.
899 * SoObjects/Mailer/NSData+Mail.m ([NSData -decodedSubject]): new
900 method that decodes the subject of a mail taken as an NSData
901 instance. Handling the exceptions and the badly formatted headers.
903 * UI/MailerUI/UIxSubjectFormatter.[hm]: dropped class module.
905 2007-11-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
907 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
908 -deleteEntriesWithIds:ids]): make sure the objects returned by
909 lookupName:... are not instances of NSException.
911 2007-11-03 Ludovic Marcotte <ludovic@inverse.ca>
913 * UI/Scheduler/UIxAppointmentEditor.m
914 Fixed monthly recurrences support.
916 2007-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
918 * SoObjects/Appointments/SOGoAppointmentObject.m
919 ([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
920 sent when modifying an event, when the event was considered
921 relevant. The same thing is now implemented for event deletion.
923 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
924 -primaryFetchProfile]): make sure that the deserialized "values"
925 is an instance of NSMutableDictionary, otherwise we override it
928 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
929 -contentForReply]): make use of the SOGoMailReply WO page.
931 * SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
932 from SOGoMailForward to handle mail replies instead. Only three
933 methods remaining: date, from and messageBody. The latter is
936 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
937 -fetchMailForForwarding:sourceMail]): fetch attachments for
940 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
941 -hasMessageAttachment]): initialize hasAttachment with "NO" to
942 avoid false positives.
944 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
945 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
946 set title to an empty string where the event/task summary is null.
948 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
949 -setHeaders:newHeaders]): make sure there is a message id in the
950 headers dictionary, if not, generate one.
951 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
952 message id from the existing draft.
953 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
954 message id in the header map.
956 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
957 -deleteFolderAction]): no longer prefix the target folder with
960 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
961 -listMailboxesAction]): base the folder type on the folder
964 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
965 -lookupName:_keyinContext:acquire:_acquire]): compare the full
966 traversal to the potential looked up folder with the special
967 folder names and return an object with the appropriate
968 SOGoMailFolder subclass.
970 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
971 -traversalFromMailAccount]): don't prepend the whole string with
974 * SoObjects/Mailer/SOGoMailAccount.m
975 ([-lookupSentFolder:_keyinContext:_ctx])
976 ([-lookupDraftsFolder:_keyinContext:_ctx])
977 ([-lookupTrashFolder:_keyinContext:_ctx])
978 ([-lookupFiltersFolder:_key:_ctx]): removed methods.
979 ([SOGoMailAccount -inboxFolderNameInContext:])
980 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
981 ([SOGoMailAccount -sentFolderNameInContext:])
982 ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
983 the resulting name with "prefix" since we might return a nested
985 ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
986 names with "/". Sorts the resulting folder list with
987 localizedCaseInsensitiveCompare: instead of
988 caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
989 that were removed, instead, we choose the appropriate class
990 depending on the folder name. And since we are in SOGoMailAccount,
991 we don't have to compute a traversal path to match the key with
994 -folderWithTraversal:traversalandClassName:className]): new method
995 that returns an instance of the specified SOGoMailFolder subclass,
996 based on the traversal path passed as parameter.
997 ([SOGoMailAccount -inboxFolderInContext:_ctx])
998 ([SOGoMailAccount -draftsFolderInContext:_ctx])
999 ([-sentFolderInContext:_ctx])
1000 ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
1001 -folderWithTraversal:andClassName: method described above.
1003 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1004 -primaryFetchProfile]): make use of -[NSPropertyListSerialization
1005 propertyListFromData:mutabilityOption:format:errorDescription:] to
1006 deserialize the plist. Removed variant for libFoundation since it
1007 should support the above.
1008 ([AgenorUserDefaults -generateSQLForInsert])
1009 ([AgenorUserDefaults -generateSQLForUpdate]): make use of
1010 -[NSPropertyListSerialization
1011 dataFromPropertyList:format:errorDescription:] to serialize the
1012 plist. Removed variant for libFoundation since it should support
1013 the above. Escape the backslashes from the resulting string.
1015 2007-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1017 * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
1018 SOGoMailFolder: SOGoMailSpecialFolder.
1020 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1021 -traversalFromMailAccount]): overridden method that returns the
1022 initialized mutable string.
1023 ([SOGoMailAccount -allFolderPaths]): take the special folder paths
1024 with -traversalFromMailAccount and reposition them at the
1025 beginning of the list. By creating the special folders during that
1026 request, we also make sure that the folder exists thanks to the
1027 new initialisation method of the new "SOGoSpecialMailFolder"
1029 ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
1031 ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
1033 ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
1034 longer use lookupImap4Folder.
1035 ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
1038 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1039 -traversalFromMailAccount]): new method that returns the full
1040 IMAP4 path to the object.
1042 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
1043 "superUsernames" after fetching it from the ud.
1045 2007-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1047 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1048 -eventsListAction]): substitude the start and end date with their
1049 UTC counterpart, taking into account the offset from UTC related
1050 to those dates instead of the current one. This renders
1051 -[UIxCalMainView -userUTCOffset] obsolete because the computings
1052 that occured in javascript are now done server-side.
1054 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
1055 removed obsolete method.
1057 * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
1058 method converting html content to plain text.
1060 * SoObjects/Mailer/NSString+Mail.[hm]: new category module
1061 enhancing NSString with utility methods pertaining to mail handling.
1063 * SoObjects/Mailer/SOGoMailObject.m
1064 ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
1066 -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
1067 modified method to be always recursive and to take an array of the
1068 accepted mime-types as parameter. The returned array now contains
1069 the mime-type as well as the part keys.
1071 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1072 -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
1073 ([SOGoMailObject -contentForEditing]): rewrote method to take into
1074 account the first text/plain part or the first text/html part
1075 converted to text/plain with our new -[NSString htmlToText]
1078 * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
1079 "replyToAll:" with YES as parameter instead of NO.
1081 2007-10-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1083 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1084 -davContentType]): ignore any possible parameter taken from the
1085 mime-info of the body part.
1087 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1088 -lastFirstMessageNumber]): new accessor that returns the first
1089 message number of the last series of messages.
1090 ([UIxMailListView -fetchKeys]): request the bodystructure for each
1092 ([UIxMailListView -hasMessageAttachment]): extract the attachment
1093 information from the message bodystructure.
1095 2007-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1097 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1098 -GETAction:]): use the "application/octet-stream" mime type for
1099 elements of type "application/x-xpinstall" to avoid confusing
1102 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
1103 ([UIxPreferences -itemMessageCheckText])
1104 ([UIxPreferences -userMessageCheck])
1105 ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
1106 methods for handling the retrieval of new messages automatically.
1108 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
1109 that returns the interval of time between automatic message
1112 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1113 -defaultAction]): now expunges the last folder marked for expunge.
1115 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1116 -trashInContext:_ctx]): now marks the container folder for
1119 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1120 -markForExpunge]): new method that marks the folder for the next
1121 automatic expunge operation in the user settings.
1122 ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
1123 takes the last folder marked for expunge, expunges it and removes
1124 it from the user settings, if it exists.
1126 2007-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1128 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1129 -messageSubjectCellStyleClass]): added support for replied,
1130 forwarded, forwarded and replied mails.
1132 * SoObjects/Mailer/NSData+Mail.m ([NSData
1133 -bodyDataFromEncoding:encoding]): new utility method that decodes
1134 the NSData instance properly depending on the encoding string
1135 passed as parameter.
1137 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1138 -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
1140 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1141 -stringForData:_datapartInfo:_info]): simplified by invoking
1142 -bodyDataFromEncoding: from our new NSData category methods.
1144 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1145 -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
1146 where only the body part of the first of the keys fetched was
1147 returned. Also decodes the body parts properly following their
1150 * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
1151 extends the NSData class with utility methods useful for handling
1154 2007-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1156 * SoObjects/SOGo/NSArray+Utilities.m
1157 ([NSArray -stringsWithFormat:format]): replace instances of NSNull
1160 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1161 -keysWithFormat:keyFormat]): replace instances of NSNull with
1164 * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
1165 empty, use "c_cn" instead.
1167 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1168 ([SOGoMailAccount -draftsFolderInContext:_ctx])
1169 ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
1170 of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
1171 no always be specified from the root instead of sometimes from the
1174 2007-10-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1176 * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
1177 ([UIxPageFrame -productLocalizableStrings]): invoke the new
1178 +[SOGoUser language] method if the user is nil.
1180 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
1181 that returns any generically-found language.
1182 ([SoUser -language]): modified to call the above.
1183 ([SOGoUser -language]): modified to call the above if the user
1184 language has a null length.
1186 * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
1187 -davEntityTag]): modified to return the "hash" of the vCard string.
1189 * UI/MailerUI/UIxMailActions.m ([UIxMailActions
1190 -removeAllLabelsAction]): new method that removes all label flags
1191 from the associated message.
1192 ([UIxMailActions -addLabel1Action]
1193 [UIxMailActions -addLabel2Action]
1194 [UIxMailActions -addLabel3Action
1195 [UIxMailActions -addLabel4Action]
1196 [UIxMailActions -addLabel5Action]): new methods that adds label
1197 flags to the associated message.
1198 ([UIxMailActions -removeLabel1Action]
1199 [UIxMailActions -removeLabel2Action]
1200 [UIxMailActions -removeLabel3Action
1201 [UIxMailActions -removeLabel4Action]
1202 [UIxMailActions -removeLabel5Action]): new methods that removes
1203 label flags from the associated message.
1205 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
1206 new accessor that returns the labels associated with the message.
1208 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1209 -allFolderPaths]): new method that returns all the paths of all
1210 the subfolders of the folder object.
1211 ([SOGoMailFolder -allFolderURLs]): new method replacing
1214 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1215 -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
1216 role from its parent folder.
1218 2007-10-19 Francis Lachapelle <flachapelle@inverse.ca>
1220 * SoObjects/SOGo/SOGoUser.m
1221 ([SOGoUser -rolesForObject:objectinContext:context]): allow
1222 multiple super usernames to be defined. The user default
1223 SOGoSuperUsername is renamed SOGoSuperUsernames and must be
1226 2007-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1228 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1229 -userInContext:]): override the super method by returning
1230 anonymous if the super returns nil.
1232 * UI/Common/UIxPageFrame.m ([UIxPageFrame
1233 -productLocalizableStrings]): new method that returns the
1234 product-specific translation dictionary as a JSON hash.
1235 ([UIxPageFrame -commonLocalizableStrings]): same as above but for
1236 the "Common" framework.
1237 ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
1238 the requestor components to require additional Javascript files.
1239 This is useful now that all the scripts are loaded at the end of
1241 ([UIxPageFrame -additionalJSFiles]): new getter related to the
1244 2007-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1246 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
1247 implemented new web method.
1249 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1250 -copyToFolderNamed:folderNameinContext:]): new method with the
1251 code cut/pasted from -moveToFolderNamed:inContext:.
1252 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
1253 modified to use the code from -copyToFolderNamed:inContext:, which
1254 is common between the two actions.
1256 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1257 ([SOGoMailAccount -sentFolderNameInContext:])
1258 ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
1259 the user settings into account.
1261 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
1262 ([UIxMailFolderActions -setAsSentFolderAction])
1263 ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
1264 that change the purpose of the active folder to "Sent", "Drafts"
1267 * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
1268 returns the subject as quoted-printable.
1270 * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
1271 SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
1272 the "aclMethod" method for the subsequent language-dependent
1275 * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
1276 returns the subject as quoted-printable.
1278 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1279 -dealloc]): release item, aptStartDate and aptEndDate.
1281 2007-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1283 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1284 -initWithName:newNameinContainer:newContainer]): the owner of a
1285 shared folder is set to "nobody" by default.
1287 * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
1288 that returns whether the object has an owner or not.
1290 2007-10-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1292 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1293 the folder even if the current user is not its owner.
1295 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
1297 * We now send advisory emails when folders
1298 are created / deleted.
1300 * Fixed the sending of advisory emails upon
1301 ACL changes on folders.
1303 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
1305 * UI/Scheduler/UIxComponentEditor.m
1306 Implemented event/task priority support.
1308 * SoObjects/Contacts/SOGoContactGCSFolder.m
1309 Added CardDAV support.
1311 * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
1312 Implemented From: based on LDAP results based on
1313 the MailFieldNames attribute (an array) specified
1314 in every LDAP-based authentication sources.
1316 * UI/MailPartViewers/UIxMailPartTextViewer.m and
1317 UI/WebServerResources/MailerUI.css
1318 We avoid replacing "\r\n" and "\n" with <br /> and
1319 rather use CSS capabilities for proper formatting.
1320 This is _WAY_ faster on very large mails.
1322 2007-10-10 Francis Lachapelle <flachapelle@inverse.ca>
1324 * UI/Scheduler/UIxComponentEditor.m
1325 ([UIxComponentEditor -componentCalendar]): returns the calendar
1326 object of the current event.
1328 2007-10-05 Ludovic Marcotte <ludovic@inverse.ca>
1330 * UI/WebServerResources/MailerUI.js
1331 We check if at least one message is selected
1332 before performing a Reply/Reply All/Forward
1334 * SoObjects/Appointments/SOGoAppointmentFolder.m
1335 and others - implemented support for recurring
1336 events (with some known limitations right now,
1337 all soon to be fixed).
1339 2007-10-04 Francis Lachapelle <flachapelle@inverse.ca>
1341 * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
1342 the constraint that a username can't start with a digit.
1344 2007-10-02 Francis Lachapelle <flachapelle@inverse.ca>
1346 * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
1347 repository to Inverse's branch.
1349 2007-09-28 Francis Lachapelle <flachapelle@inverse.ca>
1351 * SoObjects/Mailer/SOGoDraftObject.m
1352 ([SOGoDraftObject -isValidAttachmentName:_name]): removed
1353 constraint on space in file name.
1354 ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
1355 now removes from file name all characters preceding a backslash.
1356 This happens with IE7 because the complete attachment file path
1359 2007-09-25 Francis Lachapelle <flachapelle@inverse.ca>
1361 * SoObjects/Appointments/SOGoAptMailNotification.m
1362 ([SOGoAptMailNotification -appointmentURL]): set personal as the
1363 default calendar where to add the event.
1365 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1366 activate the SOGoUIxDefaultModule user defaults.
1368 2007-09-21 Francis Lachapelle <flachapelle@inverse.ca>
1370 * UI/SOGoUI/UIxComponent.m
1371 ([UIxComponent -shortUserNameForDisplay]): returns the string
1372 "wrongusernamepassword" when authentication failed.
1374 2007-09-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1376 * UI/MailPartViewers/UIxMailPartICalViewer.m
1377 ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
1378 entry of the Calendars parent folder.
1380 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1381 -messageSubject]): new accessor method to work-around a problem
1382 within SOPE where a subject could be returned as an NSData.
1384 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1385 -appendPersonalSources]): make sure the value of the "c_path4" of
1386 the returned rows are not NSNull, otherwise, discard them.
1388 2007-09-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1390 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1391 -compare:otherFolder]): new overriden method that compares two
1392 contact foldes based on their class and then transfer the control
1393 to the super method in SOGoFolder.
1395 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1396 ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
1397 compare two contact folders based on their class and then their
1400 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
1401 new method for sorting folders. The folders are compared based on
1402 their ownership, whether they are a main folder and finally
1403 depending on their display name.
1405 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1406 -pathArrayToSOGoObject]): do not reorder the paths if the third
1407 element is an instance of NSNull.
1409 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1410 -subFolders]): returns a sorted array using the "compare:"
1413 2007-09-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1415 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1416 -calendars]): also returns the owner of the listed folders.
1418 * SoObjects/Appointments/SOGoAppointmentFolder.m
1419 ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
1421 * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
1422 method into UIxFolderActions.
1424 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1425 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
1426 freebusy info from the "personal" calendar.
1428 * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
1429 -createFolderAction]): new standardized method for requesting
1430 folder creations among gcs-based modules.
1432 * UI/Common/UIxParentFolderActions.[hm]: new action class module.
1434 * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
1435 module, equivalent to the SOGoParentFolder's child
1436 SOGoContactFolders, but for calendars.
1438 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
1439 method that returns translated strings for controller bundles
1440 (same as what UIxComponent does for view bundles).
1441 ([SOGoObject -pathArrayToSOGoObject]): new method that returns
1442 the real path to a subscribed folder (if subscribed).
1443 ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
1444 ([SOGoObject -globallyUniqueObjectId]): new instance method
1445 calling its class equivalent.
1447 2007-09-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1449 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
1450 whether the user is logged in and if so, redirect to his/her
1452 ([SOGoRootPage -appendToResponse:inContext:]): removed useless
1455 2007-09-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1457 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1458 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1460 ([SOGoFolder -displayName]): new method.
1461 ([SOGoFolder -delete]): accept to proceed only if nameInContainer
1464 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1465 ([SOGoContactLDAPFolder
1466 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1467 renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
1469 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1470 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1471 removed method, reimplemented in SOGoFolder.
1472 ([SOGoContactGCSFolder -displayName]): removed method,
1473 reimplemented in SOGoFolder.
1474 ([-delete]): removed method, modified in SOGoFolder.
1476 * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
1477 a subclass of SOGoParentFolder.
1479 * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
1480 from SOGoContactFolders and modified to be more content-independent.
1482 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
1483 ([UIxMailActions -markMessageReadAction]): new methods moved from
1484 UIxMailListView and adapted to invoke the client object directly,
1485 since the previous versions had to to a lookup from the parent
1488 * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
1489 method into UIxMailActions.
1490 ([-markMessageReadAction]): same as above.
1491 ([-viewAction]): removed useless method.
1492 ([-javaScriptOK]): removed useless method.
1493 ([-isJavaScriptRequest]): removed useless method.
1494 ([-lookupActiveMessage]): removed useless method.
1496 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1497 -responseWithStatus:status]): new method that returns a WOResponse
1498 initialized with the specified status code.
1499 ([WODirectAction -responseWith204]): new method that invokes the
1500 above one with "204" as parameter.
1501 ([WODirectAction -redirectToLocation:newLocation]): rewrote method
1502 to make use of -responseWithStatus:.
1504 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
1505 method that returns a WOResponse initialized with the 204 status
1508 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
1509 always use a "not deleted" search qualifier along with the user
1510 qualifier (if present).
1512 2007-09-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1514 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1515 -contactSearchAction]): only return the records which have an
1518 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1519 -trashInContext:_ctx]): no longer expunge the mailbox after
1520 marking a message deleted.
1521 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
1524 * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
1525 ([-trashAction]): moved method into UIxMailActions.
1526 ([-moveAction]): moved method into UIxMailActions.
1528 2007-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1530 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1531 ([_UIxHTMLMailContentHandler
1532 -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
1533 comments from the CSS code, do not add the CSS code to the body
1534 content and remove references of body from the CSS declarations.
1535 ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
1536 ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
1537 common with cssContent in a different method and invoke it only
1540 * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
1541 instead of UIxPageFrame.
1543 2007-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1545 * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
1546 ([-appendToResponse:responseinContext:ctx]): commented out.
1547 ([SOGoRootPage -connectURL]): new accessor that returns the full
1548 url the the "connect" method.
1549 ([-connectAction]): rewrote method to return a properly formatted
1550 auth. cookie based on the username and password passed as
1553 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1554 set the value of the cookie to "discard" and set its expiration
1557 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1558 -preprocessCredentialsInContext:context]): consider the user
1559 anonymous if the cookie value is "discard".
1560 ([SOGoWebAuthenticator
1561 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1562 set the expiration date of the cookie to yesterday.
1564 * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
1565 returns the path to the application if the clientObject is not a
1568 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
1569 moved the requirement of authentication from the SOGo application
1572 * SoObjects/Appointments/SOGoAppointmentObject.m
1573 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
1574 check whether the new appointment object is still relevant before
1575 sending a notification.
1577 2007-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1579 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1580 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1581 render the login page through the SoDefaultRenderer.
1583 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
1584 -isPublicInContext:localContext]): new overriden method that
1587 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1588 -currentCalendarLogin]): replace css-unsafe characters with _.
1590 * UI/SOGoUI/UIxComponent.m ([UIxComponent
1591 -shortUserNameForDisplay]): simplified method.
1592 ([-user]): removed method since [context activeUser] is as useful.
1594 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1596 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1597 set the cookie path to "/".
1599 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
1600 authenticator based on the request handler key. "dav" returns the
1601 SOGoDAVAuthenticator, anything else returns the Web authenticator.
1603 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
1604 "SOGoAuthenticator".
1606 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
1607 implementing a subclass of SoCookieAuthenticator, designed for
1608 web-based cookie authentication of users.m
1610 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1611 new method that resets the authentification cookie.
1613 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1615 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
1616 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
1617 didBind to NO to make sure no false authentication is returned if
1618 the bind operation is not executed.
1620 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1622 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
1623 "In-Reply-To" header field when replying.
1625 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
1626 table field names that are queried.
1628 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1629 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
1630 add the "c_" prefix to the quick table field names that are
1633 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1635 * SoObjects/Appointments/SOGoAppointmentFolder.m
1636 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
1637 "personal" to the ocs path of the appointment folder.
1639 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1640 -flatContentAsString]): use latin1 when the encoding is not
1641 specified, and to reencode data chunk which were not correctly
1642 decoded with the original charset.
1644 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
1645 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
1646 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
1647 ([SOGoAppointmentFolder
1648 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
1649 override those methods to use the "personal" additional directory.
1651 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
1652 append "/personal" to the calendar path to simulate a single
1653 calendar in a choice of many.
1655 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1656 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
1657 methods back here. Moved the folder existence check here, and do
1658 it on self only when the lookup happens for a non-folder object.
1659 This permits to accept entries for folders with parents who
1662 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1664 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1665 -shouldTakeValuesFromRequest:requestinContext:context]): same as
1668 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1669 -shouldTakeValuesFromRequest:requestinContext:context]):
1670 redesigned method since any method called can be received from a
1671 POST or a GET. Instead we check the method call itself and we
1672 accept only if it has the "save" prefix.
1674 * SoObjects/Appointments/SOGoAptMailNotification.m
1675 ([SOGoAptMailNotification -getSubject]): returns the subject an a
1676 quoted-printable encoded string, if needed.
1678 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1679 -asQPSubjectString:encoding]): moved method into
1680 NSString+Utilities.m.
1682 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1684 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1685 -messageForwardingList])
1686 ([UIxPreferences -itemMessageForwardingText])D
1687 ([UIxPreferences -userMessageForwarding])
1688 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
1689 new template methods for manage the user preference regarding
1692 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
1693 algorithm to return, in order, the user's defined language or the
1694 first browser language or, finally, the default language.
1695 ([SOGoUser -messageForwarding]): new method that returns the user
1696 preference for message forwarding: "inline" or "attached",
1697 defaulting to "attached".
1699 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1700 -contentForInlineForward]): new method that returns the content of
1701 the message for inline forwarding based on the SOGoMailForward
1704 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1705 -fetchMailForForwarding:sourceMail]): check the user preference
1706 for message forwarding and compose inline forwarded messages if required.
1708 * SoObjects/Appointments/SOGoCalendarComponent.m
1709 ([SOGoCalendarComponent
1710 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1711 now use a template based on the language returned from the
1714 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
1715 a subclass of SOGoMailForward for English locale.
1717 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
1718 a subclass of SOGoMailForward for French locale.
1720 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
1721 helps build template for inline forwarded messages.
1723 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1725 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
1726 to handle "<var:if-ie>" template tags.
1728 * UI/SOGoElements: new extension bundle containing sogo-specific
1731 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1732 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
1733 selected in the dialog.
1734 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
1735 first category, if ever, of the calendar entity.
1737 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1738 -composeAction]): restored method since it is needed by the
1741 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1742 -composeAction]): the address fields should be arrays and not
1745 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
1746 that returns the build date of SOGo in the template.
1748 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1750 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1751 -_flattenedRecords:records]): when the c_cn field is empty,
1752 returns set a formatted string with the concatenation of
1753 c_givenname and c_sn as the displayName.
1755 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1756 -isValidMailAccountName:_key]): prevent unknown accounts from
1759 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1760 -pathToAttachmentObject]): we no longer need the filename
1761 extension for SoLookup...
1763 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1764 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
1765 filename to have an extension, and thus accept any filename.
1767 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1768 -currentCName]): new method that returns the c_name of the
1769 contact, correctly escaped to be passed by url afterwards.
1771 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1772 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
1773 instance of [self decodedFlatContent] instead of the buggy
1774 NSString from [super flatContentAsString] to the parser.
1776 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1778 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
1779 new category method to reponds to the "delete" web command on
1781 ([UIxMailActions -deleteAttachmentAction]): new category method to
1782 reponds to the "deleteAttachment" web command on drafts, taking
1783 the "filename" url parameter into account.
1785 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1786 -contentForEditing]): new method that retrieve the editable mail
1788 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
1789 returns the body keys for attached files (parts with a "filename"
1792 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1793 -asQPSubjectString:encoding]): do not change the string if the
1794 encoded string has the same length (which means it is already
1796 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
1797 that retrieve a draft along with its attachments for editing.
1798 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
1799 choke if the "to" header field is empty.
1800 ([SOGoDraftObject -delete]): new method to delete the draft folder
1801 whenever operations are done.
1803 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1805 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
1806 useless stub method, of which the intention was implemented in
1808 ([-lookupSentFolderUsingAccount]): removed obsolete method.
1809 ([-selectedMailIdentity]): removed obsolete method.
1810 ([-lookupSentFolderUsingFrom]): removed obsolete method.
1811 ([-storeMailInSentFolder:_path]): removed obsolete method, of
1812 which the mechanism has been put in -[SOGoDraftObject sendMail]
1814 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
1815 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
1816 adapted algorithms to the new SOGoDraftObject methods.
1817 ([-deleteAction]): removed method since local draft objects cannot
1818 be removed by the user.
1820 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1821 -expungeAction]): new method replacing the one previously found in
1823 ([UIxMailFolderActions -createFolderAction])
1824 ([UIxMailFolderActions -renameFolderAction])
1825 ([UIxMailFolderActions -deleteFolderAction])
1826 ([UIxMailFolderActions -emptyTrashAction])
1827 ([UIxMailFolderActions -subscribeAction])
1828 ([UIxMailFolderActions -unsubscribeAction]): error situations
1829 should have http return code 500 instead of 403.
1831 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1832 -composeAction]): new method replacing the one previously in
1835 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1836 -imap4URLString]): removed overriden method (see below).
1838 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
1839 cache the mailbox acl.
1840 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
1841 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
1843 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
1844 the new method of determining the users mail accounts.
1846 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
1847 longer adds a "/" at the end of the string (the default for
1848 folders), therefore this will be overriden in SOGoMailFolder
1849 rather than in SOGoMailObject.
1851 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
1852 method, moved into the new UIxMailActions module class.
1854 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
1855 -newDraft]): new method that returns a new SOGoDraftObject
1856 instance with a unique filename based on the current timestamp and
1857 the "newDraft" prefix.
1859 -lookupName:nameinContext:localContextacquire:acquire]): overriden
1860 method by detecting local drafts with their "newDraft" prefix.
1861 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
1863 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
1864 from scratch by making it a subclass of SOGoMailFolder.
1866 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
1869 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
1872 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
1875 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
1876 new method, initializing the new ivars: IMAP4ID, headers, text,
1877 sourceURL and sourceFlag.
1878 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
1879 ([-_ensureUserSpoolFolderPath])
1880 ([-saveMimeMessageToTemporaryFileWithHeaders:])
1881 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
1882 ([-deleteTemporaryMessageFile:], [-delete], [-content])
1883 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
1884 ([-uid], [-flags], [-size], [-envelope]): removed methods.
1885 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
1887 ([SOGoDraftObject -setSourceURL:newSourceURL])
1888 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
1889 methods to store the url of the original message between accesses
1890 so that, depending on the action taken (forward or reply), the
1891 correct flag can be given.
1892 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
1893 the imap4 id that is returned for the message whenever it is saved
1894 into the drafts folder.
1895 ([SOGoDraftObject -save]): new method that takes in charge the
1896 saving of the message in the IMAP drafts folder.
1897 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
1898 new method that fills the original data of the new message with
1899 the reply content of the original message.
1900 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
1901 above for message forwarding.
1902 ([-spoolFileManager]): removed useless method (only returned the
1903 default filemanager...)
1904 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
1905 the resulting message as an NSData chunk.
1907 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
1908 containing a rewrite of the mail action methods found in
1909 UI/Mailer/, that needed to be put in the SOGoMailObject class.
1910 ([SOGoMailObject -subjectForReply]): new method that returns a
1911 subject suitable for replies.
1912 ([SOGoMailObject -contentForReply]): new method that returns the
1913 textual content of an email, quoted for replying.
1914 ([SOGoMailObject -filenameForForward]): new method that returns
1915 the name of the filename that should contain the forwarded
1916 message, based on its subject.
1917 ([SOGoMailObject -subjectForForward]): explicit.
1919 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1921 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1922 -mailAccounts]): rewrote method to return the name of the mail
1923 accounts now available with the -[SOGoUser mailAccounts] method.
1924 ([UIxMailMainFrame -showLinkBanner]): removed method.
1925 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
1926 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
1927 ([UIxMailMainFrame -rootURL]): removed method.
1928 ([UIxMailMainFrame -userRootURL]): removed method.
1929 ([UIxMailMainFrame -calendarRootURL]): removed method.
1930 ([UIxMailMainFrame -contactsRootURL]): removed method.
1931 ([UIxMailMainFrame -hasErrorText])
1932 ([UIxMailMainFrame -errorText])
1933 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
1934 ([-composeAction]): removed method. Now provided by
1935 UIxMailAccountActions.
1936 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
1937 ([UIxMailMainFrame -hideFolderTree]): removed method.
1938 ([UIxMailMainFrame -treeRootClassName]): removed method.
1939 ([UIxMailMainFrame +initialize]): removed method.
1940 SOGoMailTreeRootClass userdefaults will no longer have any effect.
1942 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1943 -redirectToLocation:newLocation]): new method that implements the
1944 same functionality as WOComponent.
1946 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
1948 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
1949 method that returns whether the current mail is store in the
1950 drafts folder hierarchy.
1952 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
1953 ([-primaryEmail]): removed method.
1954 ([SOGoUser -primaryIMAP4AccountString]): removed method.
1955 ([SOGoUser -mailAccounts]): new method that returns an array
1956 containing description dictionaries for all the user mail
1957 accounts. Each account also contain the user's identities for that
1959 ([SOGoUser -allIdentities]): new utility method that returns all
1960 the user identities on all accounts.
1961 ([SOGoUser -primaryIdentity]): new method return the first
1962 identity of the first account.
1964 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
1966 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1967 -isInDraftsFolder]): returns NO.
1968 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
1970 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
1972 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1973 -isInDraftsFolder]): new method that detects if self is contained
1974 by the drafts folder by calling itself on the container object.
1976 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
1978 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
1979 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
1980 return the name of the mail accounts now available with the
1981 -[SOGoUser mailAccounts] method.
1983 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
1986 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
1989 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1990 -keysWithFormat:format]): method that forward the method of the
1991 same name to each member of the array, considering they all are
1992 instances of NSDictionary.
1993 ([NSArray -objectsForKey:key]): same principle as above.
1994 ([NSArray -flattenedArray]): new method that transforms an array
1995 of arrays into a single array containing all the elements of the
1998 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1999 -keysWithFormat:keyFormat]): new method inspired by the python
2000 string formatting system and which replaces occurences of "%{key}"
2001 by the corresponding keys.
2003 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2005 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
2006 sql script before the generic one when initializing mandatory
2009 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2011 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2012 -pureEMailAddress]): new utility method inspired by the
2013 "_rawSender" private method in SOGoDraftObject, which it now
2016 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
2017 provides a common API for sending emails, no matter what the
2020 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2022 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2023 -quotasAction]): invoke "relativeImap4Name" instead of
2024 "nameInContainer" since the latter also returns the "folder"
2027 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2028 -listMailboxesAction]): declare the output as text/plain in UTF-8.
2030 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2031 -deleteFolderAction]): fixed the url of the destination folder.
2033 * Main/SOGo.m ([SOGo +initialize]): show the build date and
2034 hostname at startup.
2036 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2038 * SoObjects/Appointments/SOGoCalendarComponent.m
2039 ([SOGoCalendarComponent
2040 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
2041 set the mail date to the current date string returned by our
2042 rfc822DateString extension method.
2044 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2045 -_gcsFoldersFromFolder:): ignore the personal folders who are
2046 returned but don't really exist.
2048 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
2050 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
2051 has to return only one element.
2053 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2055 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
2056 -content]): new method returning the decoded content of the
2057 corresponding attachment as an NSData instance.
2058 ([UIxMailPartViewer -filename]): if the "filename" parameter of
2059 the metadata parameterList is empty, try to find out the filename
2060 from the "disposition" metadata returned with the BODYSTRUCTURE
2063 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
2064 -composeAction]): prefix the INBOX folder with "folder".
2066 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
2067 -relativeImap4Name]): return nameInContainer stripped from its
2068 first 6 characters since all folder names are prefixed with
2071 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2072 -imap4URLString]): invoke -relativeImap4Name instead of
2073 "nameInContainer" since the former will return the fixed IMAP4
2074 foldername and the latter the SoObject name.
2076 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2077 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
2079 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
2080 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
2081 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
2082 ([SOGoMailAccount -sentFolderNameInContext:])
2083 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
2084 names with "folder".
2085 ([SOGoMailAccount -inboxFolderInContext:_ctx])
2086 ([SOGoMailAccount -sentFolderInContext:_ctx])
2087 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
2088 the folder names with "folder" since they are prefixed earlier.
2090 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2092 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
2093 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
2094 all starts with "folder".
2096 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
2097 longer declare security info from here.
2099 * SoObjects/Mailer/SOGoMailFolder.m
2100 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
2101 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
2102 folder names now always start with "folder".
2104 * SoObjects/Mailer/SOGoMailAccount.m
2105 ([-lookupName:inContext:acquire:]): folder names now always start
2108 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2110 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
2111 -forwardAction]): adapted to the new saveAttachment:withMetadata:
2114 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
2115 code to save the attached filenames with the filename returned by
2116 the web server as well as their mime types.
2118 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
2119 ([UIxMailPartMessageViewer -toAddresses])
2120 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
2121 the corresponding fields separated with a ", " (if needed).
2123 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
2124 -saveAttachment:_attachwithMetadata:metadata]): new method
2125 replacing -saveAttachment:withName: and which takes a dictionary
2126 as parameter with the filename and the mime type of the
2128 The mimetype is then saved in a hidden text file.
2129 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
2130 take the mime type from the hidden text file related to the
2133 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
2134 ([SOGoContactGCSFolder
2135 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2136 return records if the db records are > 0 and not just > 1...
2138 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2140 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
2142 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
2144 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2145 ([SOGoContactLDAPFolder
2146 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2147 translate the returned records to a normalized form.
2149 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2150 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2151 translate the returned records to a normalized form.
2153 * UI/Scheduler/UIxCalListingActions.m,
2154 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
2155 SoObjects/SOGo/AgenorUserDefaults.m,
2156 SoObjects/Contacts/SOGoContactGCSFolder.m,
2157 SoObjects/Appointments/SOGoAppointmentFolder.m,
2158 OGoContentStore/OCSiCalFieldExtractor.m,
2159 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
2160 table fields with "c_".
2162 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2164 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
2165 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
2166 the application settings. If set, both limit will influence the
2167 maximum size of the resultsets and the time taken to solve them.
2168 ([LDAPSource -_initLDAPConnection]): initialize the limits.
2170 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2172 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
2173 method that declares the DAV namespace related to CardDAV.
2174 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
2175 method that declares the "access-control" and "addressbook-access"
2176 classes to the list.
2178 * SoObjects/Appointments/SOGoAppointmentFolder.m
2179 ([-lookupActionForCalDAVMethod:]): removed method.
2180 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
2181 method that declares the DAV namespace related to CalDAV.
2183 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
2184 optional method for subclasses which handle specific extensions to
2185 the DAV protocol: CardDAV or CalDAV.
2187 -lookupName:lookupNameinContext:localContextacquire:acquire]):
2188 new overriden method that handles dav invocations for extensions
2189 to DAV by returning an appropriate SoSelectorInvocation.
2191 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2192 -asDavInvocation]): new method returning a dictionary with a "ns"
2193 key representing the dav namespace and a "method" key representing
2194 the dav method name of the request.
2196 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
2197 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
2199 ([UIxPreferences -shouldDisplayPasswordChange]): new template
2200 method that returns the value of SOGoUIxUserCanChangePassword.
2202 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
2203 scan the value of SOGoUIxDefaultModule. If not set, the default
2204 module defaults to "Calendar".
2205 ([SOGoUserHomePage -defaultAction]): redirect the user to the
2206 value of "SOGoUIxDefaultModule".
2208 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2210 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2211 -contactInfos]): cache the results to avoid multiple invocations.
2213 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2214 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
2215 really should return something or if we fake to return nil...
2217 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2219 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
2220 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
2221 default is set to "bypass".
2223 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2224 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
2225 when authMethod is set to "bypass" from now on. This would avoid a
2226 security concern with a default installation of SOGo.
2227 AuthentificationMethod is now prefixed with "SOGo" for better
2230 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2232 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2233 -quotasAction]): new method that returns a json representation of
2236 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2238 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2239 -imap4URL]): rewrote method to support accented mailbox names.
2240 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
2241 SOGoAuthenticator's passwordInContext:.
2243 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2244 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
2245 start and due dates to nil if hasStartDate and hasDueDate are
2248 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2249 -passwordInContext:context]): made method public.
2251 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2252 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
2253 to false to avoid a null violation.
2255 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2257 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2258 -contentAsString]): returns the message encoded in ISO Latin 1
2261 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
2262 SOGoSuperUsername user defaults.
2263 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
2265 ([SOGoUser -rolesForObject:objectinContext:context]): if the
2266 current user is the superuser, grant him/her the "owner" role.
2268 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
2269 the folder only if the current user is the owner of the future
2272 * SoObjects/Appointments/SOGoCalendarComponent.m
2273 ([SOGoCalendarComponent -contentAsString]): we return the content
2274 based on the permissions returned by the security manager instead
2275 of by looking at the user roles.
2277 * SoObjects/Appointments/SOGoAppointmentFolder.m
2278 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
2279 folders of the user to whom this folder belongs instead of the
2280 active user. This way, a delegate user will be able to have the
2281 same view that the original user has if he connects from his user
2284 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
2285 user exists before creating the SOGoUserFolder instance. If not,
2288 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
2289 return the message source code in plain text.
2291 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2292 -contentAsString]): returns the message encoded in UTF8.
2294 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2296 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
2297 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
2298 leading tagname into account when serializing the element values.
2300 * Main/SOGoProductLoader.m: only load bundle directories ending
2301 with the "SOGo" extension.
2303 * Main/SOGo.m ([SOGo
2304 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
2305 result set if the query has caused no exception. Otherwise we get
2306 an "evaluation is in progress exception".
2308 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2310 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2311 -generateSQLForInsert]): initialize error to nil before the
2312 serialization. Otherwise the method can get confused if it ever is
2313 initialized to something else.
2315 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
2316 -folderIsMandatory]): returns NO unconditionnally.
2318 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2319 -appendPersonalSources]): add the "personal" folder to the list of
2320 user folders even if it doesn't exist, so that it is created when
2321 the user accesses it.
2323 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2324 -folderIsMandatory]): returns YES if nameInContainer is set to
2325 "personal", which is the default address book.
2327 * SoObjects/Appointments/SOGoAppointmentFolder.m
2328 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
2329 users must have one Calendar folder (one and only one).
2330 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
2331 escaping '\' so make the carriage return a real one. This way,
2332 PgSQL 8 won't complain about escaping the string.
2334 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
2335 method that create the folder if considered mandatory.
2336 ([SOGoFolder -folderIsMandatory]): new method that determines
2337 whether the folder should be created automatically or not. To be
2338 overriden by subclasses.
2340 * Main/SOGo.m ([SOGo -run]): override method and create the
2341 missing system tables if needed.
2343 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2345 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
2346 -mailDateFormatter]): returns the user's date formatter.
2348 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
2349 applies the user timezone to the date object before returning it.
2351 * UI/Common/UIxSortButton.m: removed useless class module.
2353 * UI/Common/UIxSortableTableHeader.m: removed useless class
2356 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2357 -contactInfos]): use the "asc" url parameter instead of "desc" to
2358 determine the ordering.
2359 ([-sortOrdering]): removed method.
2360 ([UIxContactsListView -init]): removed the "searchText" ivar.
2361 (general): the template no longer use the UIxSortableTableHeader
2364 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
2365 -defaultSortKey]): default sort following the messages arrival
2366 instead of their date.
2367 ([-isSortedDescending]): removed method.
2368 ([-imap4SortOrdering]): use the "asc" url parameter instead of
2369 "desc" to determine the ordering.
2370 (general): the template no longer use the UIxSortableTableHeader
2373 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2375 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
2377 ([-setQualifier:_msg], [-qualifier]): removed methods.
2378 ([UIxMailListView -defaultAction]): added code to handle the
2379 search criteria and value passed as url parameters. Also, we now
2380 handle the same search criterias as Thunderbird/Icedove.
2382 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2384 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
2385 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
2386 the string instead of the string itself.
2387 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
2389 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
2390 bool var "acceptAnyUser" that is set when the AuthenticationMethod
2391 user default is nil.
2392 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
2393 unconditionnally returns an instance whenever acceptAnyUser is set.
2395 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2397 * Main/sogod.m (main): prevent SOGo from running as root.
2399 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2401 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2402 -setCurrentPassword:newPassword]): new stub method.
2403 ([SOGoUser -dateFormatterInContext:context]): new method that
2404 returns an instance of SOGoDateFormatter configured based on the
2407 * UI/Common/UIxPageFrame.m ([UIxPageFrame
2408 -relativePreferencesPath]): new method.
2410 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
2411 removed useless method.
2413 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
2414 different configurable formats (long and short date + time).
2416 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
2418 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2419 -isInternetRequest]): removed method.
2421 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2422 -jsonRepresentation]): new method with an explicit name.
2424 * UI/PreferencesUI/product.plist: new bundle that provides a web
2425 ui for handling user defaults.
2427 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
2429 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
2431 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
2433 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2435 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
2437 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2439 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
2440 -compareEventsAscending:otherEvent]): no longer use compare: on
2441 the time objects since one of them could be an NSNull, which
2442 crashes when comparing with anything.
2444 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2445 -eventsListAction]): sort events from here.
2446 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
2448 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
2449 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
2451 * SoObjects/Appointments/SOGoAppointmentFolder.m
2452 ([SOGoAppointmentFolder
2453 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
2454 no longer sort elements from here.
2456 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2458 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2459 -aclsForUser:uid]): implemented method by forwarding the request
2460 to the container. This fixes a bug where users could no longer
2461 read emails from shared folders.
2463 * SoObjects/Appointments/SOGoCalendarComponent.m
2464 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
2465 here, but rather in its parent class.
2467 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
2468 -stringForSecondsSinceThe70s:seconds]): new utility method.
2470 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2471 -eventsListAction]): no longer reduce the end day of one day for
2472 all day events since everything has been fixed in
2473 OCSiCalFieldExtractor.
2475 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2476 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
2477 the end date of all day events of 1 so that they stay on their
2480 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2482 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
2484 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
2486 ([-fetchCoreTasksInfos]): removed method.
2488 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2489 -init]): initialize an instance of SOGoDateFormatter.
2490 ([UIxCalListingActions -eventsListAction]): the display start and
2491 end dates are added to the listing for each event.
2493 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
2495 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2496 -isAllDay]): returns YES if the "hm" url parameter is set to
2498 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
2499 is displayed one day earlier.
2501 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2503 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2504 -_setupContext]): take the range of dates specified by the popup
2507 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
2508 WODirectAction that returns WOResponse objects with the events or
2509 todos satisfying the parameters passed in the url.
2511 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2512 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
2513 "isAllDay" into account and compute the amount of days to pass to
2516 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
2518 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
2519 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
2520 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
2521 new method that returns a json-formatted array of the visible tasks
2522 for the current user.
2524 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2526 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
2527 object must be present in the list of UIDs we delete the object
2528 from. Otherwise Calendar objects having no organizer and no
2529 attendees will remain in their owner's Calendar.
2531 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2532 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
2533 first 3 elements of the path array if the url returned by
2534 baseURLInContext: returns a hostname.
2536 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2537 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
2538 nil, in which case a crash happens when calling hasPrefix:.
2539 ([SOGoMailFolder -_sharesACLs]): same as above.
2540 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
2541 otherUsersFolderName is nil, we return nil.
2542 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
2543 nil from [self otherUsersPathToFolder], we return nil too.
2545 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2547 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2548 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
2549 the result of [self baseURLInContext:] to avoid a double escaping
2550 in the resulting string.
2552 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
2553 the user has the "ObjectReader" role on the parent container, then
2554 he is granted the "ObjectViewer" role on this object. Same for
2555 "ObjectEraser", although this might change later.
2557 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2558 -toolbar]): determine the toolbar filename based on the
2559 permissions declared by the securitymanager. The role mechanism
2560 has been adjusted on a lowerlevel so we can simplify the code.
2562 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2563 -initWithName:newNameinContainer:newContainer]): read the content
2564 directly from here. That way we can determine whether the object
2566 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
2567 the ObjectCreator role is enabled, we also grant the ObjectEditor
2568 role to the current user.
2570 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
2571 changed the method paradigm to only return HTTP code 204. Not test
2572 is done whatsoever since the security manager does it for us.
2574 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
2575 removed method because the same exists in UIxFolderActions.m
2577 * UI/Contacts/UIxContactsUserRightsEditor.m
2578 ([UIxContactsUserRightsEditor
2579 -setUserCanReadObjects:userCanReadObjects]): new method.
2581 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
2582 "FolderEraser" and special permission "Access Object". Removed
2583 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
2584 can be used instead. Removed "FolderReader" since it is useless.
2586 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2587 -vCard]): directly use the "content" ivar since it is initialized
2588 during object creation.
2590 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2591 ([SOGoContactLDAPFolder -init]): no longer handle the
2592 nameInContainer no the container ivars. They were removed because
2593 this class is a descendant of SOGoObject which already has them.
2594 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
2595 returning "displayName".
2596 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
2599 * SoObjects/Appointments/SOGoCalendarComponent.m
2600 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
2601 ([SOGoCalendarComponent -findParticipant:user]): new name for
2602 method "participant:".
2603 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
2604 findparticipant but taking a uid string as parameter.
2605 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
2606 iCalendar automatically. Instead, this is done only when the user
2607 is a "date and time viewer".
2608 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
2609 (modifier and responder) into account by compiling them with the
2612 * SoObjects/Contacts/SOGoContactFolder.h: removed
2613 "nameInContainer" from the list of required methods.
2615 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
2616 -davContentType]): returns "text/calendar".
2618 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2619 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
2620 groupdav resource-type.
2622 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2623 -davContentType]): same as below.
2625 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2626 -initWithName:newNameinContainer:newContainer]): new overriden
2627 method setting the custom owner directly.
2629 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2630 -davContentType]): same as below.
2632 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2633 -davContentType]): same as below.
2635 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
2636 declare "httpd/unix-directory".
2638 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
2639 "UTC" as fallback timezone instead of "Canada/Eastern".
2640 ([-hasEmail:email]): make use of the new NSArray's
2641 containsCaseInsensitiveString: method.
2643 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2644 -davContentType]): declare "message/rfc822" as content type.
2646 * SoObjects/Appointments/SOGoAppointmentFolder.m
2647 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
2649 ([SOGoAppointmentFolder
2650 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
2651 ([-fetchContentObjectNames]): commented out method since it was
2652 usefull only for testing Funambol.
2654 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
2655 -containsCaseInsensitiveString:match]): an enhanced version of
2658 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
2660 ([-showMarkDeletedButton]): removed useless method.
2661 ([-showTrashButton]): removed useless method.
2663 * SoObjects/Appointments/iCalEntityObject+SOGo.m
2664 ([iCalEntityObject -userIsParticipant:user]): new proxy method
2665 that invoked isParticipant on self for each possible email
2666 addresses of the user passed as parameter.
2667 ([iCalEntityObject -userIsOrganizer:user]): same as above.
2669 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
2672 * SoObjects/Appointments/SOGoAppointmentObject.m
2673 ([SOGoAppointmentObject
2674 -saveContentString:contentStringbaseVersion:baseVersion]): remove
2675 method since an event may not have an organizer.
2677 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2678 -GETAction:localContext]): clarified method. Added support for
2679 content-type (thanks to Helge Hess).
2680 ([SOGoObject -initWithName:_nameinContainer:_container]):
2681 initialize and retain the owner.
2682 ([SOGoObject -davContentType]): returns "text/plain".
2684 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2686 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2687 -addUserInAclsAction]): send an acl addition mail.
2688 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
2691 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2692 -_realActionWithFolderName:folderDict]): handle the possible
2693 presence of the "mail-invitation" url parameter. If present, the
2694 user will be redirected to the relevant folder.
2696 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
2697 ([SOGoUser -language]): new method that returns the user's
2698 preferred language, or the system's if none has been set yet.
2700 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
2701 that returns the full dav url to self.
2702 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
2703 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
2704 returns the full so url to the base of the SOGo module to which
2705 self belongs, and for the specified user.
2706 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
2707 but for the current user.
2708 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
2709 required by the acl advisory templates and which returns a link
2710 the target user can click to activate its new subscription.
2711 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
2712 but for inclusion of the application/x-sogo-notification part,
2713 which will be handled by the Lightning enhancer plugin.
2715 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
2716 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
2717 do nothing yet since imap folder subscription is not handled yet.
2719 * SoObjects/SOGo/SOGoContentObject.m
2720 ([-hasSupportForDefaultRoles]): removed method.
2722 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2723 -getFullEmailForUID:uid]): new method that returns the username +
2726 * SoObjects/Appointments/SOGoCalendarComponent.m
2727 ([SOGoCalendarComponent +initialize]): the default language for
2728 mail templates is now set to English.
2730 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
2731 SOGoACLAdvisory implementing the french template for user removal
2734 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
2735 SOGoACLAdvisory implementing the french template for user
2738 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
2739 SOGoACLAdvisory implementing the english template for user removal
2742 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
2743 SOGoACLAdvisory implementing the english template for user
2746 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
2747 supercall of all the acl advistory templates. The model is based
2748 on SOGoAptMailNotification except that the template encapsulates
2749 the message to be sent. Later, we might create a superclass common
2750 to all template-based emails.
2752 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2753 -addRange:newRange]): new method that store a string
2754 representation of the NSRange passed as parameter.
2755 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
2756 any range contained in self intersect with the one passed as parameter.
2758 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
2759 store ranges in an array to prevent them from intersecting with
2760 each other during the passes.
2762 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2764 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2765 -primaryFetchMailboxInfo]): useless method. Removed.
2767 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2769 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2770 -toManyRelationshipKeys]): invoke [self subfolders].
2771 ([SOGoMailFolder -subfolders]): new method containing what used to
2772 be in toManyRelationshipKeys.
2773 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
2776 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2777 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
2778 named and at the beginning of which we put the predefined folders.
2780 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2781 -emptyTrashAction]): new method inspired by a similar one from
2782 UIxMailListView, to which we added the ability to remove
2785 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
2786 method. Replaced with a similar one in UIxMailFolderActions.
2788 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2789 -renameFolderAction]): implemented method.
2790 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
2791 specified folder. Instead, we put it in the trash folder.
2793 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
2794 method, replaced with a similar method in the new
2795 UIxMailFolderAction class module.
2796 ([-deleteFolderAction]): idem.
2798 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2799 -createFolderAction]): new method implementing subfolder creation.
2800 ([UIxMailFolderActions -renameFolderAction]): new method
2801 implementing subfolder renaming (basic implementation to be
2803 ([UIxMailFolderActions -deleteFolderAction]): new method
2804 implementing folder deletion.
2806 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
2807 web actions related to the handling of imap folder.
2809 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2811 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2812 -ownerInContext:localContext]): overriden method because we are an
2813 IMAP4 client and we need a bit more intelligence to deduce the
2814 owner of the current folder.
2815 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
2816 return an NSException so we need to be careful here to avoid a
2818 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
2819 NSException so we need to be careful here to avoid a crash.
2821 * SoObjects/Mailer/SOGoMailAccounts.m
2822 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
2823 there is no longer any concept of Intranet or Internet connection
2826 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2827 -sharedFolderName]): new method.
2828 ([SOGoMailAccount -otherUsersFolderName]): new method.
2830 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
2831 new javascript code and the new UIxMailAccountActions class.
2833 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
2834 javascript code and the new UIxMailAccountActions class.
2836 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
2837 new javascript code and the new UIxMailAccountActions class.
2839 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2840 -listMailboxesAction]): new method that returns a json-formatted
2841 tree of all the mailboxes available to the current user.
2843 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
2844 web actions related to the handling of mail accounts.
2846 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
2849 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
2850 -jsonRepresentation]): new interface method meant to be overriden
2851 by the primitive classes.
2853 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2855 * UI/MailerUI/UIxMailSplashView.m: removed.
2857 * SoObjects/Appointments/SOGoCalendarComponent.m
2858 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
2859 the uid to the list only when the user email is recognized by the
2862 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2864 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2865 -isDeletionAllowed]): completed method with the new imap acl api.
2867 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
2870 * SoObjects/SOGo/SOGoPermissions.m: added the new role
2871 "SOGoMailRole_MessageEraser".
2873 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
2874 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
2875 "defaultUserID" method into account.
2877 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
2878 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
2879 "defaultUserID" method into account.
2881 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
2882 methods to support the IMAP acls mentionned in the RFC 4314,
2883 removed the ones specific to Cyrus.
2885 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
2886 mandatory method for subclasses. Removed the SOGoDefaultUserID
2889 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
2890 overriden method to return @"<default>".
2892 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2893 -defaultUserID]): overriden method to return @"<default>".
2895 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2896 -aclsForUser:uid]): overriden method.
2897 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
2898 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
2899 ([SOGoMailFolder -defaultUserID]): overriden method.
2900 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
2902 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2904 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2905 -aclUsersForObjectAtPath:objectPathArray]): new method that being
2906 forwarded the calles to aclUsers for the GCS-based subclasses of
2909 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
2910 methods that would have been used to support IMAP acls. Replaced
2911 them with the new protocol for them that has been implemented in
2912 SOGo during the last few weeks.
2914 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2915 -hasSupportForDefaultRoles]): override method by returning "YES".
2917 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2918 -addObjectUniquely:object]): new method with an explicit name.
2920 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
2921 "acl" to "aclUsers". Now designed to return only the uid of the
2922 users involved in an ACL.
2923 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
2924 "NO" by default. To indicate to the acl editor that we don't want
2925 to handle a default user.
2927 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
2928 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
2931 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
2932 provides a view to the IMAP acls.
2934 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
2936 * UI/WebServerResources/MailerUI.js: replaced all invocations of
2937 addEventListener to the use of prototype's Event object. Also,
2938 configured all menus programmatically following descriptions lists
2939 containing their callbacks, or nulls, submenus id or separators.
2941 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2943 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2944 -addUserInAclsAction]): save the previous roles of the user
2945 (unlikely) or the default roles, or None instead of saving the
2946 roles that should appear the first time in the role editor when no
2947 default has been set...
2949 * SoObjects/SOGo/SOGoObject.m: defined a new constant
2950 "SOGoDefaultUserID".
2952 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2953 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
2954 ignore the "AuthorizedSubscriber" role and add the "None" role
2955 when no other role is found.
2957 * UI/Common/UIxAclEditor.m: added a button for the new default
2960 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2961 -_initRights]): don't take the "None" role into account when
2962 initializing the list of current roles.
2964 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
2967 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2969 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2970 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
2971 There is no need to subscract the start from the length if a space
2972 is not found since the range has not changed either. Finally, the
2973 first character before the url might also be a tab or a cr, so we
2974 match it against the "urlAfterEndingChars" custom NSCharacterSet.
2975 ([NSString -stringByDetectingURLs]): modified to handle email
2976 addresses and add a correct "mailto:" link.
2978 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2980 * SoObjects/Appointments/SOGoAppointmentFolder.m
2981 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
2982 method to return the events in the range of 2 weeks ago up to 4
2985 * UI/MailPartViewers/UIxMailPartTextViewer.m
2986 ([UIxMailPartTextViewer -flatContentAsString]): use the new
2987 "stringByDetectingURLs" method to offer clickable urls.
2989 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2990 -stringByDetectingURLs]): this new method replaces passive URLS
2991 with active ones for HTML resolution of the text.
2993 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2995 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2996 -asQPSubjectString:encoding]): simplified method.
2997 The headers indicates "utf-8" again thank to our fix in
3000 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
3003 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3005 * UI/Common/UIxObjectActions.m ([UIxObjectActions
3006 -removeUserFromAclsAction]): implemented this method which was
3007 missing and is required to remove users from ACLs.
3009 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3010 -subscribeAction]): folderDict was not autoreleased, resulting in
3013 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3014 -primaryFetchProfile]): when building with libFoundation, don't
3015 use the "propertyList" method from NSString. Rather, we convert
3016 the string to an NSData instance and passit as parameter to
3017 NSDeserializer. This way, we obtain a mutable dictionary rather
3018 than an immutable one.
3020 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
3021 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
3022 constant string "contentTypeValue".
3023 contentTypeValue is now set back to iso-8859-1 since NGMime
3024 converts extracts the data in that encoding.
3026 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3028 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
3029 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
3030 "bindFields" value is present in the user defaults, use the
3031 specified fields to find the dn of the user to bind.
3032 ([LDAPSource -allEntryIDs])
3033 ([LDAPSource -fetchContactsMatching:match])
3034 ([LDAPSource -lookupContactEntry:entryID])
3035 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
3036 bind and unbind the connection on each request.
3038 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
3040 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3041 -contactSearchAction]): simplified method to use the facilities
3042 provided by the LDAPUserManager. No longer takes care of the
3043 "ldap-only" url parameter since all requests are handled by the
3046 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3047 -primaryFetchProfile]): check that the value returned is not null
3048 before interpreting it.
3050 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
3051 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
3052 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
3053 system email is already present, remove it before adding it.
3055 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
3056 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
3057 loginToCheck is not empty.
3058 ([LDAPSource -fetchContactsMatching:match]): check that match is
3060 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
3062 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
3065 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3067 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
3069 ([SOGoUser -systemEmail]): returns the email formed from the
3070 username and the default mail domain.
3071 ([SOGoUser -hasEmail:email]): test whether the user has the
3072 specified email, in a case-insensitive way.
3074 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3075 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
3076 check login information.
3078 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3079 ([SOGoContactLDAPFolder
3080 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
3081 no longer manage LDAP connections. The requests are forwarded to
3082 the relevant LDAPSource instead.
3084 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3085 -appendSystemSources]): pass LDAPSource objects to
3086 SOGoContactLDAPFolder instances.
3088 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
3089 address of the "from" field before sending the message. Otherwise,
3090 sending the mail won't work.
3092 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
3093 rewrote this method to request all the available email identities
3094 for the current user. Also, the from field also contains the full
3095 name of the user, not just his/her email address.
3097 * SoObjects/Appointments/SOGoCalendarComponent.m
3098 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
3099 from the previous module iCalEntityObject+Agenor.
3100 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
3101 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
3104 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
3105 replacing the SOGoContactLDAPEntry module. It was renamed as such
3106 because it now receives a dictionary instead of an NGLdapEntry.
3107 It thus can now handle data from any source of LDIF data, not
3108 only coming from LDAP.
3110 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
3111 implementing most of what used to be the AgenorUserManager class.
3112 The difference is that users are cached in the forme of
3113 dictionaries and many sources are used. Also, it can be used to
3114 search LDAP contacts.
3116 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
3117 the concept of "ldap source", to be used by all the classes
3118 needing access to LDAP-provided information: addressbooks and the
3119 user manager. Most the method thereing are transcriptions of
3120 methods previously found in SOGoContactLDAPFolder. It also contain
3121 utility methods for user matching and authentification.
3123 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
3124 module, rendered useless by code refactoring.
3126 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
3127 with the freshly written "LDAPUserManager".
3129 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3131 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
3132 SOGOContactLDIFEntry.
3134 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
3135 module, obsoleted by code in SOGo/LDAPSource.[hm].
3137 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3139 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
3140 new method with an explicit name.
3142 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3144 * SoObjects/Appointments/SOGoCalendarComponent.m
3145 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
3146 replacing "isOrganizer:orOwner:" by taking only one instance of
3147 SOGoUser as parameter.
3148 ([SOGoCalendarComponent -participant:user]): new method replacing
3149 the previous "isParticipant" boolean method by returning the first
3150 participant matching the user passed as parameter. This method is
3151 used so that both the regular email address and the "system email
3152 address" of the user are matched against the participants emails.
3154 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3155 -getSystemEMailForUID:uid]): new method that returns the email
3156 formed with the user's uid and the default mail domain.
3158 * SoObjects/Appointments/SOGoCalendarComponent.m
3159 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
3160 was previously commented out.
3162 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
3163 forwared to [AgenorUserManager getSystemEmailForUID:].
3165 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3166 -toolbar]): method replacing the one with the same name in the
3167 task and appointment editor classes. This method makes also use of
3168 the new method "isOrganizerOrOwner:" and "participant:" in
3169 SOGoCalendarComponent.
3171 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3172 -toolbar]): removed method, replaced with a method with the same
3173 name in UIxComponentEditor.
3175 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
3176 method, replaced with a method with the same name in
3179 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3180 -primaryFetchProfile]): the values returned from the database are
3181 converted to a put dictionary first, since the dictionary returned
3182 is actually an immutable one, which can cause a crash afterwards.
3184 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3186 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
3187 and "SOGoRole_ObjectEditor".
3189 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
3190 -prepareRightsForm]): this method is no longer mandatory.
3192 * UI/Contacts/UIxContactsUserRightsEditor.m
3193 ([UIxContactsUserRightsEditor
3194 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
3195 module to handle acls related to the address books. Partial
3198 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3199 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
3202 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
3203 specified roles from cache.
3204 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
3205 put resulting roles in cache.
3207 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
3208 initWithName:inContainer:. Instead, directly initialize the ivars
3209 as it is supposed to be to avoid an infinite loop whenever one of
3210 those two methods are overriden.
3212 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
3215 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3216 -aclsForUser:uid]): override method so that SOGo won't crash when
3217 loading the contact card.
3219 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3221 * SoObjects/Appointments/SOGoAppointmentFolder.m
3222 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
3223 "freebusy" special user should only require opaque elements.
3225 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3227 * SoObjects/Appointments/SOGoAppointmentFolder.m
3228 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
3229 our double declaration where the resulting XML would be screwed.
3230 There is only one collection per namespace.
3232 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
3233 rfc822DateString]): new method that returns a string conform to
3234 rfc 822 and suitable for email headers.
3236 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
3237 "rfc822DateString" category method on the date we put in the
3240 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3242 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
3243 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
3244 which should never be overriden.
3245 ([UIxUserRightsEditor -appendRight:newRight])
3246 ([UIxUserRightsEditor -removeRight:right])
3247 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
3248 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
3249 methods that can be used by the subclasses.
3250 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
3251 mandatorily be overriden to prepare the elements of the subclassed
3253 ([UIxUserRightsEditor -updateRights]): new method that should
3254 mandatorily be overriden to update the user rights from the
3255 elements of the subclassed form.
3257 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
3258 check if the uid is already listed before adding it to our array.
3259 This is because the acl table can contain more than one record per
3260 user/object relationship.
3262 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3263 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
3264 "roles" parameter is now an NSArray instead of a string. Therefore
3265 we loop throughout the array to populate the table. All the
3266 relevant records are removed prior to the addition of the new
3269 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
3270 -aclsForUser:uid]): new override that returns nil until we add
3271 support for IMAP acls.
3273 * SoObjects/Mailer/SOGoMailAccounts.m
3274 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
3276 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3277 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
3279 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3280 -aclsForUser:uid]): override this method which will always return
3283 * SoObjects/SOGo/SOGoPermissions.[hm]: added
3284 [Public,Private,Confidential]
3285 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
3286 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
3287 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
3289 * SoObjects/Appointments/SOGoAppointmentFolder.m
3290 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
3291 that defines default roles for new elements in the acl.
3293 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
3294 module and subclass of UIxUserRightsEditor specific to the
3295 handling of user rights on calendar folders.
3297 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3299 * SoObjects/Appointments/SOGoAppointmentFolder.m
3300 ([SOGoAppointmentFolder -groupDavResourceType]): return both
3301 "vevent-collection" and "vtodo-collection".
3303 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
3304 that implements the detailed editor of user rights per-object.
3306 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3308 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3309 -rolesForObject:objectinContext:context]): no longer query objects
3310 for "roleForUser:". Instead, all objects should implement
3313 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
3314 new method to comply with the new acl "protocol" in SOGoObject.
3315 Uses SOGoFolder's new facilities for ACLS.
3316 ([SOGoContentObject -aclsForUser:uid]): idem.
3317 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
3318 ([SOGoContentObject -removeAclsForUsers:users]): idem.
3320 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3321 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
3322 based folders. This method is derived from the code that was in
3323 UIxAclFolder before its removal.
3324 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
3327 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
3329 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
3330 ([SOGoFolder -setRoleForUsers:uidsto:role])
3331 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
3333 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
3334 that requires overriding by subclasses.
3335 ([SOGoObject -aclsForUser:uid]): idem.
3336 ([SOGoObject -defaultAclRoles]): idem.
3337 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
3338 ([SOGoObject -removeAclsForUsers:users]): idem.
3340 * UI/Common/UIxObjectActions.m: new module implementing the web
3341 actions common to SOGoObject and all its subclasses.
3342 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
3343 user with the clientObject defaults user rights to the object's
3346 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
3347 to the point where it will only list the users (and their name)
3348 associated with an object acl.
3350 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
3351 methods have been moved into SOGoObject and SOGoFolder during a
3354 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3355 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
3356 method made useless by the programmatic handling of iCalendar
3358 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
3359 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
3360 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
3362 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
3363 drop on all folder nodes, not just on leaves.
3365 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3366 ([SOGoContactLDAPFolder
3367 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
3369 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3371 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
3372 debugging facilities when the SOGoDebugObjectAllocation user
3375 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3377 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
3378 method that SOGo will need with non-gnustep Foundation
3380 ([NSString -stringByAppendingPathComponent:component]): new method
3381 that SOGo will need when building with libFoundation. Method
3382 removed later since it is available from
3383 Foundation/NSPathUtilities.h.
3385 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
3388 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
3389 every subclass to access [WOApplication context] without having to
3390 invoke it more than once.
3392 * SoObjects/Appointments/SOGoCalendarComponent.m
3393 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
3394 moved method from SOGoTaskObject and SOGoAppointmentObject up to
3397 * UI/Scheduler/UIxCalSelectTab.m: removed module.
3399 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3401 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
3402 -vCard]): test the prefix of the card in a case-independent way.
3404 * OGoContentStore/OCSContactFieldExtractor.m
3405 ([OCSContactFieldExtractor
3406 -extractQuickFieldsFromContent:content]): we no longer accept
3407 records in a format other than versit vCard so we can get rid of a
3410 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3412 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3413 -selectorComponentClass]): restored method.
3415 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3417 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
3418 -shouldDisplayCurrentTask]): the current task is not displayed if
3419 it is NOT completed or if the "showCompletedTasks" flag is set.
3420 The logic was inverted in Lightning and is now in SOGo too.
3422 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3424 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
3425 want the "work" url instead of the "home".
3427 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3428 -_saveSnapshot]): save url values from snapshot.
3429 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
3431 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3432 -calendarList]): new method replacing "availableCalendars".
3434 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
3435 -calendarFolders]): we now take the list of subscribed calendar
3438 * SoObjects/Appointments/SOGoAppointmentFolder.m
3439 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
3440 method derived from and replacing [UIxCalView calendarFolders].
3442 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3444 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3445 -toManyRelationshipKeys]): don't put the predefined folders in the
3446 list if they are returned by the server.
3448 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
3449 longer store the "flattenedBlocks" in a dictionary since the
3450 object will be deleted anyway and we don't need to put the folders
3453 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3454 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
3455 attachment path into account when computing the part urls.
3457 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3459 * UI/Contacts/UIxContactsListViewContainer.m
3460 ([UIxContactsListViewContainer -additionalFolders]): take the list
3461 of subscribed folders from the new property list used for the user
3462 settings. The value of its key is SubscribedFolders for the
3463 dictionary entry named "Contacts".
3465 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3466 -canAccessContentAction]): new method to override the one from
3467 UIxFoldersActions by taking into account the fact that, this time,
3468 the clientObject is an ldap folder. Removed many method that used
3469 to be related to the handling of the user selector.
3471 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
3472 to make sure they can be removed.
3474 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
3475 populate the calendar entries based on the user settings plist.
3477 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3478 -selectForMailerAction]): restored method.
3480 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
3481 from a simplified version of the old UIxContactEditor (removed).
3483 * UI/Contacts/UIxContactsUserFolders.m: new template module for
3484 selecting users or user folders through an LDAP search of which
3485 the results are displayed as a tree.
3487 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
3488 method "onContactAdd" here since the Mailer is now the only module
3489 to use it when composing emails.
3491 * UI/WebServerResources/generic.js: added code for handling the
3492 new scheme used for describing SOGo folders, common code to handle
3493 folder addition or removal.
3495 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3496 -activateFolderAction]): new method that change the "active"
3497 settings in the folder-related fields in the user settings.
3498 ([UIxFolderActions -deactivateFolderAction]): see above.
3500 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3501 -checkRightsAction]): removed method.
3503 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3504 -updateAdditionalAddressBooksAction]): removed method.
3506 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3507 -updateCalendarsAction]): removed method.
3509 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3511 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3512 -checkRightsAction]): removed method.
3514 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3515 -canAccessContentAction]): new method designed to replace
3516 [UIxCalMainView checkRightsAction] in a more universal way.
3518 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3520 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3521 -roleOfUser:uidinContext:context]): take all the subkeys into
3522 account, not only the "personal" folder.
3524 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3525 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
3526 to the new components.
3528 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
3531 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3532 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
3533 field of the sogo_user_profile table, where the user-customizable
3534 changes will be saved.
3535 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
3536 similar to the one above, using the "settings" field where the
3537 automatic settings will be saved.
3539 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
3540 module to bind the userdefaults to a property list contained in a
3541 specified field of the sogo_user_profile table.
3542 ([AgenorUserDefaults
3543 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
3544 added a "fieldName" parameter.
3546 * UI/Common/UIxFolderActions.m: new module implementing web
3547 actions common to all GCS-based folders.
3549 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3551 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
3552 put a carriage return after the day name.
3554 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3555 -readFreeBusyAction]): restored method.
3557 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3559 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3560 -defaultAction]): remade module to redirect automatically to the
3563 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
3565 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3567 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3568 -deleteAction]): new web method to delete personal addressbook
3571 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3572 -delete]): override method to refuse the deletion of the folder if
3573 its nameInContainer is "personal".
3575 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
3576 that forwards the deletion request to the folder manager.
3578 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3580 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
3581 -zoomList]): new method that returns the list of available zoom factors.
3583 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3584 -changeStatusAction]): rewrote method.
3586 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3587 -_handleAttendeesEdition]): make sure "attendeesNames" has a
3588 length > 0 before computing the attendees. Otherwise there will be
3589 an invalid empty entry.
3590 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
3591 organizer when there are attendees and remove it when the
3592 attendees are removed.
3594 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3596 * UI/Scheduler/UIxAttendeesEditor.m): new component.
3598 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
3599 the task and appointment editors. Now a container component
3600 handling the common elements of tasks and events.
3602 * UI/Scheduler/UIxTaskEditor.m: same as below.
3604 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
3605 a subclass of UIxComponentEditor but a subcomponent of it.
3607 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
3608 toolbar can have the special value "none" to indicate there is
3609 none attached to the window.
3611 * SoObjects/Appointments/SOGoCalendarComponent.m
3612 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
3614 ([SOGoCalendarComponent -isParticipant:email]): new method.
3615 ([SOGoCalendarComponent -calendar:create]): takes one parameter
3616 "create" which is a boolean indicating whether we want to create
3617 the calendar if it does not exist.
3619 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3621 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
3622 of a table, the same way the dayly and weekly views have been for
3625 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
3627 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
3630 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
3631 property to point at the user folder
3633 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3635 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3636 -userInContext:]): returns "SOGoUser".
3638 * SoObjects/Appointments/SOGoCalendarComponent.m
3639 ([SOGoCalendarComponent -contentAsString]): overriden method that
3640 takes the privacy into account and discard the relevant fields if
3641 needed by generating a new content string and caching it.
3642 ([SOGoCalendarComponent
3643 -saveContentString:contentStringbaseVersion:baseVersion]): if the
3644 new method above has cached a content string, release it and set
3645 it to nil so that it will have to be regenerated in the case it is
3647 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
3648 discard the fields that have to be hidden when the card is
3651 * SoObjects/Appointments/SOGoAppointmentFolder.m
3652 ([SOGoAppointmentFolder
3653 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
3654 sure the cards are now handled as instances of
3655 SOGoCalendarComponent instead of SOGoContentObject so that their
3656 content string is taking the privacy classifiction into account.
3657 ([SOGoAppointmentFolder -_privacySqlString]): new method that
3658 generates a query to determine what information can be given and
3659 if the card itself has to be shown.
3661 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3662 -getICalPersonsFromValue:selectorValue]): removed useless
3663 "isAccessRestricted" method.
3665 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3666 -setStyle:_style]): test whether the values of orgmail and
3667 partmails are null before manipulating them, otherwise SOGo sends
3668 a "rangeOfString:" message to an NSNull, which makes it crashes.
3670 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3671 -extractQuickFieldsFromEvent:_event]): we now use the new
3672 "symbolicAccessClass" method from iCalEntity to determine the
3673 value of the "classifiction" field.
3674 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
3677 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3679 * SoObjects/Appointments/SOGoAppointmentFolder.m
3680 ([SOGoAppointmentFolder
3681 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
3682 see below, the query is adapted consequently.
3684 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3685 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
3686 renamed to "classification" and can any integer as value.
3687 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
3690 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3692 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3693 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
3694 don't prepend anything to the class and id named. Instead, we
3695 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
3698 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3700 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
3701 -rolesOfUser:logininContext:context]): if object does not exists
3702 (for example when it's being created), the current user has the
3703 same rights on it than he/she has on its parent container.
3705 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3706 -nameExistsInFolder:objectName]): methods that tests if a c_name
3707 corresponding to the name passed as parameter is present in the db
3710 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3712 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3713 -rolesForObject:objectinContext:context]): test for
3714 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
3716 * SoObjects/Appointments/SOGoCalendarComponent.m
3717 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
3718 returns the roles of the user on the container object if the event
3721 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3723 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
3724 alternativeViewer a multipart/related message is being handled.
3726 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
3729 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
3730 text/html component before text/plain.
3732 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3733 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
3734 fetching of HTML parts.
3736 * SoObjects/Appointments/SOGoCalendarComponent.m
3737 ([SOGoCalendarComponent -componentTag]): new template method that
3738 returns the vcalendar tag of the current object.
3739 ([SOGoCalendarComponent -component]): new method that returns the
3740 first object matching [self componentTag] within the current
3741 calendar object. This method replaces 'firstEventInCalendar:' as
3742 well as "firstTaskInCalendar:".
3743 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
3744 moved method from SOGoAppointmentObject.m.
3746 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3748 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
3749 module which shows each selected user's calendar in a different
3750 column instead of mixing their events together.
3752 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
3753 replaced use of [NSString stringByTrimmingWhiteSpaces] with
3754 [NSString stringByTrimmingSpaces].
3756 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
3757 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
3760 * UI/Scheduler/UIxCalDayOverview.m,
3761 UI/Scheduler/UIxCalDayChartview.m,
3762 UI/Scheduler/UIxCalDayListview.m,
3763 UI/Scheduler/UIxCalWeekOverview.m,
3764 UI/Scheduler/UIxCalWeekChartview.m,
3765 UI/Scheduler/UIxCalWeekListview.m,
3766 UI/Scheduler/UIxCalInlineMonthOverview.m,
3767 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
3769 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3771 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3772 -appendPersonalSourcesInContext:context]): release connectoin
3773 channel when everything is done.
3775 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3776 -newAbAction]): new action method to crate a new contact folder
3779 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
3780 that requests the folder manager to create a folder table with the
3781 specified type at the specified path. The type is taken from [self
3784 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3785 -folderType]): implemented.
3787 * SoObjects/Appointments/SOGoAppointmentFolder.m
3788 ([SOGoAppointmentFolder -folderType]): implemented.
3790 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3791 -appendPersonalSourcesInContext:context]): we now fetch all
3792 folders with type "Contact" that belong to the current user.
3793 ([SOGoContactFolders -newFolderWithName:name]): new method to
3794 create a new contact folder.
3796 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
3797 resulting url with [NSString+Utilities hostlessURL] instead of
3798 using NSURL. This is because the url in question sometimes has a
3799 hostname and sometimes not. "hostlessURL" ensure the hostname is
3801 ([UIxComponent -applicationPath]): same as above.
3803 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
3805 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
3806 folders before doing the one on messages.
3808 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3810 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
3811 makeObjectsPerform:withObject:withObject: for GNUstep
3814 * OGoContentStore/GNUmakefile, Protocols/common.make,
3815 SoObjects/common.make, UI/common.make: install in
3816 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
3818 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
3820 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
3823 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3825 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
3826 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
3829 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3830 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
3831 password would be accepted anyway as long as its length was > 0.
3832 This can be the case ONLY when LDAP is disabled otherwise we have
3833 a serious security issue...
3835 * SoObjects/Appointments/SOGoAppointmentObject.m
3836 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
3837 user is not an organizer nor a participant, he is declared as
3838 "Owner" if he owns the calendar the entry where the entry is
3839 contained. Other cases should not be possible.
3841 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3843 * UI/Contacts/UIxContactEditor.m: display and handle the new
3846 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3847 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
3850 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3851 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
3854 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3856 * SoObjects/Appointments/SOGoCalendarComponent.m
3857 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
3858 returns the value of ud "SOGoAppointmentSendEMailNotifications"
3860 ([SOGoCalendarComponent
3861 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
3863 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3865 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3866 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
3867 so that the mailbox cache is refreshed everytime the user presses
3868 on "get mail". I doubt a mailbox cache really is useful in general
3871 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3873 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3874 -userInContext:]): if the lookup is on "freebusy.ifb" and the
3875 username is "anonymous" the user is automatically set to
3878 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3880 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3881 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
3882 user with password "freebusy".
3884 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
3885 -contentAsString]): the default timerange is now 14 days before
3886 currentday and 1 month after.
3888 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3890 * SoObjects/Appointments/SOGoAppointmentFolder.m
3891 ([SOGoAppointmentFolder
3892 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
3893 escape the record string in a way suitable with XML encoding.
3895 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3897 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
3898 calendar view would not be updated properly.
3900 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3902 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3903 -newStartDate]): fix the handling of the component start date
3904 depending on the "hm" and the "day" parameters.
3906 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3907 -roleOfUser:uidinContext:context]): set role of current user to
3908 "Assistant" if the object that is accessed is "freebusy.ifb".
3910 * SoObjects/Appointments/SOGoAppointmentFolder.m
3911 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
3912 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
3913 ([SOGoAppointmentFolder
3914 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
3915 lookupCalendarFolderForUID: method, which doesn't do security
3918 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3920 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
3921 accessor that returns the comma-separated list of users with role
3923 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
3924 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
3925 "checkedUsers". Instead, each user is either classified in the
3926 list of assistants or the list of delegates.
3928 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3930 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
3931 -composeAction]): method imported from removed container modules.
3932 ([UIxMailMainFrame -mailFolderName]): method imported from removed
3935 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
3936 for wrapping UIxMailView with the "popupview" action.
3938 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
3939 since its the component that displays the same splash screen than
3940 the one in Thunderbird/Icedove.
3942 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
3943 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
3944 UI/MailerUI/UIxMailListViewContainer.[hm],
3945 UI/MailerUI/UIxMailViewContainer.[hm]: removed
3947 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3949 * UI/WebServerResources/HTMLElement.js: replaced the functional
3950 selectNode() and deselectNode() functions with select() and
3951 deselect() methods of HTMLElement.
3953 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
3954 events are initialized from here now instead of in the HTML code.
3956 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3957 -checkRightsAction]): new method similar to the one with the same
3958 name in UIxCalMainView.m.
3960 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
3961 code to handle the publishing of freebusy information.
3963 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3965 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3966 -checkRightsAction]): new action method that returns a
3967 comma-separated list of boolean values matching the right of the
3968 current user to "view" (as a permission) each foreign calendar
3969 stored in his preferences.
3971 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
3972 new method that sets a customOwner, which can be returned with
3973 ownerInContext it set.
3975 * SoObjects/Appointments/SOGoAppointmentFolder.m
3976 ([SOGoAppointmentFolder
3977 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
3979 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3981 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
3982 below, but for the Contacts and Calendar collections.
3984 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
3985 new acl facilities method from sope-gdl/GCSFolder.m.
3987 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3988 -roleOfUser:uidinContext:context]): new method that returns
3989 SOGoRole_Assistant when the user is an assistant or a delegate on
3990 the "personal" ab object. This is so that setting roles on the
3991 SOGoContactFolders object is not required.
3993 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3995 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
3997 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
3998 to the handling of the user selection for the acls.
4000 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
4001 values from SoPermissions with ones specific to SOGo.
4003 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
4004 handles the storage for the acls.
4006 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
4007 class for SOGoAppointmentObject and SOGoTaskObject.
4009 * UI/Common/UIxAclEditor.[hm]: new component that provides a
4010 general editor for folder acls.
4012 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
4014 ([NSString -davMethodToObjC]): method that returns the method name
4015 for a DAV property implementation.
4017 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
4019 ([NSArray -stringsWithFormat:format]): new method that returns
4020 formatted occurences of the strings stored in the array.
4022 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
4023 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
4024 subclass module of SoWebDAVValue that supports collections of
4025 properties of the same type.
4027 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4029 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
4030 -lookupFolder:ofClassNamed:inContext:]): added the ability to
4031 configure the name of the SOGoDraftFolders with the ud var
4032 "SOGoDraftsFolderName".
4034 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4036 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
4037 -userTimeZone:username]): new method that returns the timezone for
4038 the specified user depending on his preferences and the server
4041 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
4042 -stringForData:partInfo:]): take the encoding into account and
4043 translate the text to "normal" before processing the charset data.
4045 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4047 * UI/WebServerResources/generic.js: the progress indicator is on
4048 when loading the page so we turn it off, and we turn it back on
4049 whenever we switch to another module...
4051 * UI/WebServerResources/SchedulerUI.js: make sure the day view
4052 synchronization mechanism works everywhere.
4054 * UI/WebServerResources/generic.js: the log window is not only
4055 visible when UIxDebugEnabled is set.
4057 * UI/WebServerResources/SchedulerUI.js: the month overview's day
4058 cells are now initialized with the DOM event interface methods
4059 instead of with html attributes.
4061 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
4062 headers (should be made configurable at some point)...
4064 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
4065 "not null" constraint on startdate, enddate, isopaque,
4066 participants and partmails.
4068 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4070 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
4071 -hoursToDisplay]): prevent a crash by retaining the
4072 "hoursToDisplay" array after it's created.
4073 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
4074 clickable hours DIV.
4076 * UI/WebServerResources/SchedulerUI.js: made the event
4077 participation status modification asynchronous, which also fixes a
4078 bug where the window would sometimes close before the accept or
4079 decline action was completed. Also, adapted the event handling
4080 related to the days or weeks view with the new DIV-based layout.
4082 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
4084 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
4085 DIV-based presentation of the days and weeks.
4087 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
4089 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
4090 might return an exception so we have to handle it if we don't
4093 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4095 * UI/WebServerResources/SchedulerUI.js: updated the list
4096 initialization code to use the new event management scheme, adding
4097 what was missing to be able to delete events and tasks again.
4099 * UI/WebServerResources/MailerUI.js: added code to activate the
4100 "Get mails" button. Fixed a bug which prevented messages to be
4103 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
4104 navigation and focus handling of INPUTs.
4106 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4108 * UI/WebServerResources/MailerUI.js: added code to handle the
4109 possible drag and drop events to manager in the mail module.
4110 Moving messages, opening parent folders, ...
4112 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
4113 the drag and drop manager as well as the interface to HTMLElement
4114 to trigger drag and drop events.
4116 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
4117 action to move the current message to the mailbox named after the
4118 value of parameter "tofolder".
4120 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
4121 -moveToFolderNamed:folderNameinContext:]): new method base on
4124 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4126 * UI/WebServerResources/generic.js: added and activated many
4127 "load" handlers to configure generic widgets used across the
4128 modules. More events are now handled in a DOM-fashion way instead
4129 of by setting the relative attributes in the templates.
4131 * UI/Templates/UIxSortableTableHeader.wox: all the events are
4132 declared from the javascript DOM onload handlers.
4134 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
4137 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
4138 declared from the javascript DOM onload handlers.
4140 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
4141 we want everything to be separated from each other, as much as
4144 * UI/WebServerResources/SOGoDragHandles.js: new module containing
4145 the "SOGoDragHandlesInterface", implementing methods that can be
4146 attributed to DIV so that they can be used as drag handles.
4148 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
4149 -asQPSubjectString]): initialize the tmp strings with '0' to make
4150 sure they don't contain garbage.
4152 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4154 * UI/WebServerResources/MailerUI.js: register the messageList
4155 table as a dragging source and the leaf of the navigation tree as
4156 dnd destinations to the DNDManager.
4158 * UI/WebServerResources/generic.js: initialize tabs from the
4159 "unload" event listener that is added programmatically instead of
4160 from the template... Also, added the new DNDManager object.
4162 * UI/WebServerResources/HTMLTableElement.js: added code to
4163 simulate XUL drag n drop events. This code will possibly be moved
4164 to HTMLElement.js instead later...
4166 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4167 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
4170 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4171 -_qualifierForFilter:filter]): only search records which starts
4172 with the specified pattern.
4174 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4176 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
4177 -asQPSubjectString]): new method that returns the special QP
4178 string with its qp declaration for email subjects.
4179 ([SOGoDraftObject -bodyPartForText])
4180 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
4181 double-encode data in UTF-8.
4183 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4184 -newStartDate]): new method to determine the start date depending
4185 on the URL parameters, the current day and the current time.
4186 ([UIxComponentEditor -toolbar]): new method to determine the
4187 filename of the toolbar that should be drawn depending on the
4188 ownership and the list of attendees of the task/event wrt to the
4191 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4192 -setDayStartHour:aStartHour]): adjust the minutes to the next
4193 quarter of hour, if not already set to a quarter.
4195 * UI/WebServerResources/UIxAppointmentEditor.js,
4196 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
4199 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4201 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4202 -loadValuesFromComponent:component]): handles access class
4203 (privacy) and status.
4205 * UI/Contacts/UIxContactsListViewContainer.m
4206 ([UIxContactsListViewContainer -additionalFolders]): return nil if
4207 [self additionalAddressBooks] returns an empty string.
4209 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4211 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
4212 rangesOf7Days]): enhanced and debugged algorithm to feed the array
4213 with slices where the first day is still in the requested month.
4215 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
4218 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
4219 of events in the day boxes of the calendar's monthly view.
4221 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
4222 -davContentType]): declare "text/calendar".
4224 * SoObjects/Appointments/SOGoAppointmentObject.m
4225 ([SOGoAppointmentObject -davContentType]): declare
4228 * SoObjects/Appointments/SOGoAppointmentFolder.m
4229 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
4230 HTTP methods are handled by SOPE and requires nil to be returned,
4231 this method now invokes the new
4232 "requestNamedIsHandledLater:inContext:" method to check that.
4233 ([SOGoAppointmentFolder
4234 -requestNamedIsHandledLater:nameinContext:context]): new methods
4235 that returns "YES" only for the "OPTIONS" http method (for now...).
4236 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
4237 overloaded method to append the "access-control" and
4238 "calendar-access" DAV abilities to the initial declaration.
4240 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
4241 imitate the look of Sunbird/Lightning's monthly view.
4243 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
4244 UIxCalMonthViewOld.[hm].
4246 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4248 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
4249 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
4251 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
4252 returns an image name based on the participation status of the
4255 * UI/WebServerResources/SchedulerUI.js: same strip down as for
4258 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
4259 ([UIxContactsListViewContainer -additionalFolders])
4260 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
4261 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
4262 methods to handle the external addressbooks a user has subscribed
4263 too, by retriving them from his preferences.
4265 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4266 -updateAdditionalAddressBooksAction]): new method that updates the
4267 user settings with the list of addressbook he has subscribed to.
4269 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
4270 module for the address book selector.
4272 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
4273 a toolbar with two buttons ("add" and "remove") to manage the
4274 additional addressbooks a user might subscribe to.
4276 * UI/WebServerResources/ContactsUI.js: added code to handle
4277 "external addressbooks" from the Javascript point-of-view, by
4278 extending existing methods and adding code for the "add ab" and
4279 "remove ab" buttons.
4281 * UI/WebServerResources/generic.js: moved extensions methods to
4282 DOM elements to separate files for better clarity.
4284 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
4285 new method that returns "pageContent" as class, but also "popup"
4286 for the DIV where the page content lies, so that we can manipulate
4287 the content of popup's with CSS identifiers.
4289 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4291 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4292 -displayStyle]): new method that returns a string containing the
4293 css style relative to the current appointment cell. This code is
4294 currently inactive but might be reused later.
4296 * UI/WebServerResources/SchedulerUI.js: added code to handle the
4297 display of the selected day (the day pointed by the mouse, or the
4298 current day when changing the view).
4300 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
4301 -dayCellClasses]): new method that returns a string containing the
4302 css classes applicable to the current cell, depending on the
4303 position of the day in the week, the day of today and the
4306 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
4307 -currentContactAptBorder]): new method that returns the
4308 appropriate border color for the specified user.
4310 * SoObjects/Appointments/SOGoAppointmentObject.m
4311 ([SOGoAppointmentObject
4312 -saveContentString:contentStringbaseVersion:baseVersion]):
4313 overloaded method that parse new events and detects if they have
4314 an organizer or not. If they are new and have no organizer set
4315 (Sunbird/Lightning...), the owner of the event is set as
4318 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
4319 category that provides facility methods and interfaces to the
4322 * SoObjects/Contacts/product.plist: give full access to ANY
4323 authenticated user, not just the owner (to every objects...).
4325 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4327 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
4328 every replica widgets are declared as such to their master
4329 counterpart. Take the days into account when displaying the time
4330 range taken by the appointment.
4332 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
4333 -getICalPersonsFromValue:selectorValue]): method taken from
4334 UIxFreeBusyUserSelector, that is shared both by
4335 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
4337 * SoObjects/Appointments/SOGoAppointmentFolder.m
4338 ([SOGoAppointmentFolder
4339 -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.
4341 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
4342 derived and taken as a subset of UIxFreeBusyUserSelector that
4343 implements the table part of the FreeBusy view. Most of the
4344 methods of UIxFreeBusyUserSelector relative to that table were
4345 moved into UIxFreeBusyUserSelectorTable, which can also be used as
4346 a standalone view for AJAX operations.
4348 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4350 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4351 -vCard]): change reverted.
4353 * UI/Contacts/UIxContactEditor.m: check whether the client contact
4354 folder has selector "globallyUniqueObjectId" before calling that
4357 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4358 -vCard]): the "setVClass" NGVCard method really is "setClass"
4361 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4362 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
4363 request the "streetAddress" instead of the "streetaddress".
4364 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
4365 mails that *contain*, and not just *start with* the search
4368 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4369 -vCard]): mark address returned from LDAP as the work address.
4371 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
4372 span covered with the anchor, not only the textual information
4375 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
4376 argument (event or task) to newEvent in the appointmentListMenu.
4377 Make the appointmentsListView display the appointmentsListMenu.
4379 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
4380 12 to 50 before displaying "...".
4381 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
4382 if its length > 0, whether location itself is nil or not...
4383 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
4384 of which the length > 0.
4386 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4388 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
4389 french and ISO dates.
4391 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
4392 from UIxContactSelector to handle contact lists (current and
4393 additional contacts).
4395 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4396 -_freeBusyAsText]): added handling of an "additional"-named query
4397 parameter that describe the number of additional days after
4398 enddate that should be returned.
4400 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4401 -_responseForResults:results]): give priority to results with
4402 "c_uid" fields. If none returned, use the first contact received.
4404 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4405 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
4406 2 and "CANCELLED" to 0.
4408 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4410 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
4411 of start and end dates to short string dates.
4413 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4414 -readFreeBusyAction]): new method that returns an array of numbers
4415 corresponding to the state in the freebusy of each "quarter of an
4416 hour" between the "sday" and "eday" date parameters passed in the
4417 url. This permits to handle the display of the freebusy with Ajax
4419 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
4420 since the free busy displays 2 days ahead.
4422 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4423 -contactSearchAction]): new action that returns the uid and the
4424 username + email of the user whose name contain the value of the
4425 "search" url parameter.
4427 * SoObjects/Appointments/SOGoAppointmentFolder.m
4428 ([SOGoAppointmentFolder
4429 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
4430 useful for the computing of the status of the freebusy.
4432 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
4433 -init]): new component that incarnates a user selector for events
4434 inspired by the new one found in Thunderbird Lightning.
4436 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4438 * UI/WebServerResources/generic.js: added code to enable or
4439 disable anchor visually (following our internal algorithm).
4441 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
4442 added new "url" ivar with its classic accessors.
4443 ([UIxComponentEditor -urlButtonClasses]): new method that returns
4444 the class strings for the url button on the appointment/task
4445 editor (depending on the validity of the url).
4447 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
4448 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
4449 the template to match the Lightning's new task/appointment editor.
4451 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
4453 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
4455 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4457 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4458 ([SOGoContactLDAPFolder
4459 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
4461 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
4462 iCalEntityObject instances instead of just iCalEvent's.
4464 * SoObjects/Appointments/SOGoAppointmentFolder.m
4465 ([SOGoAppointmentFolder
4466 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
4468 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
4469 bad way of handling ownership that way.
4471 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4472 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
4473 on "cn", just like Mozilla.
4475 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4477 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
4478 "to" should be retained, otherwise it will be autoreleased and a
4481 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4482 -writeAction]): updated method to fetch the card before initing
4485 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4486 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
4489 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
4490 -iCalStringTemplate]): start and due date are now optional.
4492 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4493 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
4494 appropriate accessors to be settable through the templates.
4496 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
4497 new "isDisabled" ivar with appropriate accessors to be
4498 settable through the templates.
4500 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4501 -availableCalendars]): new method that list the calendars to which
4502 the user has subscribed.
4503 ([UIxComponentEditor -componentOwner]): returns the owner of the
4506 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4507 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
4508 quickentries to null whenever each or all of them are null, by
4509 providing an impossible timestamp from with NSNotFound as value.
4511 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4513 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
4514 that handles the creation of new fields with the new APIs and the
4515 new node structure on the page.
4517 * UI/Scheduler/UIxAppointmentEditor.m,
4518 UI/Scheduler/UIxTaskEditor.m:
4519 refactored to user UIxComponentEditor as parent class.
4521 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
4522 containing the methods common to the UIxTaskEditor and the
4523 UIxAppointmentEditor.
4525 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4527 * SoObjects/Appointments/SOGoAppointmentFolder.m
4528 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
4529 the handling of time-ranges.
4531 * UI/WebServerResources/ContactsUI.js: specify a notification type as
4532 parameters when onConfirmContactSelection in invoked.
4534 * UI/WebServerResources/generic.js: specify a notification type as
4535 parameters when onContactRemove in invoked.
4537 * UI/WebServerResources/SchedulerUI.js: when the user deselects
4538 all calendars, select his entry.
4540 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4542 * UI/WebServerResources/SchedulerUI.js: edit and delete events
4543 with their owner-relative urls. Generate a correct entry in the
4544 css color table when a user is added to the calendars list. Put
4545 the same color next to the user id.
4547 * UI/WebServerResources/generic.js: implemented some new helper
4550 * SoObjects/Appointments/SOGoAppointmentFolder.m
4551 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
4552 entries if their owner is not the current user.
4554 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4555 -displayClasses]): return the correct class for the current event
4556 representation depending on its owner.
4558 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
4559 and associate a color for each user login depending on its
4560 position in the list.
4562 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
4563 -currentRowCSSClass]): return the correct class for the current
4564 row depending on the owner of the event.
4566 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4567 -setColors:colors]): new method to associate a color table with
4568 each user in the list.
4570 * SoObjects/Appointments/SOGoAppointmentFolder.m
4571 ([SOGoAppointmentFolder
4572 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
4574 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
4575 NSObject to associate an instance with a user.
4577 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4579 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
4582 * UI/WebServerResources/ContactsUI.js: added handling of
4583 notification of changes to contact selectors.
4585 * UI/WebServerResources/generic.js: added handling of notification
4586 of changes to contact selectors.
4588 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4589 -updateCalendarsAction]): proxy method to update the user
4590 preference table with the new selected calendar uids.
4592 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
4593 -calendarsContactsAction]): new method.
4595 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
4596 ([UIxContactSelector -setHasCheckBoxes:aBool])
4597 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
4598 permit the drawing of checkboxes instead of card icons.
4600 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
4601 wrap a selector the the "Calendars" tab.
4603 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
4604 new user calendar selector.
4606 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4608 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
4609 may cover hour 0 to hour 23.
4611 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4612 -iCalStringFromQueryParameter:format:]): dates explicitly set to
4615 * UI/WebServerResources/SchedulerUI.js: manage both lists of
4616 objects wrt to the toolbar actions.
4618 * UI/WebServerResources/generic.js: added code to the "String"
4619 class to decode number-encoded char entities.
4621 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4622 -batchDeleteAction]): new method to delete selected entries in the
4625 * SoObjects/Appointments/SOGoAppointmentFolder.m
4626 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
4627 that delete identified entries in batch.
4629 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4630 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
4632 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
4633 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4634 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
4635 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4637 return a UIxJSClose component if everything went fine.
4639 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
4642 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
4643 UIxAppointmentEditor.m.
4645 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
4646 a very light page with javascript code to close a window, by
4647 calling a method on the opener if specified. This component is
4648 designed to work as a response to form postings.
4650 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4652 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
4653 SOGoAppointmentObject adapted for the handling of tasks.
4655 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
4656 extracted from SOGoAppointmentObject.
4658 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4659 -saveUrl]): returns the url needed to POST the new form to.
4660 redirect the user to <aptid>/editAsAppointment instead of /edit,
4661 so that SOGoAppointmentFolder can return the correct object type.
4663 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
4664 -compareAptsAscending:_other]): accept empty start or end dates.
4666 * SoObjects/Appointments/SOGoAppointmentFolder.m
4667 ([SOGoAppointmentFolder
4668 -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.
4669 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
4670 components of type "vtodo" as well as "vevent".
4671 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
4672 url specified ends with AsTask or AsAppointment, returns the
4673 an object of the appropriate class, otherwise deduce it from its
4674 content if the HTTP method is "PUT", otherwise read its type from
4677 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4678 -extractQuickFieldsFromTodo:_task]): extract quick fields from
4681 * UI/Scheduler/UIxCalView.m ([UIxCalView
4682 -fetchCoreAppointmentsInfos]): replacement methods for
4683 fetchCoreInfos but by retrieving object with component "vevent".
4684 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
4687 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
4688 UIxCalAptListView adapted for the handling of tasks.
4690 * UI/Scheduler/UIxTaskProposal.[hm],
4691 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
4692 clones of the UIxAppointment* classes for the handling of tasks.
4694 * UI/WebServerResources/UIxTaskEditor.js: clone of
4695 UIxAppointmentEditor adapted for the handling of tasks.
4697 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
4698 Scroll the daily view to the appropriate hour when an appointment
4699 is selected in the appointments list.
4701 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4703 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4704 -setDayStartHour:aStartHour]): specifies the user timezone on the
4707 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
4710 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
4711 ([NSCalendarDate -driftedDate]): methods made useless by a better
4712 comprehension of the NSTimeZone API...
4714 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4716 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
4717 new methods from the NSCalendarDate methods.
4719 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
4720 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
4722 +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).
4723 ([NSCalendarDate -adjustedDate]): this method returns another
4724 instance set to the correct hour after the original date was set
4725 from a non-GMT timezone. This date can be used for storage.
4726 ([NSCalendarDate -driftedDate]): this method does exactly the
4727 opposite of -adjutedDate, that is, it enables the method
4728 hourOfDay, minuteOfHour etc... to return the values according to
4729 the original date's timezone. This date CANNOT be used for storage.
4731 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
4732 -shortDateString]): new method that will return a "short date
4733 string" (yyyymmdd) from a calendar date object.
4735 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4736 -_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.
4738 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
4739 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
4741 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4743 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
4744 view of the day at the height of hour 8:00.
4746 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
4747 ([UIxCalView -dayEndHour]): returns 24.
4749 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
4750 ([UIxContactFoldersView -newAction]): invoke
4751 _selectActionForApplication: on self with the proper attribute too.
4753 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
4754 we now use the action mechanism in UIxContactsListView to keep the
4755 same view for the contact selectors and the regular contact view.
4757 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
4758 UIxContactsListViewContainerBase.[hm]
4760 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
4762 * UI/WebServerResources/generic.js: generalized emailstring
4763 handling functions. Generalized address book access functions.
4765 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4766 -isPopup]): return YES if the "popup" query parameter is set.
4768 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4769 -defaultAction]): keep the url parameters when redirecting.
4770 ([UIxContactFoldersView -selectForSchedulerAction])
4771 ([UIxContactFoldersView -selectForMailerAction]): new action
4772 methods for the /scheduler-contacts and /mailer-contacts invocations.
4774 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
4775 newly available NSString+URL category.
4777 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
4778 -asURLParameters]): handle dictionary entries which could be
4779 instances of NSArray rather than NSString.
4781 * SoObjects/SOGo/NSString+URL.m ([NSString
4782 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
4783 ([NSString -urlWithoutParameters]): new method that returns the
4784 url without its parameters.
4786 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
4788 * SoObjects/SOGo/NSDictionary+URL.[hm],
4789 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
4791 * UI/WebServerResources/UIxMailEditor.js: add support for
4792 additions of different types (to, cc, bcc) of recipients from the
4795 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
4798 * UI/Contacts/UIxContactsMailerSelection.m,
4799 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
4800 UI/Contacts/UIxContactsSelectionView.m to provide a different set
4801 of widgets depending on the application invoking the contact list.
4803 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4805 * UI/WebServerResources/ContactsUI.js: hide the current contact
4806 whenever the user changes of contact folder.
4808 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
4809 now provided by the template when loading the page.
4811 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4812 -iCalPersonWithUid:uid]): new method taken from removed module
4815 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4817 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
4818 -categoriesAsString]): same as below.
4820 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
4821 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
4823 * SoObjects/Appointments/SOGoAppointmentObject.m
4824 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
4825 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
4828 * SoObjects/Appointments/SOGoAppointmentFolder.m
4829 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
4830 hackish test to detect whether the request concernes VEVENT's or
4831 anything else. Return events only in the former case.
4832 ([SOGoAppointmentFolder
4833 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
4834 c_name quickfield so that the calendar list can identify the
4835 appointments with their complete "filename".
4837 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
4838 groupsOfClass:fromSource: to parse the given vcalendar.
4840 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
4842 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
4844 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
4847 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
4849 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4851 * SoObjects/Appointments/SOGoAppointmentFolder.m
4852 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
4853 sensitive to the CalDAV method names.
4854 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
4855 "calendar-query" CalDAV method name.
4857 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
4858 code coming originally from MailerUI.js.
4860 * UI/WebServerResources/UIxContactEditor.js: imitate the
4861 Thunderbird address book by completing the display name with the
4862 content of the first and last name fields, until the display name
4863 is modified manually.
4865 * UI/WebServerResources/generic.js: added a "trim" method to the
4868 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4869 -displayName]): new method that returns the display name from "cn"
4870 or from the "displayName" key if found.
4872 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4873 -initSnapshot]): check if "[card n]" returns anything to avoid a
4876 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
4877 that returns an unparsed doctype definition for the pages.
4879 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4880 -vCard]): set the card's fn to attribute "displayName" if found
4883 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4885 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4886 -vCard]): handle the "streetAddress" and "l" fields.
4888 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
4889 header fields by converting the tables to DIVs and SPANs.
4891 * UI/WebServerResources/generic.css: attempted unification of font
4892 families and size across all the elements. changed the
4893 logConsole's "position" from "fixed" to "absolute" to avoid
4896 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4898 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
4899 empty the contact view when the current contact is being deleted.
4901 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
4902 parse the email field and provide the address full name if found
4903 as the "contactFN" parameter.
4905 * UI/WebServerResources/generic.js (openMailTo): do not give a
4906 name to the opened window so that serveral ones can be opened at
4909 * UI/MailPartViewers/UIxMailPartTextViewer.m
4910 ([UIxMailPartTextViewer -flatContentAsString]): override method by
4911 replacing carriage returns with "<br />" in the result string from
4912 super's implementation.
4914 * UI/Contacts/UIxContactView.m ([UIxContactView
4915 -_urlOfType:aType]): don't manage non-mailto urls through
4916 javascript, let the user decide what's best for him.
4918 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4919 -newAction]): transfer all the query parameters by using the
4920 "asURLParameters"'s result string from [self queryParameters].
4922 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4923 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
4924 query parameters and put their values (if any) into the snapshot.
4926 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
4927 carriage-returns to "<br />".
4928 ([UIxContactView -workCompany]): explicitly initialize company to
4929 nil if org is nil or empty.
4931 * UI/WebServerResources/UIxContactEditor.js: updated validation
4932 code after we added and renamed some fields.
4934 * UI/WebServerResources/ContactsUI.js: added code to cache contact
4935 cards and to handle card updates.
4937 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4939 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
4940 test the length of the returned string since they will never be
4943 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
4944 return self if the process went successful, returns an exception
4945 otherwise (and only otherwise...).
4947 * OGoContentStore/OCSContactFieldExtractor.m
4948 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
4949 adapted method to the new VCard api. Since the cards are stored in
4950 vcard format, we no longer deal with a dictionary but with a
4953 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4955 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
4956 return a string with a "mailto" url.
4957 ([UIxContactView -_urlOfType:aType]): generic method to return a
4958 url string with a html anchor pointing to it.
4960 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
4961 since subclass "UIxContactEditor" did nothing. Implemented code to
4962 display and modify the values parsed from the vcards, displayed in
4963 a way similar to the Thunderbird addressbook.
4965 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4966 -save]): new dummy method.
4968 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4969 -save]): made method void.
4971 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4973 * UI/Contacts/UIxContactView.m: added many wrapper methods to
4974 display blocks of data à la Thunderbird Addressbook. If data is
4975 available, those wrappers (around the NGVCard methods) will
4976 enclose the results in a proper HTML output with the correct label
4977 (if present), otherwise it will return an empty string.
4978 ([UIxContactView -vcardAction]): new action to return the contact
4979 as text/vcard (for exporting).
4981 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4982 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
4984 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4985 -vCard]): create a new NGVCard instance when no data is available
4987 ([SOGoContactGCSEntry -save]): save the vCard using the new
4988 "versitString" API method/message.
4990 * UI/Contacts/UIxContactView.h: separated interface from
4993 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
4994 views and display them beneath the list.
4996 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4998 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
4999 the timezone even when it's the server timezone.
5001 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5002 -privateContacts:inContext:]): no long configure the calendar
5003 object with the user's timezone since it's now accessible
5004 application-wide throught the SOGoObject methods.
5006 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
5007 method. Removed the "backendTimeZone" method.
5009 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
5010 instead of SoComponent.
5012 * SoObjects/Appointments/SOGoAppointmentObject.m:
5013 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
5014 [self serverTimeZone] instead of "EST" (which was removed).
5016 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
5017 "timeZone" ivar and its accessors.
5019 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
5020 centralized method returing the timezone configured in the
5021 userdefaults db or "Canada/Eastern" if missing.
5022 ([SOGoObject -userTimeZone]): new centralized method returing the
5023 timezone of the current user or the server timezone if missing
5024 from the user configuration table.
5026 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5028 * UI/WebServerResources/SchedulerUI.js: implemented caching of
5031 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
5032 return a path based on the object's context instead of the first
5033 level in SOGo's object hierarchy...
5035 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5037 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
5040 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
5041 timezone ([self viewTimeZone]) to the WEMonthOverview component to
5042 avoid a confusion with the days.
5044 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
5047 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
5048 imitate Sunbird's synchronization between the 3 visible views.
5050 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
5051 sure the numbers in dateString are formatted so as to take 4 chars
5052 for the year and 2 for the day and the month, otherwise
5053 NSCalendarDate will return a nil date.
5054 ([UIxComponent -applicationPath]): return a path based on the
5055 object's context instead of the second level in SOGo's object
5058 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5060 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
5061 user's timezone abbreviation to the date string passed as parameter to
5062 NSCalendarDate to generate an accurate date instance. Do the same
5063 when no date is specified and today is chosen.
5065 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
5066 form's time values to integers before comparing them.
5068 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
5069 ([UIxCalAptListView -currentEndTime]): initialize the resulting
5070 dates timezone with [self viewTimeZone].
5072 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
5073 "viewTimeZone" ivar destined to hold an instance of the user's
5075 ([UIxComponent -viewTimeZone]): take the timezone from the user's
5078 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5080 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
5081 rearranged the layout.
5083 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
5084 manage showing and hiding appointment details.
5086 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5087 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
5088 timezone by taking the current user's timezone setting.
5090 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
5092 * SoObjects/Appointments/SOGoAppointmentObject.m
5093 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
5094 set default timezone to EST, although this code should be
5095 rewritten to handle a system and a user default value.
5097 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
5098 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
5099 take the values from the hour and minute INPUTs when data is
5100 POSTed since we no longer use the UIxTimeSelector component.
5101 ([UIxTimeDateControl -selectableHours])
5102 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
5103 template SELECTs to display reasonable and acceptable values
5104 instead of all the possibilities.
5106 * UI/WebServerResources/generic.js: adapted code for the new
5107 implementation of the UIxContactSelector component (added a
5108 "remove" button, removed the previous INPUT and replaced them with
5109 links of class "button").
5111 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
5112 UIxTimeDateControl.m.
5114 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
5115 ([UIxCalDayTable -currentAppointmentHour]): new methods that
5116 returns correctly formatted values used as attributes for JS code.
5118 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
5119 -initialContactsAsString]): renamed implementation of
5120 initialParticipants.
5121 ([UIxContactSelector -currentContactId])
5122 ([UIxContactSelector -currentContactName]): new methods used when
5123 listing the initial contacts in the widget. Currently, both return
5124 the person's cn but the latter should ultimately return a user
5127 * UI/Contacts/UIxContactSelector.h: separated interface from
5128 UIxContactSelector.m.
5130 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
5131 all javascript code is now put in Scheduler.js/generic.js.
5133 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
5134 moved into NSCalendarDate+Scheduler instead.
5136 * SoObjects/Appointments/SOGoAppointmentFolder.m
5137 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
5138 configure the timezone from SOGoUserFolder when the instance is
5140 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
5141 the value of the new "timezone" ivar.
5143 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5145 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
5146 the date selector in the first page and the container of the
5147 future calendar selector in the second page.
5149 * UI/WebServerResources/generic.js: added code for handling tabbed
5152 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
5153 returns the bundle name associated to the current running product.
5155 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5157 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
5158 exception by invoking a timeout on the opener rather than invoking
5159 the list refresh method.
5161 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
5164 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
5165 ([UIxCalWeekView -prevWeekQueryParameters])
5166 ([UIxCalWeekView -nextWeekQueryParameters])
5167 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
5168 that return the dates relatively to the current day.
5169 ([UIxCalWeekView -lastWeekName])
5170 ([UIxCalWeekView -currentWeekName])
5171 ([UIxCalWeekView -nextWeekName])
5172 ([UIxCalWeekView -weekAfterNextWeekName])
5173 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
5174 methods that returns the label for the corresponding weeks.
5176 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
5177 used by UIxCalDayView and UIxCalWeekView to display the events
5178 occuring in one or more days.
5180 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5182 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
5183 entries in the new "monthMenu" and "yearMenu".
5185 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
5186 method to return the current day as a string formatted depending
5187 on the current locale.
5189 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
5190 ([UIxCalAptListView -endDate]): "today" is now the default filter
5191 for displayed events.
5192 ([UIxCalAptListView -currentSerialDay]): new method returning the
5193 date of the current enumerated appointment in serial form
5196 * UI/WebServerResources/SchedulerUI.js: added code to select the
5197 relevant day when an appointment is selected. Added code to popup
5198 a month and a year menu whenever the header entries are clicked in
5199 the calendar widget.
5201 * UI/WebServerResources/generic.js: made addClassName and
5202 removeClassName methods of HTMLElement.
5204 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5206 * UI/WebServerResources/MailerUI.js: fixed the contact creation
5207 from email addresses.
5209 * UI/WebServerResources/generic.js: centralized the search-related
5210 functions here since the same code was used across the 3
5213 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
5214 ([UIxCalAptListView -endDate]): return the required dates needed
5215 depending on the value given to the "filterpopup" url parameter.
5217 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
5218 code by invoking UIxComponent's labelForKey:.
5220 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
5221 [self pageResourceManager] instead of [self resourceManager].
5223 * UI/Contacts/UIxContactEditorBase.m: invokes
5224 globallyUniqueObjectId on the clientobject's class instead of the
5225 hardcoded "SOGoFolder".
5227 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
5228 -newAction]): redirect the "new" action to the personal (default)
5231 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
5232 +objectWithName:inContainer:]): new constructor.
5234 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
5235 -lookupContactWithId:recordId]): always create a contact object,
5236 even if it does not exist.
5238 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5240 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
5241 component that lays out the different components of SOGoCalendar.
5242 Only serves as an Objective-C counterpart to its xml template.
5244 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
5247 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
5248 display a widget to handle the information displayed in the
5249 appointments list. Not currently used, lacks implementation.
5251 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
5252 display a calendar as a dynamic widget from where one can select
5253 the current visible day.
5255 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
5256 extracted from UIxCalInlineMonthOverview.m.
5258 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
5259 calendarPageURL methods. The javascript code is handled by .js
5260 files as much as possible...
5262 * UI/WebServerResources/ContactsUI.js,
5263 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
5266 * UI/WebServerResources/SchedulerUI.js: implemented functions to
5267 handle the new widgets. XmlHTTPRequest code taken from
5270 * UI/WebServerResources/generic.js: put some functions related to
5271 element selections as methods to HTMLElement and HTMLTableElement.
5273 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
5274 display the list of appointments (embodies the code-size of
5275 UIxCalAptListView; answers to the "aptlist" method).
5277 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5279 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
5280 -correctURLAction]): new short action method replacing the method
5281 below by taking far less code.
5283 * SoObjects/Appointments/SOGoAppointmentFolder.m
5284 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
5285 with an action in the view-related code.
5287 * UI/Scheduler/UIxAppointmentEditor.m: invoke
5288 "stringByEscapingHTMLString" on the resulting value to avoid
5289 issues with accented characters.
5290 ([-jsCode]): removed method since the javascript code was merged
5291 into SchedulerUI.js.
5293 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5295 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
5296 new class method that returns an iCalPerson based on the UID given
5299 * UI/Contacts/UIxContactsListViewContainerBase.m:
5300 UIxContactsListViewContainer renamed to serve as a base class for
5301 the contact lists in both the contact editor and the contact
5304 * SoObjects/Contacts/SOGoContactLDAPFolder.m
5305 ([SOGoContactLDAPFolder
5306 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
5307 setUserIdentifier:setRootDN:]): an LDAP field specifying the
5308 loginname of the users can now be specified.
5310 * UI/WebServerResources/generic.js: added code to manage contact
5311 lists through the new implementation of the UIxContactSelector.
5313 * UI/Templates: put the templates related to SchedulerUI in its
5316 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
5317 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
5318 entry for "uid" with the field name representing the login name of
5319 the user in the corresponding LDAP branch.
5321 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5323 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
5324 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
5325 request is a PUT, always create an entry, even if we're not sure
5328 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5330 * UI/WebServerResources/ContactsUI.js: implemented live-search.
5332 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
5333 -appendSystemSourcesInContext:context]): populated method with
5334 code that creates entries mapped to instances SOGoContactFolder,
5335 based on the configuration found in the NSUserDefaults under the
5336 key "SOGoLDAPAddressBooks".
5337 ([SOGoContactFolders
5338 -lookupName:nameinContext:contextacquire:acquire]):
5339 "contactsources" do not exist anymore, SOGoContactFolder was split
5340 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
5341 and one protocol: SOGOContactFolder, instead.
5342 ([SOGoContactFolders -contactFolders]): new accessor used by the
5343 views of SOGoContactXXXFolder to list the possible sources.
5345 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
5346 defines the methods that UIxContactsView, ..Editor and so on...
5349 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
5350 defines the methods that UIxContactsListViewBase expects as well
5351 as the data fields returned in the contact lists.
5353 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
5354 returns entries an LDAP server. Conforms to the new
5355 SOGOContactFolder protocol.
5357 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
5358 returns a vCard based on contact entries from an LDAP server.
5359 Conforms to the new SOGOContactObject protocol.
5361 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
5362 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
5363 entry for the textual representation of the vCard.
5365 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
5368 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
5369 "SOGoContactObject".
5371 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
5372 method that generates a textual representation of the vcard.
5374 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
5376 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
5377 "SOGoContactFolder".
5379 * SoObjects/Contacts/SOGoContactSource.h,
5380 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
5383 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
5384 -singleAttributeWithName:key]): new method that returns the first
5385 object associated with an ldap key (where generally one value is
5388 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
5389 map the entry into an NSDictionary for processing by
5390 UIxContactsListViewBase.m with the least possible overhead.
5392 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
5395 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5397 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5398 -privateContacts:inContext:]): now returns an instance of
5401 * UI/Contacts/UIxContactsListViewContainer.m
5402 ([UIxContactsListViewContainer -contactFolderName]): new method to
5403 return the absolute path to the current contact folder, called
5404 from within the template.
5406 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
5407 JS code to initialize the 'currentContactFolder' generic var.
5409 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
5410 +contactFolderWithSource:inContainer:andName:]): new class
5411 method meant to return an instance connected to the specified
5412 source. Currently useless but won't be anymore in the next few
5415 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
5416 the "lookupFreeBusyObject" method since it does not exist.
5418 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
5419 as a "view" for the SOGoContactFolders object. Does nothing but
5420 redirect the browser to the URL of the personal address book of
5421 the user. It does not even have a template.
5423 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
5424 implementing the SOGoContactSource protocol. Does nothing
5425 currently but will be used to implement access to the personal
5426 address book of the user stored in the SOGo database.
5428 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
5429 protocol defining an API common to all possible types of contact
5432 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
5433 serving as the root of the contact folders available to the
5434 current user. Correctly lists the contact sources in webdav.
5436 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5438 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
5439 -composeAction]): new action method that permits external object
5440 to write a message from the default (primary) account.
5442 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5443 -initSnapshot]): new method with code taken from "defaultAction"
5444 but needed for others.
5445 ([UIxContactEditorBase -writeAction]): new action designed to
5446 compose the correct URL needed to obtain the MailerUI's email
5447 editor with the correct "mailto" parameter.
5449 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
5450 Common so that other modules can use it.
5452 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
5453 easier to manage both ajax and non-ajax requests.
5455 * UI/Contacts/UIxContactsFilterPanel.m: clone of
5456 UIxMailFilterPanel, but applicable to contact lists.
5458 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
5459 -vcardContentFromSOGoContactRecord]): use the new standard methods
5460 created for each type of entry. If a line is determined to not
5461 contain information, it will be skipped.
5463 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
5464 +initialize]): init defaultMailDomain with the user default
5465 "SOGoDefaultMailDomain".
5467 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5469 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5470 -saveAction]): reorganized methods to only have ONE return point.
5471 Invoke saveRecord: directly on the clientObject instead of
5472 saveContentString, which does the same thing anyway.
5474 * SoObjects/Contacts/NSDictionary+Contact.m
5475 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
5476 method to convert the dictionary returned with the user submission
5477 to a record in VCARD format to be stored in the database.
5479 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5481 * UI/WebServerResources/MailerUI.js: when opening the context menu
5482 of the message list, select the message below the mouse cursor and
5483 deselect the other selected messages temporarily. This mimics the
5484 behaviour of Thunderbird for that matter and was already
5485 implemented for the entries of the folder tree.
5487 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
5488 -iconForMenuItem]): new method that returns the fully qualified
5489 relative URL to the icon representing the mailbox, or the default
5490 mailbox icon if needed.
5492 * UI/SOGoUI/UIxComponent.m ([UIxComponent
5493 -urlForResourceFilename:filename]): automatically return an empty
5494 string whenever the filename passed as argument is nil.
5496 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
5497 "desc" parameter set to 1 so that they are sorted in descending
5498 order by default. Also, added "onHeaderClick()", triggered by
5499 clicking on the message list header elements.
5501 * UI/MailerUI/UIxMailSortableTableHeader.m
5502 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
5504 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5505 -isSortedDescending]): defaults to "YES" when the sort order is
5508 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5510 * UI/WebServerResources/MailerUI.js:
5511 - message cache: set the max num of cached messages to 20. Limit
5512 the cached message size to 30000 bytes.
5513 - ajax: when a message request is called while one is already
5514 being performed, the latter will be cancelled. Idem when
5515 retrieving the content of a mailbox.
5516 - folder tree: when a mailbox is selected because of the URL
5517 requested (initMailboxSelection), the dtree is expanded throughout
5518 the mailbox entry's parent hierarchy to ensure it is made visible
5519 when the page is being displayed. (new function: expandUpperTree).
5520 - mailbox loading: when loading a mailbox where a message was
5521 previously selected, we invoke its url with the "pageforuid"
5522 parameter correctly specified. During callback processing, we scan
5523 the table for the related row and reselect it.
5524 Also, the message area is set blank before loading any mailbox.
5526 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5527 -defaultAction]): if the "pageforuid" parameter is passed in the
5528 url, take its value and invoke [self firstMessageOfPageFor:]
5529 consequently to deduce the first message to display. Otherwise,
5530 set it to "idx", otherwise set it to 0.
5531 ([UIxMailListView -firstMessageOfPageFor:]): new method
5532 that determines the first message of the page where the message
5533 passed as parameter is contained.
5535 * UI/WebServerResources/UIxMailListView.js: removed this module,
5536 its code was put in MailerUI.js instead.
5538 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5540 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
5541 which returns the nodes for the parent specified in "parentMenu".
5542 Used to generate the javascript code for the folder dtree.
5544 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
5545 using that container-template are now using UIxMailMainFrame
5546 since UIxMailPanelFrame had no real interest. File removed.
5548 * UI/WebServerResources/dtree.{css,js}: new files to handle
5549 javascript-generated mailbox tree. Modified from original version
5550 by integrating the previous code with the one we are using for
5551 selections and mailbox handling. Minor visual enhancements too...
5553 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5555 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
5556 returned, put it in an NSArray before returning it (fixes
5559 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5561 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
5562 that returns a url string stripped from its "http://hostname"
5565 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
5567 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
5569 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5571 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
5572 -mailDateFormatter]): retrieve the timezone from the user settings
5573 and pass it to the returned dateFormatter. Also, the dateFormatter
5574 is kept in a static variable to avoid useless
5575 creations/destructions.
5577 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
5578 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
5580 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
5581 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
5582 s/Criteria/Text/ to handle the "criteria" form parameter.
5584 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5586 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
5587 to integrate better with the firefox look&feel. Added entries for
5588 the new "menu" DIV class (popup menus).
5590 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
5591 takes any chunk of text as param, detects the user email and the
5592 optional first and last names and return them in a well-formatted
5593 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
5594 namespace conflict. Added "onMenuClick(node, event, menuId)" to
5595 handle popup menus through "onclick" element attributes (node =
5596 this, event = event and menuId = name of the menu DIV id to
5599 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5600 -snapshot]): add an entry for "email" into the snapshot
5601 dictionary if a "contactEmail" URL parameter was detected and if
5602 the entry for "email" is empty.
5604 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
5605 button now invokes the newContact() js function in ContactsUI.js
5606 instead of opening "new" directly. newContact() pops up a window
5607 stripped from its navigation bar.
5609 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
5610 bundle (AddressBook).
5612 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
5613 "menu" and id "addressMenu" have the header email addresses
5614 display it with the new menu code in generic.js.
5616 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
5617 replaced the body tables with a div of class "pageContent"
5618 (standardization across the page templates).
5620 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
5621 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
5622 those are now inherited from UIxPageFrame.
5624 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
5626 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
5627 a "mailto" URL parameter is detected and the "to" array is empty,
5628 initialize "to" with the value of "mailto" before returning it.
5630 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
5631 -composeAction]): rewrote method in a cleaner way and with usage
5632 of the URL extensions to NSString and NSDictionary (see below).
5633 Also, if a "mailto" url parameter is detected, pass it to the
5636 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
5639 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
5640 returns a parameter string to add to a base URL.
5642 * UI/Common/NSString+URL.m ([NSString
5643 -composeURLWithAction:parameters:andHash:useHash]): new method to
5644 compose a complete URL from an object URL with parameters and an
5645 optional '#' character.
5647 * UI/Common/UIxPageFrame.h: separated interface from
5650 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
5652 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
5654 * UI/WebServerResources/generic.js: added code to manage
5655 selections within HTML containers.
5657 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
5658 added method to determine the possible URL for a product-specific
5659 javascript filename of the forme <productname>.js.
5660 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
5661 ([UIxPageFrame -isPopup]): new method to determine whether the
5662 application navigator bar should be displayed (main page) or not
5665 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
5666 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
5667 the user through LDAP.
5669 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5671 * The toolbar code from the MailerUI product was taken, renamed as
5672 "UIxToolBar" and put into UI/Common. Toolbar plists were created
5673 for the Contacts and Scheduler products and put in their respectir
5674 Toolbars/ subdirectories. Finally,
5675 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
5676 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
5677 and an invocation to the UIxToolbar component was put at the top
5678 of UI/Templaces/UIxPageFrame.wox.
5680 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
5681 within the templates whether a separator should be displayed.
5683 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
5684 that returns NO if the toolbar is empty.
5686 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5688 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
5690 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
5691 new toolbar objects.
5693 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
5695 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
5696 linkbanner as a DIV instead of a TABLE.
5698 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
5700 returns 'YES' to request the display of the navigation bar between
5703 2006-06-15 ludovic@inverse.ca
5705 * It's now possible to set the default
5706 domain using for email using the
5707 SOGoDefaultMailDomain preference key.
5709 2006-06-15 ludovic@inverse.ca
5711 * Initial import of SOGo from trunk.