1 2007-12-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3 * SoObjects/SOGo/NSScanner+BSJSONAdditions.m ([NSScanner
4 -scanJSONStringDelimiterString]): new category module taken from
7 * SoObjects/SOGo/NSDictionary+BSJSONAdditions.[hm]: new category
8 module taken from BSJSONAdditions 1.3.
9 http://blakeseely.com/downloads.html
11 2007-12-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
13 * SoObjects/SOGo/NSString+Utilities.m ([NSString
14 -stringByDetectingURLs]): we now go back until the real start of
17 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
18 -fetchAttachmentIds]): new method that wanders through the mail
19 structure to collect the attachment content ids and to associate
22 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
23 ([_UIxHTMLMailContentHandler
24 -startElement:_localNamenamespace:_nsrawName:_rawNameattributes:_attributes]):
25 the content-ids are now enclosed between "<>" before retrieval
26 from the attachment dictionary.
27 ([UIxMailPartHTMLViewer -cssContent])
28 ([UIxMailPartHTMLViewer -flatContentAsString]): the content-ids
29 are now fetch from the clientobject (an instance of
30 SOGoMailObject) with the new "fetchAttachmentIds" method.
32 2007-12-12 Francis Lachapelle <flachapelle@inverse.ca>
34 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
35 -eventsListAction]): added the state of the calendar's owner with
36 respect to the current event.
38 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
39 -_loadAttendees]): added the retrieval of attendees state on
42 2007-12-12 Ludovic Marcotte <ludovic@inverse.ca>
44 * UI/MailPartViewers/UIxMailRenderingContext.{h,m}
45 Removed template caching which added very little
46 and created re-entrant issues.
48 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
49 Added a hack (and stated so in the source file)
50 to avoid what seems to be a bug in libxml.
52 2007-12-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
54 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
56 ([SOGoContentObject -davLastModified])
57 ([SOGoContentObject -davContentLength]): implemented dav methods.
59 2007-12-10 Francis Lachapelle <flachapelle@inverse.ca>
61 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
62 -GETAction:]): when asAttachment is set to true, the header
63 "content-disposition" is set to "attachment" so browsers like IE
64 and Safari properly asks the user to save the file.
66 2007-12-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
68 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
69 ([UIxMailPartHTMLViewer -flatContentAsString]): when in
70 UIxMailPartAlternative, scan the filenames of potential cid at the
71 same level as our parent.
73 2007-12-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
75 * Main/SOGo.m ([SOGo -run]): the table creation script now have a
76 @{tableName} substitution variable to be substitued with the real
77 table name obtained from the configuration variables.
79 2007-12-07 Ludovic Marcotte <ludovic@inverse.ca>
81 * UI/MailPartViewers/UIxMailRenderingContext.m
82 We treat multipart/appledouble like multipart/mixed
83 for now. That allows the user to save both parts.
85 * Corrected typos in Localizable.string files.
87 2007-12-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
89 * UI/Common/UIxAclEditor.m ([-currentUserIsOwner]): replaced
90 method with -canModifyAcls that invokes the security manager
91 instead for the permission "SaveAcls" on the client object.
93 * SoObjects/Appointments/SOGoCalendarComponent.m
94 ([SOGoCalendarComponent -contentAsString]): securize the returned content.
95 ([SOGoCalendarComponent -aclsForUser:uid]): check whether the user
96 is an organizer or a participant as well.
98 * SoObjects/Appointments/SOGoAppointmentObject.m
99 ([SOGoAppointmentObject -changeParticipationStatus:_status]): the
100 user we should change the status of is not the active user but the
101 owner of the object. This is for delegation.
103 * SoObjects/Appointments/SOGoAppointmentFolder.m
104 ([SOGoAppointmentFolder -fetchContentObjectNames]): fetch the
105 elements through the fetchFields:from:to:title:component: method
106 method, so that the result is already filtered depending on the
109 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
110 -toolbar]): if the current user is a delegate, take the permission
111 "ModifyComponent" into account. Also, do not let him/her modify an
112 event for which he/she is the organizer.
114 * SoObjects/Contacts/SOGoContactLDAPFolder.m
115 ([SOGoContactLDAPFolder -davResourceType]): declared as a carddav
116 addressbook collection.
118 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
119 -davResourceType]): declared as a carddav addressbook collection.
121 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davLastModified]):
122 override SoObject's implementation. Otherwise a localized date is returned.
124 * UI/Common/UIxPageFrame.m ([UIxPageFrame -isCalendar])
125 ([UIxPageFrame -isContacts], [UIxPageFrame -isMail]): getters to
126 determine which module is the current one.
128 2007-12-06 Francis Lachapelle <flachapelle@inverse.ca>
130 * UI/Scheduler/NSArray+Scheduler.m ([NSArray -compareEventsTitleAscending:otherEvent])
131 ([NSArray -compareEventsLocationAscending:otherEvent])
132 ([NSArray -compareEventsEndDateAscending:otherEvent])
133 ([NSArray -reversedArray]): new methods that sort an array of
134 events depending of various parameters.
136 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
137 -eventsListAction]): added support for sorting events.
139 2007-12-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
141 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction])
142 ([UIxMailEditor -sendAction]): make sure that the attachments
143 having the same filename are correctly sequenced (ex: base.ext,
144 base-1.ext, base-2.ext).
146 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
147 -fetchBLOB]): added support for quoted-printable decoding. Also,
148 we return nil if the type is not supported.
150 2007-12-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
152 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -newAction]):
153 create task obejcts with the .ics extension.
155 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
156 -newAction]): create appointment objects with the .ics extension.
158 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -newAction]):
159 create objects with the .vcf extension.
161 * Main/NSException+Stacktrace.m: added missing symbols from
162 NSException.m and NSDebug.m (GNUstep).
164 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
165 -foldersSearchAction]): make use of the new search methods in
166 SOGoUserFolder (see below).
168 * UI/Contacts/UIxContactFoldersView.m ([-foldersSearchAction]):
169 moved method into ../MainUI/SOGoUserHomePage.m.
171 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
172 -foldersOfType:folderTypeforUID:uid]): only return folders owned
173 by the specified user.
175 2007-12-05 Francis Lachapelle <flachapelle@inverse.ca>
177 * SoObjects/Mailer/SOGoDraftObject.m: the condition for replyToAll
178 has to be done later to avoid duplicated to and cc addresses.
180 2007-12-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
182 * SoObjects/Appointments/SOGoAppointmentFolder.m
183 ([SOGoAppointmentFolder -davCalendarQuery:queryContext]): fixed a leak.
185 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder -davSubscribe:localContext])
186 ([SOGoGCSFolder -davUnsubscribe:localContext]): subscribe an
187 unsubscribe from DAV-based accesses. We could be compatible with
188 Microsoft's extensions but we have no need for a "subcription id",
189 so we implement our own.
191 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
192 -POSTAction:localContext]): new method to intercept DAV POSTs,
193 which we now use to implement certain custom commands such as
194 "subscribe" and "unsubscribe".
196 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
197 -davNamespaces]): declare the
198 "urn:inverse:params:xml:ns:inverse-dav" xml ns.
199 ([SOGoUserFolder -foldersOfType:folderTypeforUID:uid]): new method
200 designed to replace the UIxContactFoldersView.m mechanism for
201 displaying folders to subcribe to, as a common code base for both
202 Web and DAV-based subscriptions.
203 ([SOGoUserFolder -foldersOfType:typematchingUID:uid]): same as
205 ([SOGoUserFolder -davCollectionQuery:queryContext]): new method
206 that implement a custom DAV-based protocol query for querying
207 folder based on specified attributes.
209 2007-12-03 Ludovic Marcotte <ludovic@inverse.ca>
211 * Main/NSException+Stacktrace.{h,m} - new files
212 to handle automatic stack trace generation
213 upon an uncaught exception.
215 * Updated the templates and Localizable.string files
216 to fix typos and add new strings.
218 * SoObjects/Mailer/SOGoMailBodyPart.m
219 Fixed attachment retreival when the first character
222 * SoObjects/SOGo/SOGoGCSFolder.m
223 Fixed the sending of emails when folders are created/removed.
224 Notifications are sent if the defaults SOGoFoldersSendEMailNotifications
227 * UI/Common/UIxUserRightsEditor.m
228 * UI/Templates/SOGoACLEnglishModificationAdvisory.wox
229 * UI/Templates/SOGoACLFrenchModificationAdvisory.wox
230 * UI/Templates/SOGoACLGermanModificationAdvisory.wox
231 Added the capabilities to email notifications when ACLs have
232 changed on a DAV collection or an IMAP mailbox. Also added
233 new templates (3 .wox) to deal with this.
235 * UI/WebServerResources/ContactsUI.js
236 UI/WebServerResources/SchedulerUI.js
237 Added warnings on operations w/o selection.
239 2007-11-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
241 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
242 -appendSubscribedSources]): don't include sources for which we
243 don't have the SOGoPerm_AccessObject permission.
245 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
246 -rfc822DateString]): we want positive timezones to be specified
247 with a leading "+" too.
249 2007-11-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
251 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
252 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
253 return nil if the subscribed folder has no display name (meaning
254 it no longer exists).
256 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
257 -appendPersonalSources]): don't include sources which are no
260 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
261 -ocsPathOfContainer]): return the intended value, not that of
264 * SoObjects/Appointments/SOGoCalendarComponent.m
265 ([SOGoCalendarComponent -sendResponseToOrganizer]): send the
266 message only of sendEMailNotifications is set.
268 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -subscriptionRoles]):
269 new method that returns the roles that qualifies for adding the
270 special "authorized subscribed" sogo role.
272 2007-11-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
274 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
275 -aclsForUser:uid]): copy all the roles from the container. If the
276 object is new, make sure the roles contain "ObjectEditor" if and
277 only if "ObjectCreator" is present.
279 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
280 -aclsForUser:uid]): no longer take the "ObjectReader" role into
283 * UI/Common/UIxFolderActions.m ([UIxFolderActions
284 -canAccessContentAction]): always return HTTP status 204. We want
285 this because we are relying on the SOPE access control manager to
286 grant access to this method. This requires a fine-tuned access
287 control in SOGo itself...
289 * UI/Contacts/UIxContactsUserRightsEditor.m ([-userCanReadObjects])
290 ([-setUserCanReadObjects:userCanReadObjects]): removed methods.
292 * UI/MailerUI/UIxMailUserRightsEditor.m ([UIxMailUserRightsEditor
293 -updateRights]): no longer take the "ObjectReader" role into account.
294 ([-userCanReadMails], [-setUserCanReadMails:userCanReadMails]):
297 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
298 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): specify context
299 when looking up the Calendar folder.
301 2007-11-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
303 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): same as below.
305 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
306 -event]): create the event if it doesn't exist.
308 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -userHasCalendarAccess])
309 ([UIxPreferences -userHasMailAccess]): same as below, for
310 displaying preference tabs.
312 * UI/Common/UIxPageFrame.m ([UIxPageFrame
313 -userHasCalendarAccess]): new accessor for the link banner.
314 ([UIxPageFrame -userHasMailAccess]): same as above.
316 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
317 -toManyRelationshipKeys]): do not report the path to modules to
318 which the user has no access. No longer cache this information
319 statically, the array will be generated at each call.
320 ([SOGoUserFolder -lookupName:_keyinContext:_ctxacquire:_flag]):
321 ignore the path to modules to which the user has no access.
323 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -canAccessModule:module]):
324 new method that returns whether the user has access to the
327 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
328 -initFromUDSource:udSource]): take a new parameter named
329 'ModulesContraints' that defines a set of constraints for
330 accessing specified named modules. This is an optout, meaning the
331 modules will be present unless a constraint is specified.
333 * SoObjects/Appointments/SOGoAppointmentFolder.m
334 ([SOGoAppointmentFolder
335 -roleForComponentsWithAccessClass:accessClassforUser:uid]): cache
336 acl to reduce method calls.
337 ([SOGoAppointmentFolder
338 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
339 if the user is not the current user, we strip the useless info
342 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
343 -labelForKey:key]): new category method.
345 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
346 -event]): same as below.
348 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): request a
349 secured version of the component.
351 * UI/MailPartViewers/UIxMailPartViewer.m
352 ([-fallbackStringEncoding]): removed method.
353 ([UIxMailPartViewer -flatContentAsString]): we no longer use [self
354 fallbackStringEncoding]. Instead we directly specify
355 NSISOLatin1StringEncoding if UTF-8 has failed.
357 * UI/MailPartViewers/UIxMailPartICalViewer.m
358 ([-fallbackStringEncoding]): removed method.
360 2007-11-25 Ludovic Marcotte <ludovic@inverse.ca>
362 * SoObjects/Mailer/SOGoMailForward.m
363 Use [sourceMail decodedSubject] instead of [sourceMail subject]
364 Signature fix in -signature - see the comment
367 * SoObjects/Mailer/SOGoMailObject.m
368 Improved -stringFromData: to try UTF-8 then fallback to Latin1
370 * SoObjects/Mailer/SOGoMailReply.m
371 Modified -messageBody to strip the signature from the reply.
372 Also modified -signature to add "-- \n%@" instead of the
373 broken ""--\r\n%@" pattern.
375 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m
376 We now favor text/calendar parts over text/html and
377 text/plain parts when viewing a multipart/alternative mail.
378 This allows us to show the email invitations coming from
381 * UI/MailerUI/UIxMailAccountActions.m
382 Signature fix in -composeAction - see the comment
385 * UI/MailPartViewers/UIxMailPartViewer.m
386 Modified -flatContentAsString to use UTF-8 as the
387 default fallback encoding for 8-bit content.
389 * SoObjects/Mailer/SOGoDraftObject.m
390 Modified _fillInReplyAddresses:replyToAll:envelope:
391 so that if there's no recipient, we add at least
393 Fixed a mem leak in the same method.
395 2007-11-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
397 * UI/MailPartViewers/UIxMailRenderingContext.m
398 ([UIxMailRenderingContext -viewerForBodyInfo:_info]): same as below.
400 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
401 -plainTextContentFetchKeys]): same as below.
403 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
404 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): accept the
405 application/ics type from Google Calendar.
407 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
408 +distantFuture]): rewrote method to return an object that is
409 compatible with NSCalendarDate, unlike the implementation in
411 ([NSCalendarDate +distantPast]): same as above.
413 2007-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
415 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: fixed infinite loop
416 when charset is us-ascii, match it to ascii rather than none.
418 * SoObjects/Appointments/SOGoAppointmentFolder.m
419 ([SOGoAppointmentFolder
420 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
421 added search on the c_title column too.
423 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
424 -eventsListAction]): take the "search" url parameter into account.
425 ([UIxCalListingActions -eventsListAction]): fetch events matching
426 the title filter too.
428 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -connectAction]): the
429 user infos are now posted as "application/x-www-form-urlencoded".
430 So we have to have like a form has been posted.
432 2007-11-21 Francis Lachapelle <flachapelle@inverse.ca>
434 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
435 -calendarList]): also returns the calendar of the current
436 event. This is required so the proper calender is selected when
437 you view an event to which you don't have write access.
439 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
440 also returns true for super users.
442 2007-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
444 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
445 -lookupImap4BodyPartKey:inContext:]): return a correct body part
446 when "0" is requested, taking its mime-type into account.
448 * UI/MailPartViewers/UIxMailRenderingContext.m
449 ([UIxMailRenderingContext -flatContentForPartPath:_partPath]):
450 return content for part "0", which would be the message body.
452 2007-11-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
454 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
455 ([_UIxHTMLMailContentHandler
456 -setContentEncoding:newContentEncoding]): new method that
457 specifies an xml charset to return to the parser.
458 ([UIxMailPartHTMLViewer -flatContentAsString]): specifies the
459 charset to the content handler before parsing.
461 * SoObjects/Appointments/SOGoAppointmentObject.m: don't take an
462 empty c_name as a valid response when looking up an event. Create
463 one in that case instead.
465 2007-11-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
467 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -signature]):
468 returns the signature for the default identity of the default
470 ([UIxPreferences -setSignature:newSignature]): accessor that sets
471 the default signature.
473 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
474 -composeAction]): append the message signature to the new draft.
476 * SoObjects/Mailer/SOGoMailReply.m ([SOGoMailReply -signature]):
479 * SoObjects/Mailer/SOGoMailForward.m ([SOGoMailForward
480 -signature]): new method that takes the user's signature and put
481 it at the end of the message, if exists.
483 * UI/Common/UIxPageFrame.m ([UIxPageFrame -isSuperUser]): new
484 accessor that forwards the call to the active user.
486 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -signature]): returns the
487 user default signature.
488 ([SOGoUser -isSuperUser]): declares whether the user is listed
489 among the super users.
491 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
492 -setComponent:newComponent]): retain the component object.
493 ([UIxComponentEditor -organizerIdentity]): new accessor method to
494 handle list of possible organizers.
496 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
497 -event]): retain the returned event object.
499 * SoObjects/Appointments/SOGoAppointmentObject.m
500 ([SOGoAppointmentObject -saveComponent:newEvent]): reset the
501 organizer only if there are no attendees AND the owner of the
502 component is not the organizer him-/herself.
504 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
505 -toolbar]): rewrote in a way that ensures that each case is
508 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -isEqual:otherUser]): new
511 * UI/Scheduler/UIxTaskEditor.m ([-acceptAction])
512 ([-declineAction]): commented out unused methods.
514 * UI/MailPartViewers/UIxMailPartICalActions.m
515 ([UIxMailPartICalActions -deleteFromCalendarAction]): actually
516 delete the found object.
518 2007-11-18 Ludovic Marcotte <ludovic@inverse.ca>
520 * SoObjects/Mailer/SOGoMailBodyPart.m
521 SoObjects/Mailer/SOGoMailObject.m
522 UI/MailPartViewers/UIxMailPartViewer.m
523 Added support of messages containing non-textual
524 content and no parts.
526 * UI/MailerUI/UIxMailView.m
527 SoObjects/Mailer/SOGoMailObject.m
528 UI/Templates/MailerUI/UIxMailView.wox
529 Added support for the Reply-To header upon
532 2007-11-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
534 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]):
535 invoke saveComponent:.
537 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -hasOrganizer])
538 ([UIxComponentEditor -organizerName]): new template accessor
539 related to displaying the event's organizer.
540 ([-containsConflict:_component]): removed method.
541 ([UIxComponentEditor -takeValuesFromRequest:_rqinContext:_ctx]):
542 set RSVP to "TRUE" on each attendee.
544 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
545 -saveAction]): invoke saveComponent:.
547 * UI/MailPartViewers/UIxMailPartICalViewer.m
548 ([UIxMailPartICalViewer -isLoggedInUserTheOrganizer]): make use of
549 the -userIsOrganizer: category method.
550 ([-isLoggedInUserAnAttendee]): make use of -userIsParticipant:.
551 ([UIxMailPartICalViewer -hasSenderStatusChanged]): new template
552 accessor that determines whether the "Update" button should be
555 * UI/MailPartViewers/UIxMailPartICalActions.m
556 ([UIxMailPartICalActions -deleteFromCalendarAction]): implemented
558 ([UIxMailPartICalActions -updateUserStatusAction]): implemented
561 * UI/Common/UIxPageFrame.m ([UIxPageFrame
562 -setCssFiles:newCSSFiles]): new accessor that enables the
563 sub-templates to specify extra CSS files to load.
565 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
566 -homeFolderInContext:context]): cache the home folder of the user
567 object instead of the current user.
569 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
570 -deleteEntriesWithIds:ids]): invokes the "prepareDelete" optional
571 method if the child object implements it.
573 * SoObjects/SOGo/SOGoContentObject.m ([-setContentString:])
576 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
577 -setBaseDN:newBaseDNIDField:newIDFieldCNField:newCNFieldUIDField:newUIDFieldmailFields:newMailFieldsandBindFields:newBindFields]):
578 take a new "mailFields" parameter defining an array of fields
579 where to look at when searching the user's emails. It defaults to
580 the standard "mail" LDAP field.
582 * SoObjects/Appointments/SOGoAptMailICalReply.[hm]: new
583 SoComponent implementing a template for ITIP replies.
585 * SoObjects/Appointments/iCalPerson+SOGo.m ([iCalPerson
586 -mailAddress]): new method that returns a properly formatted email
587 address for the specified person entry.
588 ([iCalPerson -uid]): new method that tests whether the user is
589 known to the system and if so, returns its user id.
591 * SoObjects/Appointments/iCalPerson+SOGo.[hm]: new category module.
593 * SoObjects/Appointments/iCalEventChanges+SOGo.m
594 ([iCalEventChanges -sequenceShouldBeIncreased]): determine whether
595 the changes involved need a sequence inscrease, based on the
598 * SoObjects/Appointments/iCalEventChanges+SOGo.[hm]: new category
601 * SoObjects/Appointments/iCalEvent+SOGo.m ([iCalEvent
602 -isStillRelevant]): new overriden method determining the relevance
603 of the current event based on its end date.
605 * SoObjects/Appointments/iCalEvent+SOGo.[hm]: new category module.
607 * SoObjects/Appointments/iCalEntityObject+SOGo.m
608 ([iCalEntityObject -attendeeUIDs]): new category methods that
609 returns an array containing the uids of the system-know attendees.
610 ([iCalEntityObject -isStillRelevant]): new template method.
611 ([iCalEntityObject -itipEntryWithMethod:method]): clone the
612 current entry calendar with the specified ITIP method.
613 ([iCalEntityObject -attendeesWithoutUser:user]): returns an array
614 of attendees while making sure the specified user is not listed.
616 * SoObjects/Appointments/SOGoCalendarComponent.m
617 ([SOGoCalendarComponent -calendar:create:secure]): new name for
618 -calendar:. Added a "secure" parameter that specifies whether a
619 stripped calendar instance is needed or not. Also, we no longer
620 cache the content to simplify handling of new data.
621 ([SOGoCalendarComponent -component:create:secure]): same as above.
622 ([SOGoCalendarComponent
623 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
624 test whether the component is "still relevant" before sending an
626 ([SOGoCalendarComponent -sendResponseToOrganizer]): new method for
627 sending ITIP replies.
628 ([SOGoCalendarComponent -getUIDsForICalPerson:iCalPerson]):
629 removed method. Replaced with -[iCalPerson uid] category method.
631 * SoObjects/Appointments/SOGoAppointmentObject.[hm]: rewrote
632 class. No longer override saveContentString:,
633 saveContentString:baseSequence:, .... Implemented the
634 saveComponent: and the prepareDelete methods instead. Those
635 methods are called only from the web methods. This avoids the
636 risks related to email sending and changes propagation.
638 * UI/Common/UIxTabItem.m: removed useless class module.
640 * UI/Common/UIxTabView.[hm]: removed useless class module.
642 * UI/Common/UIxPrintPageFrame.m: removed useless class module.
644 * UI/Common/UIxAppNavView.m: removed useless class module.
646 2007-11-16 Ludovic Marcotte <ludovic@inverse.ca>
648 * SoObjects/Mailer/SOGoMailBaseObject.m
651 * SoObjects/Mailer/SOGoMailBodyPart.m
652 We also grok image/jpeg and return the SOGoMailBodyPart
653 for attachments fetching.
655 * SoObjects/Mailer/SOGoMailObject+Draft.m
656 Prevent a crash in case body decoding failed during
659 * SoObjects/Mailer/SOGoMailObject.m
660 Improved body decoding during a reply to also try
661 latin1 as an encoding.
663 * UI/MailPartViewers/UIxMailRenderingContext.m
664 Greatly improved the display mechanisms for emails.
665 Also properly consider the content disposition for
668 * UI/MailerUI/UIxMailToSelection.m
669 Removed worthless code.
671 * UI/WebServerResources/MailerUI.css
672 CSS fix for table views.
674 2007-11-15 Ludovic Marcotte <ludovic@inverse.ca>
676 * UI/WebServerResources/MailerUI.js
677 We now check for empty selection and warn the
678 user about it when deleting messages
680 * SoObjects/Mailer/SOGoDraftObject.m
681 Correctly check for the presence of a subject
682 before attempting to forward a message from
685 * SoObjects/Mailer/SOGoMailObject+Draft.m
686 We no longer use "[Fwd: ]" but simply "Fwd:"
687 when forwarding email messages.
689 * SoObjects/SOGo/SOGoUser.m
690 Modified the default forwarding format to be
691 inline instead of "attachment".
693 * SoObjects/Mailer/SOGoDraftObject.m
694 We now create and use a NGMimeContentDispositionHeaderField
695 in order to avoid encoding the whole Content-Disposition
696 header in case a non-ASCII char is present!
698 2007-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
700 * SoObjects/SOGo/iCalEntityObject+Utilities.m ([iCalEntityObject
701 -findParticipant:user]): new method based on the one removed from
702 SOGoCalendarComponent below.
704 * SoObjects/SOGo/iCalEntityObject+Utilities.[hm]: new category
705 module for iCalEntityObject.
707 * SoObjects/Appointments/SOGoCalendarComponent.m
708 ([-findParticipant:user]): removed method.
710 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
711 -setContentString:newContent]): new accessor method.
713 -saveContentString:newContentbaseVersion:newBaseVersion]): invoke
714 -[self setContentString:].
716 * UI/MailPartViewers/UIxMailPartICalViewer.m
717 ([UIxMailPartICalViewer -authorativeEvent]): returns the most
719 ([-isLoggedInUserTheOrganizer]): make use of -[SOGoUser
722 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
723 -stringByConvertingCRLNToHTML]): fixed crashes due to overflows in
724 temporary buffer we are handing.
726 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
727 -setComponent:newComponent]): check that newComponent is non-nil
728 before replacing the default values.
729 ([UIxComponentEditor -calendarList]): privacy is already an ivar.
730 We don't need to refetch it.
732 2007-11-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
734 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
735 -fetchMailForReplying:sourceMailtoAll:toAll]): remove the current
736 user from the list of recipients and make sure no other address is
739 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
740 -stringByConvertingCRLNToHTML]): build the returned NSString
741 without the ending \0.
743 2007-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
745 * UI/MailPartViewers/UIxMailPartICalViewer.m
746 ([UIxMailPartICalViewer -acceptLink])
747 ([UIxMailPartICalViewer -declineLink])
748 ([UIxMailPartICalViewer -tentativeLink]): removed useless methods.
750 * UI/MailPartViewers/UIxMailPartICalAction.m
751 ([UIxMailPartICalAction -addToCalendarAction])
752 ([UIxMailPartICalAction -deleteFromCalendarAction]): new stub
755 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
756 -lookupImap4BodyPartKey:]): make use of the new method below.
758 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
759 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): new method
760 that returns an appropriate Class depending on a given mime type.
762 * UI/SOGoUI/UIxComponent.m ([UIxComponent -canCreateOrModify]):
763 new boolean accessor that determines whether someone can create
764 (i.e. modify a new entry) or modify an existing entry.
766 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
767 -lookupName:lookupNameinContext:localContextacquire:acquire]):
768 overriden method to bind looked up keys to So methods but by
769 avoiding a call to toOneRelationshipKeys. This will be the top
770 method of the chain, meant to override SoObject's behaviour.
772 * SoObjects/Contacts/SOGoContactLDAPFolder.m
773 ([SOGoContactLDAPFolder
774 -lookupName:objectNameinContext:lookupContextacquire:acquire]):
775 removed hack to prevent [super lookupName...] to read the entire
776 LDAP directory when looking up a record.
778 2007-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
780 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
781 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
784 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
785 ([UIxMailPartHTMLViewer -_attachmentIds]): the reference was one
786 character too short, which cause the images not to be displayed
787 sometimes and crashes to happen whenever the references on a
788 message were wrong (due to bugs in SOPE).
790 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
791 -hasMessageAttachment]): consider an attachment any content that
792 has a non-nil disposition.
794 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
795 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
796 fixed method to make use of the parameters instead of the useless
797 remains that weren't even initialized.
799 * SoObjects/Appointments/SOGoAppointmentObject.m
800 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
801 don't propagate the event among the attendees if this is not an
803 ([SOGoAppointmentObject -deleteWithBaseSequence:]): same as above.
805 * Main/SOGo.m ([SOGo -authenticatorInContext:context]): make use
806 of the new category method below.
808 * SoObjects/SOGo/WORequest+SOGo.m ([WORequest
809 -handledByDefaultHandler]): new method that returns whether this
810 is an "so" or alike request.
812 * SoObjects/SOGo/WORequest+SOGo.[hm]: new category module.
814 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
815 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
816 write the new folder's name in the folder cache.
818 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
819 -calendars]): same as below.
821 * UI/Contacts/UIxContactsListViewContainer.m
822 ([UIxContactsListViewContainer -currentContactFolderName]):
823 translate the display name if its the default one.
825 * SoObjects/Appointments/SOGoAppointmentFolder.m
826 ([SOGoAppointmentFolder -create]): overriden method that invokes
827 its ancestor and then activate itself within the user settings.
829 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
830 -appendPersonalSources]): when the user is the owner of the
831 current folder, we create the "personal" folder if it doesn't
832 exist by invoking "create".
834 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
835 -primaryFetchProfile]): when no row is returned, we initialize
836 "values" to a new dictionary. This solves a bug where the defaults
837 would not be initialized properly.
839 2007-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
841 * SoObjects/SOGo/SOGoGCSFolder.m ([-compare:otherFolder]): method
842 moved into the SOGoFolder class.
844 * SoObjects/Appointments/SOGoAppointmentObject.m
845 ([SOGoAppointmentObject -saveContentString:_iCalinUIDs:_uids]):
846 simplified method by directly building a similar appointment
847 object with the current folder as container.
849 * SoObjects/Contacts/SOGoContactLDAPFolder.m
850 ([SOGoContactLDAPFolder
851 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
852 take the content of an object returned by
853 lookupName:inContext:acquire: instead of the dictionary passed as
854 parameter since it represents a flattened entry return by
855 lookupContactsWithFilter...
857 * SoObjects/Contacts/SOGoFolder+CardDAV.m: NSObject+CardDAV
858 category renamed to SOGoFolder+CardDAV.
860 * SoObjects/SOGo/SOGoParentFolder.m: no longer a subclass of
861 SOGoObject, but of SOGoFolder instead.
863 * SoObjects/SOGo/SOGoUserFolder.m: no longer a subclass of
864 SOGoGCSFolder, but of SOGoFolder instead.
866 * SoObjects/Appointments/SOGoAppointmentFolder.m
867 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): fixed
868 to take the new SOGoParentFolder class into account. Also, create
869 the personal folder if it doesn't exist.
871 * SoObjects/SOGo/SOGoFolder.[hm]: new class module implementing
872 the parent of all SOGo containers.
874 * SoObjects/SOGo/SOGoGCSFolder.[hm]: SOGoFolder class renamed to
877 2007-11-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
879 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection
880 -getAddressesFromFormValues:_dict]): take NSString and NSArray
881 values. Ignore addresses with a length of 0.
883 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -mailAccounts]): we now
884 fetch the accounts from the user defaults and create default
887 2007-11-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
889 * UI/MailPartViewers/UIxMailPartTextViewer.m
890 ([UIxMailPartTextViewer -flatContentAsString]): re-added
891 conversion of line-break to sequences of HTML "BR", with a fast
894 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
895 -flatContentAsString]): simplified method now that we know
896 -[NSString stringWithData:usingEncodingNamed:] has a more robust
899 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
900 -showToAddress]): the answer is cached.
902 * UI/Common/UIxObjectActions.m ([UIxObjectActions +initialize]):
903 read "SOGoACLsSendEMailNotifications" from the user defaults to
904 determiner whether to send an email when a user is added or
905 removed from an object's acl.
907 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
908 -contentForEditing]): make sure the htmlContent flag is set to NO
909 when we select the textual part. Also we select only the relevant
912 * UI/MailerUI/WOContext+UIxMailer.m ([-mailSubjectFormatter]):
915 * UI/MailerUI/UIxMailView.m ([UIxMailView -messageSubject]): new
916 method replacing -objectTitle, written like the ones below.
918 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
919 -messageSubject]): rewrote method to act the one below.
921 * UI/MailPartViewers/UIxMailPartMessageViewer.m
922 ([UIxMailPartMessageViewer -messageSubject]): new method that
923 returns the decoded mail subject or "Untitled" if the subject is
926 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
927 -decodedSubject]): new method that invoke -decodedSubject from the
928 NSString and NSData class, depending on the identity of the
929 subject obtained from the envelope.
931 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
932 -subjectForReply]): take the value of -[SOGoMail decodedSubject]
933 instead of the subject of the envelope.
934 ([SOGoMailObject -filenameForForward]): same as above.
935 ([SOGoMailObject -subjectForForward]): same as above.
937 * SoObjects/Mailer/NSString+Mail.m ([NSString -decodedSubject]):
938 same as below for NSString.
940 * SoObjects/Mailer/NSData+Mail.m ([NSData -decodedSubject]): new
941 method that decodes the subject of a mail taken as an NSData
942 instance. Handling the exceptions and the badly formatted headers.
944 * UI/MailerUI/UIxSubjectFormatter.[hm]: dropped class module.
946 2007-11-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
948 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
949 -deleteEntriesWithIds:ids]): make sure the objects returned by
950 lookupName:... are not instances of NSException.
952 2007-11-03 Ludovic Marcotte <ludovic@inverse.ca>
954 * UI/Scheduler/UIxAppointmentEditor.m
955 Fixed monthly recurrences support.
957 2007-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
959 * SoObjects/Appointments/SOGoAppointmentObject.m
960 ([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
961 sent when modifying an event, when the event was considered
962 relevant. The same thing is now implemented for event deletion.
964 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
965 -primaryFetchProfile]): make sure that the deserialized "values"
966 is an instance of NSMutableDictionary, otherwise we override it
969 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
970 -contentForReply]): make use of the SOGoMailReply WO page.
972 * SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
973 from SOGoMailForward to handle mail replies instead. Only three
974 methods remaining: date, from and messageBody. The latter is
977 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
978 -fetchMailForForwarding:sourceMail]): fetch attachments for
981 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
982 -hasMessageAttachment]): initialize hasAttachment with "NO" to
983 avoid false positives.
985 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
986 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
987 set title to an empty string where the event/task summary is null.
989 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
990 -setHeaders:newHeaders]): make sure there is a message id in the
991 headers dictionary, if not, generate one.
992 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
993 message id from the existing draft.
994 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
995 message id in the header map.
997 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
998 -deleteFolderAction]): no longer prefix the target folder with
1001 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1002 -listMailboxesAction]): base the folder type on the folder
1005 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1006 -lookupName:_keyinContext:acquire:_acquire]): compare the full
1007 traversal to the potential looked up folder with the special
1008 folder names and return an object with the appropriate
1009 SOGoMailFolder subclass.
1011 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1012 -traversalFromMailAccount]): don't prepend the whole string with
1015 * SoObjects/Mailer/SOGoMailAccount.m
1016 ([-lookupSentFolder:_keyinContext:_ctx])
1017 ([-lookupDraftsFolder:_keyinContext:_ctx])
1018 ([-lookupTrashFolder:_keyinContext:_ctx])
1019 ([-lookupFiltersFolder:_key:_ctx]): removed methods.
1020 ([SOGoMailAccount -inboxFolderNameInContext:])
1021 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1022 ([SOGoMailAccount -sentFolderNameInContext:])
1023 ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
1024 the resulting name with "prefix" since we might return a nested
1026 ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
1027 names with "/". Sorts the resulting folder list with
1028 localizedCaseInsensitiveCompare: instead of
1029 caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
1030 that were removed, instead, we choose the appropriate class
1031 depending on the folder name. And since we are in SOGoMailAccount,
1032 we don't have to compute a traversal path to match the key with
1035 -folderWithTraversal:traversalandClassName:className]): new method
1036 that returns an instance of the specified SOGoMailFolder subclass,
1037 based on the traversal path passed as parameter.
1038 ([SOGoMailAccount -inboxFolderInContext:_ctx])
1039 ([SOGoMailAccount -draftsFolderInContext:_ctx])
1040 ([-sentFolderInContext:_ctx])
1041 ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
1042 -folderWithTraversal:andClassName: method described above.
1044 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1045 -primaryFetchProfile]): make use of -[NSPropertyListSerialization
1046 propertyListFromData:mutabilityOption:format:errorDescription:] to
1047 deserialize the plist. Removed variant for libFoundation since it
1048 should support the above.
1049 ([AgenorUserDefaults -generateSQLForInsert])
1050 ([AgenorUserDefaults -generateSQLForUpdate]): make use of
1051 -[NSPropertyListSerialization
1052 dataFromPropertyList:format:errorDescription:] to serialize the
1053 plist. Removed variant for libFoundation since it should support
1054 the above. Escape the backslashes from the resulting string.
1056 2007-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1058 * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
1059 SOGoMailFolder: SOGoMailSpecialFolder.
1061 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1062 -traversalFromMailAccount]): overridden method that returns the
1063 initialized mutable string.
1064 ([SOGoMailAccount -allFolderPaths]): take the special folder paths
1065 with -traversalFromMailAccount and reposition them at the
1066 beginning of the list. By creating the special folders during that
1067 request, we also make sure that the folder exists thanks to the
1068 new initialisation method of the new "SOGoSpecialMailFolder"
1070 ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
1072 ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
1074 ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
1075 longer use lookupImap4Folder.
1076 ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
1079 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1080 -traversalFromMailAccount]): new method that returns the full
1081 IMAP4 path to the object.
1083 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
1084 "superUsernames" after fetching it from the ud.
1086 2007-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1088 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1089 -eventsListAction]): substitude the start and end date with their
1090 UTC counterpart, taking into account the offset from UTC related
1091 to those dates instead of the current one. This renders
1092 -[UIxCalMainView -userUTCOffset] obsolete because the computings
1093 that occured in javascript are now done server-side.
1095 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
1096 removed obsolete method.
1098 * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
1099 method converting html content to plain text.
1101 * SoObjects/Mailer/NSString+Mail.[hm]: new category module
1102 enhancing NSString with utility methods pertaining to mail handling.
1104 * SoObjects/Mailer/SOGoMailObject.m
1105 ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
1107 -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
1108 modified method to be always recursive and to take an array of the
1109 accepted mime-types as parameter. The returned array now contains
1110 the mime-type as well as the part keys.
1112 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1113 -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
1114 ([SOGoMailObject -contentForEditing]): rewrote method to take into
1115 account the first text/plain part or the first text/html part
1116 converted to text/plain with our new -[NSString htmlToText]
1119 * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
1120 "replyToAll:" with YES as parameter instead of NO.
1122 2007-10-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1124 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1125 -davContentType]): ignore any possible parameter taken from the
1126 mime-info of the body part.
1128 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1129 -lastFirstMessageNumber]): new accessor that returns the first
1130 message number of the last series of messages.
1131 ([UIxMailListView -fetchKeys]): request the bodystructure for each
1133 ([UIxMailListView -hasMessageAttachment]): extract the attachment
1134 information from the message bodystructure.
1136 2007-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1138 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1139 -GETAction:]): use the "application/octet-stream" mime type for
1140 elements of type "application/x-xpinstall" to avoid confusing
1143 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
1144 ([UIxPreferences -itemMessageCheckText])
1145 ([UIxPreferences -userMessageCheck])
1146 ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
1147 methods for handling the retrieval of new messages automatically.
1149 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
1150 that returns the interval of time between automatic message
1153 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1154 -defaultAction]): now expunges the last folder marked for expunge.
1156 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1157 -trashInContext:_ctx]): now marks the container folder for
1160 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1161 -markForExpunge]): new method that marks the folder for the next
1162 automatic expunge operation in the user settings.
1163 ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
1164 takes the last folder marked for expunge, expunges it and removes
1165 it from the user settings, if it exists.
1167 2007-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1169 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1170 -messageSubjectCellStyleClass]): added support for replied,
1171 forwarded, forwarded and replied mails.
1173 * SoObjects/Mailer/NSData+Mail.m ([NSData
1174 -bodyDataFromEncoding:encoding]): new utility method that decodes
1175 the NSData instance properly depending on the encoding string
1176 passed as parameter.
1178 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1179 -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
1181 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1182 -stringForData:_datapartInfo:_info]): simplified by invoking
1183 -bodyDataFromEncoding: from our new NSData category methods.
1185 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1186 -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
1187 where only the body part of the first of the keys fetched was
1188 returned. Also decodes the body parts properly following their
1191 * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
1192 extends the NSData class with utility methods useful for handling
1195 2007-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1197 * SoObjects/SOGo/NSArray+Utilities.m
1198 ([NSArray -stringsWithFormat:format]): replace instances of NSNull
1201 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1202 -keysWithFormat:keyFormat]): replace instances of NSNull with
1205 * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
1206 empty, use "c_cn" instead.
1208 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1209 ([SOGoMailAccount -draftsFolderInContext:_ctx])
1210 ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
1211 of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
1212 no always be specified from the root instead of sometimes from the
1215 2007-10-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1217 * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
1218 ([UIxPageFrame -productLocalizableStrings]): invoke the new
1219 +[SOGoUser language] method if the user is nil.
1221 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
1222 that returns any generically-found language.
1223 ([SoUser -language]): modified to call the above.
1224 ([SOGoUser -language]): modified to call the above if the user
1225 language has a null length.
1227 * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
1228 -davEntityTag]): modified to return the "hash" of the vCard string.
1230 * UI/MailerUI/UIxMailActions.m ([UIxMailActions
1231 -removeAllLabelsAction]): new method that removes all label flags
1232 from the associated message.
1233 ([UIxMailActions -addLabel1Action]
1234 [UIxMailActions -addLabel2Action]
1235 [UIxMailActions -addLabel3Action
1236 [UIxMailActions -addLabel4Action]
1237 [UIxMailActions -addLabel5Action]): new methods that adds label
1238 flags to the associated message.
1239 ([UIxMailActions -removeLabel1Action]
1240 [UIxMailActions -removeLabel2Action]
1241 [UIxMailActions -removeLabel3Action
1242 [UIxMailActions -removeLabel4Action]
1243 [UIxMailActions -removeLabel5Action]): new methods that removes
1244 label flags from the associated message.
1246 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
1247 new accessor that returns the labels associated with the message.
1249 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1250 -allFolderPaths]): new method that returns all the paths of all
1251 the subfolders of the folder object.
1252 ([SOGoMailFolder -allFolderURLs]): new method replacing
1255 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1256 -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
1257 role from its parent folder.
1259 2007-10-19 Francis Lachapelle <flachapelle@inverse.ca>
1261 * SoObjects/SOGo/SOGoUser.m
1262 ([SOGoUser -rolesForObject:objectinContext:context]): allow
1263 multiple super usernames to be defined. The user default
1264 SOGoSuperUsername is renamed SOGoSuperUsernames and must be
1267 2007-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1269 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1270 -userInContext:]): override the super method by returning
1271 anonymous if the super returns nil.
1273 * UI/Common/UIxPageFrame.m ([UIxPageFrame
1274 -productLocalizableStrings]): new method that returns the
1275 product-specific translation dictionary as a JSON hash.
1276 ([UIxPageFrame -commonLocalizableStrings]): same as above but for
1277 the "Common" framework.
1278 ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
1279 the requestor components to require additional Javascript files.
1280 This is useful now that all the scripts are loaded at the end of
1282 ([UIxPageFrame -additionalJSFiles]): new getter related to the
1285 2007-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1287 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
1288 implemented new web method.
1290 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1291 -copyToFolderNamed:folderNameinContext:]): new method with the
1292 code cut/pasted from -moveToFolderNamed:inContext:.
1293 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
1294 modified to use the code from -copyToFolderNamed:inContext:, which
1295 is common between the two actions.
1297 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1298 ([SOGoMailAccount -sentFolderNameInContext:])
1299 ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
1300 the user settings into account.
1302 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
1303 ([UIxMailFolderActions -setAsSentFolderAction])
1304 ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
1305 that change the purpose of the active folder to "Sent", "Drafts"
1308 * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
1309 returns the subject as quoted-printable.
1311 * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
1312 SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
1313 the "aclMethod" method for the subsequent language-dependent
1316 * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
1317 returns the subject as quoted-printable.
1319 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1320 -dealloc]): release item, aptStartDate and aptEndDate.
1322 2007-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1324 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1325 -initWithName:newNameinContainer:newContainer]): the owner of a
1326 shared folder is set to "nobody" by default.
1328 * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
1329 that returns whether the object has an owner or not.
1331 2007-10-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1333 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1334 the folder even if the current user is not its owner.
1336 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
1338 * We now send advisory emails when folders
1339 are created / deleted.
1341 * Fixed the sending of advisory emails upon
1342 ACL changes on folders.
1344 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
1346 * UI/Scheduler/UIxComponentEditor.m
1347 Implemented event/task priority support.
1349 * SoObjects/Contacts/SOGoContactGCSFolder.m
1350 Added CardDAV support.
1352 * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
1353 Implemented From: based on LDAP results based on
1354 the MailFieldNames attribute (an array) specified
1355 in every LDAP-based authentication sources.
1357 * UI/MailPartViewers/UIxMailPartTextViewer.m and
1358 UI/WebServerResources/MailerUI.css
1359 We avoid replacing "\r\n" and "\n" with <br /> and
1360 rather use CSS capabilities for proper formatting.
1361 This is _WAY_ faster on very large mails.
1363 2007-10-10 Francis Lachapelle <flachapelle@inverse.ca>
1365 * UI/Scheduler/UIxComponentEditor.m
1366 ([UIxComponentEditor -componentCalendar]): returns the calendar
1367 object of the current event.
1369 2007-10-05 Ludovic Marcotte <ludovic@inverse.ca>
1371 * UI/WebServerResources/MailerUI.js
1372 We check if at least one message is selected
1373 before performing a Reply/Reply All/Forward
1375 * SoObjects/Appointments/SOGoAppointmentFolder.m
1376 and others - implemented support for recurring
1377 events (with some known limitations right now,
1378 all soon to be fixed).
1380 2007-10-04 Francis Lachapelle <flachapelle@inverse.ca>
1382 * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
1383 the constraint that a username can't start with a digit.
1385 2007-10-02 Francis Lachapelle <flachapelle@inverse.ca>
1387 * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
1388 repository to Inverse's branch.
1390 2007-09-28 Francis Lachapelle <flachapelle@inverse.ca>
1392 * SoObjects/Mailer/SOGoDraftObject.m
1393 ([SOGoDraftObject -isValidAttachmentName:_name]): removed
1394 constraint on space in file name.
1395 ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
1396 now removes from file name all characters preceding a backslash.
1397 This happens with IE7 because the complete attachment file path
1400 2007-09-25 Francis Lachapelle <flachapelle@inverse.ca>
1402 * SoObjects/Appointments/SOGoAptMailNotification.m
1403 ([SOGoAptMailNotification -appointmentURL]): set personal as the
1404 default calendar where to add the event.
1406 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1407 activate the SOGoUIxDefaultModule user defaults.
1409 2007-09-21 Francis Lachapelle <flachapelle@inverse.ca>
1411 * UI/SOGoUI/UIxComponent.m
1412 ([UIxComponent -shortUserNameForDisplay]): returns the string
1413 "wrongusernamepassword" when authentication failed.
1415 2007-09-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1417 * UI/MailPartViewers/UIxMailPartICalViewer.m
1418 ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
1419 entry of the Calendars parent folder.
1421 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1422 -messageSubject]): new accessor method to work-around a problem
1423 within SOPE where a subject could be returned as an NSData.
1425 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1426 -appendPersonalSources]): make sure the value of the "c_path4" of
1427 the returned rows are not NSNull, otherwise, discard them.
1429 2007-09-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1431 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1432 -compare:otherFolder]): new overriden method that compares two
1433 contact foldes based on their class and then transfer the control
1434 to the super method in SOGoFolder.
1436 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1437 ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
1438 compare two contact folders based on their class and then their
1441 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
1442 new method for sorting folders. The folders are compared based on
1443 their ownership, whether they are a main folder and finally
1444 depending on their display name.
1446 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1447 -pathArrayToSOGoObject]): do not reorder the paths if the third
1448 element is an instance of NSNull.
1450 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1451 -subFolders]): returns a sorted array using the "compare:"
1454 2007-09-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1456 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1457 -calendars]): also returns the owner of the listed folders.
1459 * SoObjects/Appointments/SOGoAppointmentFolder.m
1460 ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
1462 * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
1463 method into UIxFolderActions.
1465 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1466 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
1467 freebusy info from the "personal" calendar.
1469 * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
1470 -createFolderAction]): new standardized method for requesting
1471 folder creations among gcs-based modules.
1473 * UI/Common/UIxParentFolderActions.[hm]: new action class module.
1475 * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
1476 module, equivalent to the SOGoParentFolder's child
1477 SOGoContactFolders, but for calendars.
1479 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
1480 method that returns translated strings for controller bundles
1481 (same as what UIxComponent does for view bundles).
1482 ([SOGoObject -pathArrayToSOGoObject]): new method that returns
1483 the real path to a subscribed folder (if subscribed).
1484 ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
1485 ([SOGoObject -globallyUniqueObjectId]): new instance method
1486 calling its class equivalent.
1488 2007-09-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1490 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
1491 whether the user is logged in and if so, redirect to his/her
1493 ([SOGoRootPage -appendToResponse:inContext:]): removed useless
1496 2007-09-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1498 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1499 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1501 ([SOGoFolder -displayName]): new method.
1502 ([SOGoFolder -delete]): accept to proceed only if nameInContainer
1505 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1506 ([SOGoContactLDAPFolder
1507 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1508 renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
1510 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1511 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1512 removed method, reimplemented in SOGoFolder.
1513 ([SOGoContactGCSFolder -displayName]): removed method,
1514 reimplemented in SOGoFolder.
1515 ([-delete]): removed method, modified in SOGoFolder.
1517 * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
1518 a subclass of SOGoParentFolder.
1520 * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
1521 from SOGoContactFolders and modified to be more content-independent.
1523 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
1524 ([UIxMailActions -markMessageReadAction]): new methods moved from
1525 UIxMailListView and adapted to invoke the client object directly,
1526 since the previous versions had to to a lookup from the parent
1529 * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
1530 method into UIxMailActions.
1531 ([-markMessageReadAction]): same as above.
1532 ([-viewAction]): removed useless method.
1533 ([-javaScriptOK]): removed useless method.
1534 ([-isJavaScriptRequest]): removed useless method.
1535 ([-lookupActiveMessage]): removed useless method.
1537 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1538 -responseWithStatus:status]): new method that returns a WOResponse
1539 initialized with the specified status code.
1540 ([WODirectAction -responseWith204]): new method that invokes the
1541 above one with "204" as parameter.
1542 ([WODirectAction -redirectToLocation:newLocation]): rewrote method
1543 to make use of -responseWithStatus:.
1545 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
1546 method that returns a WOResponse initialized with the 204 status
1549 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
1550 always use a "not deleted" search qualifier along with the user
1551 qualifier (if present).
1553 2007-09-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1555 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1556 -contactSearchAction]): only return the records which have an
1559 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1560 -trashInContext:_ctx]): no longer expunge the mailbox after
1561 marking a message deleted.
1562 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
1565 * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
1566 ([-trashAction]): moved method into UIxMailActions.
1567 ([-moveAction]): moved method into UIxMailActions.
1569 2007-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1571 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1572 ([_UIxHTMLMailContentHandler
1573 -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
1574 comments from the CSS code, do not add the CSS code to the body
1575 content and remove references of body from the CSS declarations.
1576 ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
1577 ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
1578 common with cssContent in a different method and invoke it only
1581 * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
1582 instead of UIxPageFrame.
1584 2007-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1586 * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
1587 ([-appendToResponse:responseinContext:ctx]): commented out.
1588 ([SOGoRootPage -connectURL]): new accessor that returns the full
1589 url the the "connect" method.
1590 ([-connectAction]): rewrote method to return a properly formatted
1591 auth. cookie based on the username and password passed as
1594 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1595 set the value of the cookie to "discard" and set its expiration
1598 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1599 -preprocessCredentialsInContext:context]): consider the user
1600 anonymous if the cookie value is "discard".
1601 ([SOGoWebAuthenticator
1602 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1603 set the expiration date of the cookie to yesterday.
1605 * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
1606 returns the path to the application if the clientObject is not a
1609 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
1610 moved the requirement of authentication from the SOGo application
1613 * SoObjects/Appointments/SOGoAppointmentObject.m
1614 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
1615 check whether the new appointment object is still relevant before
1616 sending a notification.
1618 2007-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1620 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1621 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1622 render the login page through the SoDefaultRenderer.
1624 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
1625 -isPublicInContext:localContext]): new overriden method that
1628 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1629 -currentCalendarLogin]): replace css-unsafe characters with _.
1631 * UI/SOGoUI/UIxComponent.m ([UIxComponent
1632 -shortUserNameForDisplay]): simplified method.
1633 ([-user]): removed method since [context activeUser] is as useful.
1635 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1637 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1638 set the cookie path to "/".
1640 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
1641 authenticator based on the request handler key. "dav" returns the
1642 SOGoDAVAuthenticator, anything else returns the Web authenticator.
1644 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
1645 "SOGoAuthenticator".
1647 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
1648 implementing a subclass of SoCookieAuthenticator, designed for
1649 web-based cookie authentication of users.m
1651 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1652 new method that resets the authentification cookie.
1654 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1656 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
1657 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
1658 didBind to NO to make sure no false authentication is returned if
1659 the bind operation is not executed.
1661 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1663 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
1664 "In-Reply-To" header field when replying.
1666 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
1667 table field names that are queried.
1669 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1670 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
1671 add the "c_" prefix to the quick table field names that are
1674 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1676 * SoObjects/Appointments/SOGoAppointmentFolder.m
1677 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
1678 "personal" to the ocs path of the appointment folder.
1680 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1681 -flatContentAsString]): use latin1 when the encoding is not
1682 specified, and to reencode data chunk which were not correctly
1683 decoded with the original charset.
1685 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
1686 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
1687 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
1688 ([SOGoAppointmentFolder
1689 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
1690 override those methods to use the "personal" additional directory.
1692 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
1693 append "/personal" to the calendar path to simulate a single
1694 calendar in a choice of many.
1696 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1697 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
1698 methods back here. Moved the folder existence check here, and do
1699 it on self only when the lookup happens for a non-folder object.
1700 This permits to accept entries for folders with parents who
1703 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1705 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1706 -shouldTakeValuesFromRequest:requestinContext:context]): same as
1709 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1710 -shouldTakeValuesFromRequest:requestinContext:context]):
1711 redesigned method since any method called can be received from a
1712 POST or a GET. Instead we check the method call itself and we
1713 accept only if it has the "save" prefix.
1715 * SoObjects/Appointments/SOGoAptMailNotification.m
1716 ([SOGoAptMailNotification -getSubject]): returns the subject an a
1717 quoted-printable encoded string, if needed.
1719 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1720 -asQPSubjectString:encoding]): moved method into
1721 NSString+Utilities.m.
1723 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1725 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1726 -messageForwardingList])
1727 ([UIxPreferences -itemMessageForwardingText])D
1728 ([UIxPreferences -userMessageForwarding])
1729 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
1730 new template methods for manage the user preference regarding
1733 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
1734 algorithm to return, in order, the user's defined language or the
1735 first browser language or, finally, the default language.
1736 ([SOGoUser -messageForwarding]): new method that returns the user
1737 preference for message forwarding: "inline" or "attached",
1738 defaulting to "attached".
1740 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1741 -contentForInlineForward]): new method that returns the content of
1742 the message for inline forwarding based on the SOGoMailForward
1745 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1746 -fetchMailForForwarding:sourceMail]): check the user preference
1747 for message forwarding and compose inline forwarded messages if required.
1749 * SoObjects/Appointments/SOGoCalendarComponent.m
1750 ([SOGoCalendarComponent
1751 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1752 now use a template based on the language returned from the
1755 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
1756 a subclass of SOGoMailForward for English locale.
1758 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
1759 a subclass of SOGoMailForward for French locale.
1761 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
1762 helps build template for inline forwarded messages.
1764 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1766 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
1767 to handle "<var:if-ie>" template tags.
1769 * UI/SOGoElements: new extension bundle containing sogo-specific
1772 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1773 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
1774 selected in the dialog.
1775 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
1776 first category, if ever, of the calendar entity.
1778 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1779 -composeAction]): restored method since it is needed by the
1782 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1783 -composeAction]): the address fields should be arrays and not
1786 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
1787 that returns the build date of SOGo in the template.
1789 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1791 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1792 -_flattenedRecords:records]): when the c_cn field is empty,
1793 returns set a formatted string with the concatenation of
1794 c_givenname and c_sn as the displayName.
1796 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1797 -isValidMailAccountName:_key]): prevent unknown accounts from
1800 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1801 -pathToAttachmentObject]): we no longer need the filename
1802 extension for SoLookup...
1804 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1805 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
1806 filename to have an extension, and thus accept any filename.
1808 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1809 -currentCName]): new method that returns the c_name of the
1810 contact, correctly escaped to be passed by url afterwards.
1812 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1813 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
1814 instance of [self decodedFlatContent] instead of the buggy
1815 NSString from [super flatContentAsString] to the parser.
1817 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1819 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
1820 new category method to reponds to the "delete" web command on
1822 ([UIxMailActions -deleteAttachmentAction]): new category method to
1823 reponds to the "deleteAttachment" web command on drafts, taking
1824 the "filename" url parameter into account.
1826 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1827 -contentForEditing]): new method that retrieve the editable mail
1829 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
1830 returns the body keys for attached files (parts with a "filename"
1833 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1834 -asQPSubjectString:encoding]): do not change the string if the
1835 encoded string has the same length (which means it is already
1837 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
1838 that retrieve a draft along with its attachments for editing.
1839 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
1840 choke if the "to" header field is empty.
1841 ([SOGoDraftObject -delete]): new method to delete the draft folder
1842 whenever operations are done.
1844 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1846 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
1847 useless stub method, of which the intention was implemented in
1849 ([-lookupSentFolderUsingAccount]): removed obsolete method.
1850 ([-selectedMailIdentity]): removed obsolete method.
1851 ([-lookupSentFolderUsingFrom]): removed obsolete method.
1852 ([-storeMailInSentFolder:_path]): removed obsolete method, of
1853 which the mechanism has been put in -[SOGoDraftObject sendMail]
1855 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
1856 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
1857 adapted algorithms to the new SOGoDraftObject methods.
1858 ([-deleteAction]): removed method since local draft objects cannot
1859 be removed by the user.
1861 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1862 -expungeAction]): new method replacing the one previously found in
1864 ([UIxMailFolderActions -createFolderAction])
1865 ([UIxMailFolderActions -renameFolderAction])
1866 ([UIxMailFolderActions -deleteFolderAction])
1867 ([UIxMailFolderActions -emptyTrashAction])
1868 ([UIxMailFolderActions -subscribeAction])
1869 ([UIxMailFolderActions -unsubscribeAction]): error situations
1870 should have http return code 500 instead of 403.
1872 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1873 -composeAction]): new method replacing the one previously in
1876 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1877 -imap4URLString]): removed overriden method (see below).
1879 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
1880 cache the mailbox acl.
1881 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
1882 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
1884 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
1885 the new method of determining the users mail accounts.
1887 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
1888 longer adds a "/" at the end of the string (the default for
1889 folders), therefore this will be overriden in SOGoMailFolder
1890 rather than in SOGoMailObject.
1892 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
1893 method, moved into the new UIxMailActions module class.
1895 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
1896 -newDraft]): new method that returns a new SOGoDraftObject
1897 instance with a unique filename based on the current timestamp and
1898 the "newDraft" prefix.
1900 -lookupName:nameinContext:localContextacquire:acquire]): overriden
1901 method by detecting local drafts with their "newDraft" prefix.
1902 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
1904 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
1905 from scratch by making it a subclass of SOGoMailFolder.
1907 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
1910 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
1913 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
1916 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
1917 new method, initializing the new ivars: IMAP4ID, headers, text,
1918 sourceURL and sourceFlag.
1919 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
1920 ([-_ensureUserSpoolFolderPath])
1921 ([-saveMimeMessageToTemporaryFileWithHeaders:])
1922 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
1923 ([-deleteTemporaryMessageFile:], [-delete], [-content])
1924 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
1925 ([-uid], [-flags], [-size], [-envelope]): removed methods.
1926 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
1928 ([SOGoDraftObject -setSourceURL:newSourceURL])
1929 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
1930 methods to store the url of the original message between accesses
1931 so that, depending on the action taken (forward or reply), the
1932 correct flag can be given.
1933 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
1934 the imap4 id that is returned for the message whenever it is saved
1935 into the drafts folder.
1936 ([SOGoDraftObject -save]): new method that takes in charge the
1937 saving of the message in the IMAP drafts folder.
1938 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
1939 new method that fills the original data of the new message with
1940 the reply content of the original message.
1941 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
1942 above for message forwarding.
1943 ([-spoolFileManager]): removed useless method (only returned the
1944 default filemanager...)
1945 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
1946 the resulting message as an NSData chunk.
1948 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
1949 containing a rewrite of the mail action methods found in
1950 UI/Mailer/, that needed to be put in the SOGoMailObject class.
1951 ([SOGoMailObject -subjectForReply]): new method that returns a
1952 subject suitable for replies.
1953 ([SOGoMailObject -contentForReply]): new method that returns the
1954 textual content of an email, quoted for replying.
1955 ([SOGoMailObject -filenameForForward]): new method that returns
1956 the name of the filename that should contain the forwarded
1957 message, based on its subject.
1958 ([SOGoMailObject -subjectForForward]): explicit.
1960 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1962 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1963 -mailAccounts]): rewrote method to return the name of the mail
1964 accounts now available with the -[SOGoUser mailAccounts] method.
1965 ([UIxMailMainFrame -showLinkBanner]): removed method.
1966 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
1967 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
1968 ([UIxMailMainFrame -rootURL]): removed method.
1969 ([UIxMailMainFrame -userRootURL]): removed method.
1970 ([UIxMailMainFrame -calendarRootURL]): removed method.
1971 ([UIxMailMainFrame -contactsRootURL]): removed method.
1972 ([UIxMailMainFrame -hasErrorText])
1973 ([UIxMailMainFrame -errorText])
1974 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
1975 ([-composeAction]): removed method. Now provided by
1976 UIxMailAccountActions.
1977 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
1978 ([UIxMailMainFrame -hideFolderTree]): removed method.
1979 ([UIxMailMainFrame -treeRootClassName]): removed method.
1980 ([UIxMailMainFrame +initialize]): removed method.
1981 SOGoMailTreeRootClass userdefaults will no longer have any effect.
1983 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1984 -redirectToLocation:newLocation]): new method that implements the
1985 same functionality as WOComponent.
1987 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
1989 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
1990 method that returns whether the current mail is store in the
1991 drafts folder hierarchy.
1993 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
1994 ([-primaryEmail]): removed method.
1995 ([SOGoUser -primaryIMAP4AccountString]): removed method.
1996 ([SOGoUser -mailAccounts]): new method that returns an array
1997 containing description dictionaries for all the user mail
1998 accounts. Each account also contain the user's identities for that
2000 ([SOGoUser -allIdentities]): new utility method that returns all
2001 the user identities on all accounts.
2002 ([SOGoUser -primaryIdentity]): new method return the first
2003 identity of the first account.
2005 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
2007 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2008 -isInDraftsFolder]): returns NO.
2009 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
2011 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
2013 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2014 -isInDraftsFolder]): new method that detects if self is contained
2015 by the drafts folder by calling itself on the container object.
2017 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
2019 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
2020 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
2021 return the name of the mail accounts now available with the
2022 -[SOGoUser mailAccounts] method.
2024 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
2027 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
2030 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
2031 -keysWithFormat:format]): method that forward the method of the
2032 same name to each member of the array, considering they all are
2033 instances of NSDictionary.
2034 ([NSArray -objectsForKey:key]): same principle as above.
2035 ([NSArray -flattenedArray]): new method that transforms an array
2036 of arrays into a single array containing all the elements of the
2039 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
2040 -keysWithFormat:keyFormat]): new method inspired by the python
2041 string formatting system and which replaces occurences of "%{key}"
2042 by the corresponding keys.
2044 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2046 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
2047 sql script before the generic one when initializing mandatory
2050 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2052 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2053 -pureEMailAddress]): new utility method inspired by the
2054 "_rawSender" private method in SOGoDraftObject, which it now
2057 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
2058 provides a common API for sending emails, no matter what the
2061 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2063 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2064 -quotasAction]): invoke "relativeImap4Name" instead of
2065 "nameInContainer" since the latter also returns the "folder"
2068 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2069 -listMailboxesAction]): declare the output as text/plain in UTF-8.
2071 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2072 -deleteFolderAction]): fixed the url of the destination folder.
2074 * Main/SOGo.m ([SOGo +initialize]): show the build date and
2075 hostname at startup.
2077 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2079 * SoObjects/Appointments/SOGoCalendarComponent.m
2080 ([SOGoCalendarComponent
2081 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
2082 set the mail date to the current date string returned by our
2083 rfc822DateString extension method.
2085 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2086 -_gcsFoldersFromFolder:): ignore the personal folders who are
2087 returned but don't really exist.
2089 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
2091 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
2092 has to return only one element.
2094 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2096 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
2097 -content]): new method returning the decoded content of the
2098 corresponding attachment as an NSData instance.
2099 ([UIxMailPartViewer -filename]): if the "filename" parameter of
2100 the metadata parameterList is empty, try to find out the filename
2101 from the "disposition" metadata returned with the BODYSTRUCTURE
2104 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
2105 -composeAction]): prefix the INBOX folder with "folder".
2107 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
2108 -relativeImap4Name]): return nameInContainer stripped from its
2109 first 6 characters since all folder names are prefixed with
2112 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2113 -imap4URLString]): invoke -relativeImap4Name instead of
2114 "nameInContainer" since the former will return the fixed IMAP4
2115 foldername and the latter the SoObject name.
2117 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2118 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
2120 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
2121 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
2122 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
2123 ([SOGoMailAccount -sentFolderNameInContext:])
2124 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
2125 names with "folder".
2126 ([SOGoMailAccount -inboxFolderInContext:_ctx])
2127 ([SOGoMailAccount -sentFolderInContext:_ctx])
2128 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
2129 the folder names with "folder" since they are prefixed earlier.
2131 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2133 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
2134 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
2135 all starts with "folder".
2137 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
2138 longer declare security info from here.
2140 * SoObjects/Mailer/SOGoMailFolder.m
2141 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
2142 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
2143 folder names now always start with "folder".
2145 * SoObjects/Mailer/SOGoMailAccount.m
2146 ([-lookupName:inContext:acquire:]): folder names now always start
2149 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2151 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
2152 -forwardAction]): adapted to the new saveAttachment:withMetadata:
2155 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
2156 code to save the attached filenames with the filename returned by
2157 the web server as well as their mime types.
2159 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
2160 ([UIxMailPartMessageViewer -toAddresses])
2161 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
2162 the corresponding fields separated with a ", " (if needed).
2164 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
2165 -saveAttachment:_attachwithMetadata:metadata]): new method
2166 replacing -saveAttachment:withName: and which takes a dictionary
2167 as parameter with the filename and the mime type of the
2169 The mimetype is then saved in a hidden text file.
2170 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
2171 take the mime type from the hidden text file related to the
2174 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
2175 ([SOGoContactGCSFolder
2176 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2177 return records if the db records are > 0 and not just > 1...
2179 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2181 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
2183 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
2185 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2186 ([SOGoContactLDAPFolder
2187 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2188 translate the returned records to a normalized form.
2190 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2191 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2192 translate the returned records to a normalized form.
2194 * UI/Scheduler/UIxCalListingActions.m,
2195 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
2196 SoObjects/SOGo/AgenorUserDefaults.m,
2197 SoObjects/Contacts/SOGoContactGCSFolder.m,
2198 SoObjects/Appointments/SOGoAppointmentFolder.m,
2199 OGoContentStore/OCSiCalFieldExtractor.m,
2200 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
2201 table fields with "c_".
2203 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2205 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
2206 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
2207 the application settings. If set, both limit will influence the
2208 maximum size of the resultsets and the time taken to solve them.
2209 ([LDAPSource -_initLDAPConnection]): initialize the limits.
2211 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2213 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
2214 method that declares the DAV namespace related to CardDAV.
2215 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
2216 method that declares the "access-control" and "addressbook-access"
2217 classes to the list.
2219 * SoObjects/Appointments/SOGoAppointmentFolder.m
2220 ([-lookupActionForCalDAVMethod:]): removed method.
2221 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
2222 method that declares the DAV namespace related to CalDAV.
2224 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
2225 optional method for subclasses which handle specific extensions to
2226 the DAV protocol: CardDAV or CalDAV.
2228 -lookupName:lookupNameinContext:localContextacquire:acquire]):
2229 new overriden method that handles dav invocations for extensions
2230 to DAV by returning an appropriate SoSelectorInvocation.
2232 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2233 -asDavInvocation]): new method returning a dictionary with a "ns"
2234 key representing the dav namespace and a "method" key representing
2235 the dav method name of the request.
2237 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
2238 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
2240 ([UIxPreferences -shouldDisplayPasswordChange]): new template
2241 method that returns the value of SOGoUIxUserCanChangePassword.
2243 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
2244 scan the value of SOGoUIxDefaultModule. If not set, the default
2245 module defaults to "Calendar".
2246 ([SOGoUserHomePage -defaultAction]): redirect the user to the
2247 value of "SOGoUIxDefaultModule".
2249 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2251 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2252 -contactInfos]): cache the results to avoid multiple invocations.
2254 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2255 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
2256 really should return something or if we fake to return nil...
2258 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2260 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
2261 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
2262 default is set to "bypass".
2264 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2265 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
2266 when authMethod is set to "bypass" from now on. This would avoid a
2267 security concern with a default installation of SOGo.
2268 AuthentificationMethod is now prefixed with "SOGo" for better
2271 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2273 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2274 -quotasAction]): new method that returns a json representation of
2277 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2279 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2280 -imap4URL]): rewrote method to support accented mailbox names.
2281 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
2282 SOGoAuthenticator's passwordInContext:.
2284 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2285 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
2286 start and due dates to nil if hasStartDate and hasDueDate are
2289 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2290 -passwordInContext:context]): made method public.
2292 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2293 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
2294 to false to avoid a null violation.
2296 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2298 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2299 -contentAsString]): returns the message encoded in ISO Latin 1
2302 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
2303 SOGoSuperUsername user defaults.
2304 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
2306 ([SOGoUser -rolesForObject:objectinContext:context]): if the
2307 current user is the superuser, grant him/her the "owner" role.
2309 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
2310 the folder only if the current user is the owner of the future
2313 * SoObjects/Appointments/SOGoCalendarComponent.m
2314 ([SOGoCalendarComponent -contentAsString]): we return the content
2315 based on the permissions returned by the security manager instead
2316 of by looking at the user roles.
2318 * SoObjects/Appointments/SOGoAppointmentFolder.m
2319 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
2320 folders of the user to whom this folder belongs instead of the
2321 active user. This way, a delegate user will be able to have the
2322 same view that the original user has if he connects from his user
2325 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
2326 user exists before creating the SOGoUserFolder instance. If not,
2329 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
2330 return the message source code in plain text.
2332 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2333 -contentAsString]): returns the message encoded in UTF8.
2335 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2337 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
2338 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
2339 leading tagname into account when serializing the element values.
2341 * Main/SOGoProductLoader.m: only load bundle directories ending
2342 with the "SOGo" extension.
2344 * Main/SOGo.m ([SOGo
2345 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
2346 result set if the query has caused no exception. Otherwise we get
2347 an "evaluation is in progress exception".
2349 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2351 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2352 -generateSQLForInsert]): initialize error to nil before the
2353 serialization. Otherwise the method can get confused if it ever is
2354 initialized to something else.
2356 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
2357 -folderIsMandatory]): returns NO unconditionnally.
2359 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2360 -appendPersonalSources]): add the "personal" folder to the list of
2361 user folders even if it doesn't exist, so that it is created when
2362 the user accesses it.
2364 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2365 -folderIsMandatory]): returns YES if nameInContainer is set to
2366 "personal", which is the default address book.
2368 * SoObjects/Appointments/SOGoAppointmentFolder.m
2369 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
2370 users must have one Calendar folder (one and only one).
2371 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
2372 escaping '\' so make the carriage return a real one. This way,
2373 PgSQL 8 won't complain about escaping the string.
2375 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
2376 method that create the folder if considered mandatory.
2377 ([SOGoFolder -folderIsMandatory]): new method that determines
2378 whether the folder should be created automatically or not. To be
2379 overriden by subclasses.
2381 * Main/SOGo.m ([SOGo -run]): override method and create the
2382 missing system tables if needed.
2384 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2386 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
2387 -mailDateFormatter]): returns the user's date formatter.
2389 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
2390 applies the user timezone to the date object before returning it.
2392 * UI/Common/UIxSortButton.m: removed useless class module.
2394 * UI/Common/UIxSortableTableHeader.m: removed useless class
2397 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2398 -contactInfos]): use the "asc" url parameter instead of "desc" to
2399 determine the ordering.
2400 ([-sortOrdering]): removed method.
2401 ([UIxContactsListView -init]): removed the "searchText" ivar.
2402 (general): the template no longer use the UIxSortableTableHeader
2405 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
2406 -defaultSortKey]): default sort following the messages arrival
2407 instead of their date.
2408 ([-isSortedDescending]): removed method.
2409 ([-imap4SortOrdering]): use the "asc" url parameter instead of
2410 "desc" to determine the ordering.
2411 (general): the template no longer use the UIxSortableTableHeader
2414 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2416 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
2418 ([-setQualifier:_msg], [-qualifier]): removed methods.
2419 ([UIxMailListView -defaultAction]): added code to handle the
2420 search criteria and value passed as url parameters. Also, we now
2421 handle the same search criterias as Thunderbird/Icedove.
2423 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2425 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
2426 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
2427 the string instead of the string itself.
2428 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
2430 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
2431 bool var "acceptAnyUser" that is set when the AuthenticationMethod
2432 user default is nil.
2433 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
2434 unconditionnally returns an instance whenever acceptAnyUser is set.
2436 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2438 * Main/sogod.m (main): prevent SOGo from running as root.
2440 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2442 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2443 -setCurrentPassword:newPassword]): new stub method.
2444 ([SOGoUser -dateFormatterInContext:context]): new method that
2445 returns an instance of SOGoDateFormatter configured based on the
2448 * UI/Common/UIxPageFrame.m ([UIxPageFrame
2449 -relativePreferencesPath]): new method.
2451 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
2452 removed useless method.
2454 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
2455 different configurable formats (long and short date + time).
2457 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
2459 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2460 -isInternetRequest]): removed method.
2462 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2463 -jsonRepresentation]): new method with an explicit name.
2465 * UI/PreferencesUI/product.plist: new bundle that provides a web
2466 ui for handling user defaults.
2468 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
2470 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
2472 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
2474 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2476 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
2478 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2480 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
2481 -compareEventsAscending:otherEvent]): no longer use compare: on
2482 the time objects since one of them could be an NSNull, which
2483 crashes when comparing with anything.
2485 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2486 -eventsListAction]): sort events from here.
2487 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
2489 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
2490 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
2492 * SoObjects/Appointments/SOGoAppointmentFolder.m
2493 ([SOGoAppointmentFolder
2494 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
2495 no longer sort elements from here.
2497 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2499 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2500 -aclsForUser:uid]): implemented method by forwarding the request
2501 to the container. This fixes a bug where users could no longer
2502 read emails from shared folders.
2504 * SoObjects/Appointments/SOGoCalendarComponent.m
2505 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
2506 here, but rather in its parent class.
2508 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
2509 -stringForSecondsSinceThe70s:seconds]): new utility method.
2511 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2512 -eventsListAction]): no longer reduce the end day of one day for
2513 all day events since everything has been fixed in
2514 OCSiCalFieldExtractor.
2516 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2517 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
2518 the end date of all day events of 1 so that they stay on their
2521 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2523 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
2525 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
2527 ([-fetchCoreTasksInfos]): removed method.
2529 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2530 -init]): initialize an instance of SOGoDateFormatter.
2531 ([UIxCalListingActions -eventsListAction]): the display start and
2532 end dates are added to the listing for each event.
2534 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
2536 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2537 -isAllDay]): returns YES if the "hm" url parameter is set to
2539 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
2540 is displayed one day earlier.
2542 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2544 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2545 -_setupContext]): take the range of dates specified by the popup
2548 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
2549 WODirectAction that returns WOResponse objects with the events or
2550 todos satisfying the parameters passed in the url.
2552 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2553 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
2554 "isAllDay" into account and compute the amount of days to pass to
2557 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
2559 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
2560 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
2561 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
2562 new method that returns a json-formatted array of the visible tasks
2563 for the current user.
2565 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2567 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
2568 object must be present in the list of UIDs we delete the object
2569 from. Otherwise Calendar objects having no organizer and no
2570 attendees will remain in their owner's Calendar.
2572 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2573 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
2574 first 3 elements of the path array if the url returned by
2575 baseURLInContext: returns a hostname.
2577 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2578 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
2579 nil, in which case a crash happens when calling hasPrefix:.
2580 ([SOGoMailFolder -_sharesACLs]): same as above.
2581 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
2582 otherUsersFolderName is nil, we return nil.
2583 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
2584 nil from [self otherUsersPathToFolder], we return nil too.
2586 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2588 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2589 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
2590 the result of [self baseURLInContext:] to avoid a double escaping
2591 in the resulting string.
2593 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
2594 the user has the "ObjectReader" role on the parent container, then
2595 he is granted the "ObjectViewer" role on this object. Same for
2596 "ObjectEraser", although this might change later.
2598 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2599 -toolbar]): determine the toolbar filename based on the
2600 permissions declared by the securitymanager. The role mechanism
2601 has been adjusted on a lowerlevel so we can simplify the code.
2603 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2604 -initWithName:newNameinContainer:newContainer]): read the content
2605 directly from here. That way we can determine whether the object
2607 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
2608 the ObjectCreator role is enabled, we also grant the ObjectEditor
2609 role to the current user.
2611 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
2612 changed the method paradigm to only return HTTP code 204. Not test
2613 is done whatsoever since the security manager does it for us.
2615 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
2616 removed method because the same exists in UIxFolderActions.m
2618 * UI/Contacts/UIxContactsUserRightsEditor.m
2619 ([UIxContactsUserRightsEditor
2620 -setUserCanReadObjects:userCanReadObjects]): new method.
2622 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
2623 "FolderEraser" and special permission "Access Object". Removed
2624 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
2625 can be used instead. Removed "FolderReader" since it is useless.
2627 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2628 -vCard]): directly use the "content" ivar since it is initialized
2629 during object creation.
2631 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2632 ([SOGoContactLDAPFolder -init]): no longer handle the
2633 nameInContainer no the container ivars. They were removed because
2634 this class is a descendant of SOGoObject which already has them.
2635 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
2636 returning "displayName".
2637 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
2640 * SoObjects/Appointments/SOGoCalendarComponent.m
2641 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
2642 ([SOGoCalendarComponent -findParticipant:user]): new name for
2643 method "participant:".
2644 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
2645 findparticipant but taking a uid string as parameter.
2646 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
2647 iCalendar automatically. Instead, this is done only when the user
2648 is a "date and time viewer".
2649 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
2650 (modifier and responder) into account by compiling them with the
2653 * SoObjects/Contacts/SOGoContactFolder.h: removed
2654 "nameInContainer" from the list of required methods.
2656 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
2657 -davContentType]): returns "text/calendar".
2659 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2660 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
2661 groupdav resource-type.
2663 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2664 -davContentType]): same as below.
2666 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2667 -initWithName:newNameinContainer:newContainer]): new overriden
2668 method setting the custom owner directly.
2670 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2671 -davContentType]): same as below.
2673 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2674 -davContentType]): same as below.
2676 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
2677 declare "httpd/unix-directory".
2679 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
2680 "UTC" as fallback timezone instead of "Canada/Eastern".
2681 ([-hasEmail:email]): make use of the new NSArray's
2682 containsCaseInsensitiveString: method.
2684 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2685 -davContentType]): declare "message/rfc822" as content type.
2687 * SoObjects/Appointments/SOGoAppointmentFolder.m
2688 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
2690 ([SOGoAppointmentFolder
2691 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
2692 ([-fetchContentObjectNames]): commented out method since it was
2693 usefull only for testing Funambol.
2695 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
2696 -containsCaseInsensitiveString:match]): an enhanced version of
2699 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
2701 ([-showMarkDeletedButton]): removed useless method.
2702 ([-showTrashButton]): removed useless method.
2704 * SoObjects/Appointments/iCalEntityObject+SOGo.m
2705 ([iCalEntityObject -userIsParticipant:user]): new proxy method
2706 that invoked isParticipant on self for each possible email
2707 addresses of the user passed as parameter.
2708 ([iCalEntityObject -userIsOrganizer:user]): same as above.
2710 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
2713 * SoObjects/Appointments/SOGoAppointmentObject.m
2714 ([SOGoAppointmentObject
2715 -saveContentString:contentStringbaseVersion:baseVersion]): remove
2716 method since an event may not have an organizer.
2718 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2719 -GETAction:localContext]): clarified method. Added support for
2720 content-type (thanks to Helge Hess).
2721 ([SOGoObject -initWithName:_nameinContainer:_container]):
2722 initialize and retain the owner.
2723 ([SOGoObject -davContentType]): returns "text/plain".
2725 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2727 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2728 -addUserInAclsAction]): send an acl addition mail.
2729 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
2732 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2733 -_realActionWithFolderName:folderDict]): handle the possible
2734 presence of the "mail-invitation" url parameter. If present, the
2735 user will be redirected to the relevant folder.
2737 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
2738 ([SOGoUser -language]): new method that returns the user's
2739 preferred language, or the system's if none has been set yet.
2741 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
2742 that returns the full dav url to self.
2743 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
2744 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
2745 returns the full so url to the base of the SOGo module to which
2746 self belongs, and for the specified user.
2747 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
2748 but for the current user.
2749 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
2750 required by the acl advisory templates and which returns a link
2751 the target user can click to activate its new subscription.
2752 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
2753 but for inclusion of the application/x-sogo-notification part,
2754 which will be handled by the Lightning enhancer plugin.
2756 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
2757 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
2758 do nothing yet since imap folder subscription is not handled yet.
2760 * SoObjects/SOGo/SOGoContentObject.m
2761 ([-hasSupportForDefaultRoles]): removed method.
2763 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2764 -getFullEmailForUID:uid]): new method that returns the username +
2767 * SoObjects/Appointments/SOGoCalendarComponent.m
2768 ([SOGoCalendarComponent +initialize]): the default language for
2769 mail templates is now set to English.
2771 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
2772 SOGoACLAdvisory implementing the french template for user removal
2775 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
2776 SOGoACLAdvisory implementing the french template for user
2779 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
2780 SOGoACLAdvisory implementing the english template for user removal
2783 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
2784 SOGoACLAdvisory implementing the english template for user
2787 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
2788 supercall of all the acl advistory templates. The model is based
2789 on SOGoAptMailNotification except that the template encapsulates
2790 the message to be sent. Later, we might create a superclass common
2791 to all template-based emails.
2793 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2794 -addRange:newRange]): new method that store a string
2795 representation of the NSRange passed as parameter.
2796 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
2797 any range contained in self intersect with the one passed as parameter.
2799 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
2800 store ranges in an array to prevent them from intersecting with
2801 each other during the passes.
2803 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2805 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2806 -primaryFetchMailboxInfo]): useless method. Removed.
2808 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2810 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2811 -toManyRelationshipKeys]): invoke [self subfolders].
2812 ([SOGoMailFolder -subfolders]): new method containing what used to
2813 be in toManyRelationshipKeys.
2814 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
2817 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2818 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
2819 named and at the beginning of which we put the predefined folders.
2821 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2822 -emptyTrashAction]): new method inspired by a similar one from
2823 UIxMailListView, to which we added the ability to remove
2826 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
2827 method. Replaced with a similar one in UIxMailFolderActions.
2829 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2830 -renameFolderAction]): implemented method.
2831 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
2832 specified folder. Instead, we put it in the trash folder.
2834 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
2835 method, replaced with a similar method in the new
2836 UIxMailFolderAction class module.
2837 ([-deleteFolderAction]): idem.
2839 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2840 -createFolderAction]): new method implementing subfolder creation.
2841 ([UIxMailFolderActions -renameFolderAction]): new method
2842 implementing subfolder renaming (basic implementation to be
2844 ([UIxMailFolderActions -deleteFolderAction]): new method
2845 implementing folder deletion.
2847 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
2848 web actions related to the handling of imap folder.
2850 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2852 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2853 -ownerInContext:localContext]): overriden method because we are an
2854 IMAP4 client and we need a bit more intelligence to deduce the
2855 owner of the current folder.
2856 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
2857 return an NSException so we need to be careful here to avoid a
2859 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
2860 NSException so we need to be careful here to avoid a crash.
2862 * SoObjects/Mailer/SOGoMailAccounts.m
2863 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
2864 there is no longer any concept of Intranet or Internet connection
2867 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2868 -sharedFolderName]): new method.
2869 ([SOGoMailAccount -otherUsersFolderName]): new method.
2871 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
2872 new javascript code and the new UIxMailAccountActions class.
2874 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
2875 javascript code and the new UIxMailAccountActions class.
2877 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
2878 new javascript code and the new UIxMailAccountActions class.
2880 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2881 -listMailboxesAction]): new method that returns a json-formatted
2882 tree of all the mailboxes available to the current user.
2884 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
2885 web actions related to the handling of mail accounts.
2887 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
2890 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
2891 -jsonRepresentation]): new interface method meant to be overriden
2892 by the primitive classes.
2894 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2896 * UI/MailerUI/UIxMailSplashView.m: removed.
2898 * SoObjects/Appointments/SOGoCalendarComponent.m
2899 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
2900 the uid to the list only when the user email is recognized by the
2903 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2905 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2906 -isDeletionAllowed]): completed method with the new imap acl api.
2908 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
2911 * SoObjects/SOGo/SOGoPermissions.m: added the new role
2912 "SOGoMailRole_MessageEraser".
2914 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
2915 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
2916 "defaultUserID" method into account.
2918 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
2919 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
2920 "defaultUserID" method into account.
2922 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
2923 methods to support the IMAP acls mentionned in the RFC 4314,
2924 removed the ones specific to Cyrus.
2926 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
2927 mandatory method for subclasses. Removed the SOGoDefaultUserID
2930 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
2931 overriden method to return @"<default>".
2933 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2934 -defaultUserID]): overriden method to return @"<default>".
2936 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2937 -aclsForUser:uid]): overriden method.
2938 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
2939 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
2940 ([SOGoMailFolder -defaultUserID]): overriden method.
2941 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
2943 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2945 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2946 -aclUsersForObjectAtPath:objectPathArray]): new method that being
2947 forwarded the calles to aclUsers for the GCS-based subclasses of
2950 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
2951 methods that would have been used to support IMAP acls. Replaced
2952 them with the new protocol for them that has been implemented in
2953 SOGo during the last few weeks.
2955 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2956 -hasSupportForDefaultRoles]): override method by returning "YES".
2958 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2959 -addObjectUniquely:object]): new method with an explicit name.
2961 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
2962 "acl" to "aclUsers". Now designed to return only the uid of the
2963 users involved in an ACL.
2964 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
2965 "NO" by default. To indicate to the acl editor that we don't want
2966 to handle a default user.
2968 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
2969 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
2972 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
2973 provides a view to the IMAP acls.
2975 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
2977 * UI/WebServerResources/MailerUI.js: replaced all invocations of
2978 addEventListener to the use of prototype's Event object. Also,
2979 configured all menus programmatically following descriptions lists
2980 containing their callbacks, or nulls, submenus id or separators.
2982 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2984 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2985 -addUserInAclsAction]): save the previous roles of the user
2986 (unlikely) or the default roles, or None instead of saving the
2987 roles that should appear the first time in the role editor when no
2988 default has been set...
2990 * SoObjects/SOGo/SOGoObject.m: defined a new constant
2991 "SOGoDefaultUserID".
2993 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2994 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
2995 ignore the "AuthorizedSubscriber" role and add the "None" role
2996 when no other role is found.
2998 * UI/Common/UIxAclEditor.m: added a button for the new default
3001 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
3002 -_initRights]): don't take the "None" role into account when
3003 initializing the list of current roles.
3005 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
3008 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3010 * SoObjects/SOGo/NSString+Utilities.m ([NSString
3011 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
3012 There is no need to subscract the start from the length if a space
3013 is not found since the range has not changed either. Finally, the
3014 first character before the url might also be a tab or a cr, so we
3015 match it against the "urlAfterEndingChars" custom NSCharacterSet.
3016 ([NSString -stringByDetectingURLs]): modified to handle email
3017 addresses and add a correct "mailto:" link.
3019 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3021 * SoObjects/Appointments/SOGoAppointmentFolder.m
3022 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
3023 method to return the events in the range of 2 weeks ago up to 4
3026 * UI/MailPartViewers/UIxMailPartTextViewer.m
3027 ([UIxMailPartTextViewer -flatContentAsString]): use the new
3028 "stringByDetectingURLs" method to offer clickable urls.
3030 * SoObjects/SOGo/NSString+Utilities.m ([NSString
3031 -stringByDetectingURLs]): this new method replaces passive URLS
3032 with active ones for HTML resolution of the text.
3034 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3036 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3037 -asQPSubjectString:encoding]): simplified method.
3038 The headers indicates "utf-8" again thank to our fix in
3041 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
3044 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3046 * UI/Common/UIxObjectActions.m ([UIxObjectActions
3047 -removeUserFromAclsAction]): implemented this method which was
3048 missing and is required to remove users from ACLs.
3050 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3051 -subscribeAction]): folderDict was not autoreleased, resulting in
3054 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3055 -primaryFetchProfile]): when building with libFoundation, don't
3056 use the "propertyList" method from NSString. Rather, we convert
3057 the string to an NSData instance and passit as parameter to
3058 NSDeserializer. This way, we obtain a mutable dictionary rather
3059 than an immutable one.
3061 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
3062 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
3063 constant string "contentTypeValue".
3064 contentTypeValue is now set back to iso-8859-1 since NGMime
3065 converts extracts the data in that encoding.
3067 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3069 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
3070 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
3071 "bindFields" value is present in the user defaults, use the
3072 specified fields to find the dn of the user to bind.
3073 ([LDAPSource -allEntryIDs])
3074 ([LDAPSource -fetchContactsMatching:match])
3075 ([LDAPSource -lookupContactEntry:entryID])
3076 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
3077 bind and unbind the connection on each request.
3079 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
3081 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3082 -contactSearchAction]): simplified method to use the facilities
3083 provided by the LDAPUserManager. No longer takes care of the
3084 "ldap-only" url parameter since all requests are handled by the
3087 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3088 -primaryFetchProfile]): check that the value returned is not null
3089 before interpreting it.
3091 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
3092 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
3093 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
3094 system email is already present, remove it before adding it.
3096 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
3097 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
3098 loginToCheck is not empty.
3099 ([LDAPSource -fetchContactsMatching:match]): check that match is
3101 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
3103 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
3106 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3108 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
3110 ([SOGoUser -systemEmail]): returns the email formed from the
3111 username and the default mail domain.
3112 ([SOGoUser -hasEmail:email]): test whether the user has the
3113 specified email, in a case-insensitive way.
3115 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3116 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
3117 check login information.
3119 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3120 ([SOGoContactLDAPFolder
3121 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
3122 no longer manage LDAP connections. The requests are forwarded to
3123 the relevant LDAPSource instead.
3125 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3126 -appendSystemSources]): pass LDAPSource objects to
3127 SOGoContactLDAPFolder instances.
3129 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
3130 address of the "from" field before sending the message. Otherwise,
3131 sending the mail won't work.
3133 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
3134 rewrote this method to request all the available email identities
3135 for the current user. Also, the from field also contains the full
3136 name of the user, not just his/her email address.
3138 * SoObjects/Appointments/SOGoCalendarComponent.m
3139 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
3140 from the previous module iCalEntityObject+Agenor.
3141 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
3142 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
3145 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
3146 replacing the SOGoContactLDAPEntry module. It was renamed as such
3147 because it now receives a dictionary instead of an NGLdapEntry.
3148 It thus can now handle data from any source of LDIF data, not
3149 only coming from LDAP.
3151 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
3152 implementing most of what used to be the AgenorUserManager class.
3153 The difference is that users are cached in the forme of
3154 dictionaries and many sources are used. Also, it can be used to
3155 search LDAP contacts.
3157 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
3158 the concept of "ldap source", to be used by all the classes
3159 needing access to LDAP-provided information: addressbooks and the
3160 user manager. Most the method thereing are transcriptions of
3161 methods previously found in SOGoContactLDAPFolder. It also contain
3162 utility methods for user matching and authentification.
3164 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
3165 module, rendered useless by code refactoring.
3167 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
3168 with the freshly written "LDAPUserManager".
3170 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3172 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
3173 SOGOContactLDIFEntry.
3175 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
3176 module, obsoleted by code in SOGo/LDAPSource.[hm].
3178 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3180 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
3181 new method with an explicit name.
3183 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3185 * SoObjects/Appointments/SOGoCalendarComponent.m
3186 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
3187 replacing "isOrganizer:orOwner:" by taking only one instance of
3188 SOGoUser as parameter.
3189 ([SOGoCalendarComponent -participant:user]): new method replacing
3190 the previous "isParticipant" boolean method by returning the first
3191 participant matching the user passed as parameter. This method is
3192 used so that both the regular email address and the "system email
3193 address" of the user are matched against the participants emails.
3195 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3196 -getSystemEMailForUID:uid]): new method that returns the email
3197 formed with the user's uid and the default mail domain.
3199 * SoObjects/Appointments/SOGoCalendarComponent.m
3200 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
3201 was previously commented out.
3203 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
3204 forwared to [AgenorUserManager getSystemEmailForUID:].
3206 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3207 -toolbar]): method replacing the one with the same name in the
3208 task and appointment editor classes. This method makes also use of
3209 the new method "isOrganizerOrOwner:" and "participant:" in
3210 SOGoCalendarComponent.
3212 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3213 -toolbar]): removed method, replaced with a method with the same
3214 name in UIxComponentEditor.
3216 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
3217 method, replaced with a method with the same name in
3220 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3221 -primaryFetchProfile]): the values returned from the database are
3222 converted to a put dictionary first, since the dictionary returned
3223 is actually an immutable one, which can cause a crash afterwards.
3225 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3227 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
3228 and "SOGoRole_ObjectEditor".
3230 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
3231 -prepareRightsForm]): this method is no longer mandatory.
3233 * UI/Contacts/UIxContactsUserRightsEditor.m
3234 ([UIxContactsUserRightsEditor
3235 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
3236 module to handle acls related to the address books. Partial
3239 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3240 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
3243 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
3244 specified roles from cache.
3245 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
3246 put resulting roles in cache.
3248 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
3249 initWithName:inContainer:. Instead, directly initialize the ivars
3250 as it is supposed to be to avoid an infinite loop whenever one of
3251 those two methods are overriden.
3253 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
3256 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3257 -aclsForUser:uid]): override method so that SOGo won't crash when
3258 loading the contact card.
3260 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3262 * SoObjects/Appointments/SOGoAppointmentFolder.m
3263 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
3264 "freebusy" special user should only require opaque elements.
3266 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3268 * SoObjects/Appointments/SOGoAppointmentFolder.m
3269 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
3270 our double declaration where the resulting XML would be screwed.
3271 There is only one collection per namespace.
3273 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
3274 rfc822DateString]): new method that returns a string conform to
3275 rfc 822 and suitable for email headers.
3277 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
3278 "rfc822DateString" category method on the date we put in the
3281 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3283 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
3284 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
3285 which should never be overriden.
3286 ([UIxUserRightsEditor -appendRight:newRight])
3287 ([UIxUserRightsEditor -removeRight:right])
3288 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
3289 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
3290 methods that can be used by the subclasses.
3291 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
3292 mandatorily be overriden to prepare the elements of the subclassed
3294 ([UIxUserRightsEditor -updateRights]): new method that should
3295 mandatorily be overriden to update the user rights from the
3296 elements of the subclassed form.
3298 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
3299 check if the uid is already listed before adding it to our array.
3300 This is because the acl table can contain more than one record per
3301 user/object relationship.
3303 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3304 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
3305 "roles" parameter is now an NSArray instead of a string. Therefore
3306 we loop throughout the array to populate the table. All the
3307 relevant records are removed prior to the addition of the new
3310 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
3311 -aclsForUser:uid]): new override that returns nil until we add
3312 support for IMAP acls.
3314 * SoObjects/Mailer/SOGoMailAccounts.m
3315 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
3317 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3318 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
3320 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3321 -aclsForUser:uid]): override this method which will always return
3324 * SoObjects/SOGo/SOGoPermissions.[hm]: added
3325 [Public,Private,Confidential]
3326 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
3327 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
3328 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
3330 * SoObjects/Appointments/SOGoAppointmentFolder.m
3331 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
3332 that defines default roles for new elements in the acl.
3334 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
3335 module and subclass of UIxUserRightsEditor specific to the
3336 handling of user rights on calendar folders.
3338 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3340 * SoObjects/Appointments/SOGoAppointmentFolder.m
3341 ([SOGoAppointmentFolder -groupDavResourceType]): return both
3342 "vevent-collection" and "vtodo-collection".
3344 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
3345 that implements the detailed editor of user rights per-object.
3347 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3349 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3350 -rolesForObject:objectinContext:context]): no longer query objects
3351 for "roleForUser:". Instead, all objects should implement
3354 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
3355 new method to comply with the new acl "protocol" in SOGoObject.
3356 Uses SOGoFolder's new facilities for ACLS.
3357 ([SOGoContentObject -aclsForUser:uid]): idem.
3358 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
3359 ([SOGoContentObject -removeAclsForUsers:users]): idem.
3361 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3362 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
3363 based folders. This method is derived from the code that was in
3364 UIxAclFolder before its removal.
3365 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
3368 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
3370 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
3371 ([SOGoFolder -setRoleForUsers:uidsto:role])
3372 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
3374 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
3375 that requires overriding by subclasses.
3376 ([SOGoObject -aclsForUser:uid]): idem.
3377 ([SOGoObject -defaultAclRoles]): idem.
3378 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
3379 ([SOGoObject -removeAclsForUsers:users]): idem.
3381 * UI/Common/UIxObjectActions.m: new module implementing the web
3382 actions common to SOGoObject and all its subclasses.
3383 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
3384 user with the clientObject defaults user rights to the object's
3387 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
3388 to the point where it will only list the users (and their name)
3389 associated with an object acl.
3391 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
3392 methods have been moved into SOGoObject and SOGoFolder during a
3395 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3396 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
3397 method made useless by the programmatic handling of iCalendar
3399 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
3400 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
3401 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
3403 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
3404 drop on all folder nodes, not just on leaves.
3406 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3407 ([SOGoContactLDAPFolder
3408 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
3410 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3412 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
3413 debugging facilities when the SOGoDebugObjectAllocation user
3416 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3418 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
3419 method that SOGo will need with non-gnustep Foundation
3421 ([NSString -stringByAppendingPathComponent:component]): new method
3422 that SOGo will need when building with libFoundation. Method
3423 removed later since it is available from
3424 Foundation/NSPathUtilities.h.
3426 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
3429 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
3430 every subclass to access [WOApplication context] without having to
3431 invoke it more than once.
3433 * SoObjects/Appointments/SOGoCalendarComponent.m
3434 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
3435 moved method from SOGoTaskObject and SOGoAppointmentObject up to
3438 * UI/Scheduler/UIxCalSelectTab.m: removed module.
3440 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3442 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
3443 -vCard]): test the prefix of the card in a case-independent way.
3445 * OGoContentStore/OCSContactFieldExtractor.m
3446 ([OCSContactFieldExtractor
3447 -extractQuickFieldsFromContent:content]): we no longer accept
3448 records in a format other than versit vCard so we can get rid of a
3451 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3453 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3454 -selectorComponentClass]): restored method.
3456 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3458 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
3459 -shouldDisplayCurrentTask]): the current task is not displayed if
3460 it is NOT completed or if the "showCompletedTasks" flag is set.
3461 The logic was inverted in Lightning and is now in SOGo too.
3463 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3465 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
3466 want the "work" url instead of the "home".
3468 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3469 -_saveSnapshot]): save url values from snapshot.
3470 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
3472 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3473 -calendarList]): new method replacing "availableCalendars".
3475 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
3476 -calendarFolders]): we now take the list of subscribed calendar
3479 * SoObjects/Appointments/SOGoAppointmentFolder.m
3480 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
3481 method derived from and replacing [UIxCalView calendarFolders].
3483 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3485 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3486 -toManyRelationshipKeys]): don't put the predefined folders in the
3487 list if they are returned by the server.
3489 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
3490 longer store the "flattenedBlocks" in a dictionary since the
3491 object will be deleted anyway and we don't need to put the folders
3494 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3495 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
3496 attachment path into account when computing the part urls.
3498 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3500 * UI/Contacts/UIxContactsListViewContainer.m
3501 ([UIxContactsListViewContainer -additionalFolders]): take the list
3502 of subscribed folders from the new property list used for the user
3503 settings. The value of its key is SubscribedFolders for the
3504 dictionary entry named "Contacts".
3506 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3507 -canAccessContentAction]): new method to override the one from
3508 UIxFoldersActions by taking into account the fact that, this time,
3509 the clientObject is an ldap folder. Removed many method that used
3510 to be related to the handling of the user selector.
3512 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
3513 to make sure they can be removed.
3515 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
3516 populate the calendar entries based on the user settings plist.
3518 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3519 -selectForMailerAction]): restored method.
3521 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
3522 from a simplified version of the old UIxContactEditor (removed).
3524 * UI/Contacts/UIxContactsUserFolders.m: new template module for
3525 selecting users or user folders through an LDAP search of which
3526 the results are displayed as a tree.
3528 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
3529 method "onContactAdd" here since the Mailer is now the only module
3530 to use it when composing emails.
3532 * UI/WebServerResources/generic.js: added code for handling the
3533 new scheme used for describing SOGo folders, common code to handle
3534 folder addition or removal.
3536 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3537 -activateFolderAction]): new method that change the "active"
3538 settings in the folder-related fields in the user settings.
3539 ([UIxFolderActions -deactivateFolderAction]): see above.
3541 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3542 -checkRightsAction]): removed method.
3544 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3545 -updateAdditionalAddressBooksAction]): removed method.
3547 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3548 -updateCalendarsAction]): removed method.
3550 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3552 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3553 -checkRightsAction]): removed method.
3555 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3556 -canAccessContentAction]): new method designed to replace
3557 [UIxCalMainView checkRightsAction] in a more universal way.
3559 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3561 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3562 -roleOfUser:uidinContext:context]): take all the subkeys into
3563 account, not only the "personal" folder.
3565 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3566 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
3567 to the new components.
3569 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
3572 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3573 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
3574 field of the sogo_user_profile table, where the user-customizable
3575 changes will be saved.
3576 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
3577 similar to the one above, using the "settings" field where the
3578 automatic settings will be saved.
3580 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
3581 module to bind the userdefaults to a property list contained in a
3582 specified field of the sogo_user_profile table.
3583 ([AgenorUserDefaults
3584 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
3585 added a "fieldName" parameter.
3587 * UI/Common/UIxFolderActions.m: new module implementing web
3588 actions common to all GCS-based folders.
3590 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3592 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
3593 put a carriage return after the day name.
3595 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3596 -readFreeBusyAction]): restored method.
3598 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3600 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3601 -defaultAction]): remade module to redirect automatically to the
3604 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
3606 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3608 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3609 -deleteAction]): new web method to delete personal addressbook
3612 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3613 -delete]): override method to refuse the deletion of the folder if
3614 its nameInContainer is "personal".
3616 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
3617 that forwards the deletion request to the folder manager.
3619 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3621 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
3622 -zoomList]): new method that returns the list of available zoom factors.
3624 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3625 -changeStatusAction]): rewrote method.
3627 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3628 -_handleAttendeesEdition]): make sure "attendeesNames" has a
3629 length > 0 before computing the attendees. Otherwise there will be
3630 an invalid empty entry.
3631 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
3632 organizer when there are attendees and remove it when the
3633 attendees are removed.
3635 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3637 * UI/Scheduler/UIxAttendeesEditor.m): new component.
3639 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
3640 the task and appointment editors. Now a container component
3641 handling the common elements of tasks and events.
3643 * UI/Scheduler/UIxTaskEditor.m: same as below.
3645 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
3646 a subclass of UIxComponentEditor but a subcomponent of it.
3648 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
3649 toolbar can have the special value "none" to indicate there is
3650 none attached to the window.
3652 * SoObjects/Appointments/SOGoCalendarComponent.m
3653 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
3655 ([SOGoCalendarComponent -isParticipant:email]): new method.
3656 ([SOGoCalendarComponent -calendar:create]): takes one parameter
3657 "create" which is a boolean indicating whether we want to create
3658 the calendar if it does not exist.
3660 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3662 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
3663 of a table, the same way the dayly and weekly views have been for
3666 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
3668 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
3671 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
3672 property to point at the user folder
3674 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3676 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3677 -userInContext:]): returns "SOGoUser".
3679 * SoObjects/Appointments/SOGoCalendarComponent.m
3680 ([SOGoCalendarComponent -contentAsString]): overriden method that
3681 takes the privacy into account and discard the relevant fields if
3682 needed by generating a new content string and caching it.
3683 ([SOGoCalendarComponent
3684 -saveContentString:contentStringbaseVersion:baseVersion]): if the
3685 new method above has cached a content string, release it and set
3686 it to nil so that it will have to be regenerated in the case it is
3688 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
3689 discard the fields that have to be hidden when the card is
3692 * SoObjects/Appointments/SOGoAppointmentFolder.m
3693 ([SOGoAppointmentFolder
3694 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
3695 sure the cards are now handled as instances of
3696 SOGoCalendarComponent instead of SOGoContentObject so that their
3697 content string is taking the privacy classifiction into account.
3698 ([SOGoAppointmentFolder -_privacySqlString]): new method that
3699 generates a query to determine what information can be given and
3700 if the card itself has to be shown.
3702 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3703 -getICalPersonsFromValue:selectorValue]): removed useless
3704 "isAccessRestricted" method.
3706 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3707 -setStyle:_style]): test whether the values of orgmail and
3708 partmails are null before manipulating them, otherwise SOGo sends
3709 a "rangeOfString:" message to an NSNull, which makes it crashes.
3711 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3712 -extractQuickFieldsFromEvent:_event]): we now use the new
3713 "symbolicAccessClass" method from iCalEntity to determine the
3714 value of the "classifiction" field.
3715 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
3718 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3720 * SoObjects/Appointments/SOGoAppointmentFolder.m
3721 ([SOGoAppointmentFolder
3722 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
3723 see below, the query is adapted consequently.
3725 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3726 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
3727 renamed to "classification" and can any integer as value.
3728 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
3731 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3733 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3734 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
3735 don't prepend anything to the class and id named. Instead, we
3736 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
3739 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3741 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
3742 -rolesOfUser:logininContext:context]): if object does not exists
3743 (for example when it's being created), the current user has the
3744 same rights on it than he/she has on its parent container.
3746 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3747 -nameExistsInFolder:objectName]): methods that tests if a c_name
3748 corresponding to the name passed as parameter is present in the db
3751 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3753 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3754 -rolesForObject:objectinContext:context]): test for
3755 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
3757 * SoObjects/Appointments/SOGoCalendarComponent.m
3758 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
3759 returns the roles of the user on the container object if the event
3762 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3764 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
3765 alternativeViewer a multipart/related message is being handled.
3767 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
3770 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
3771 text/html component before text/plain.
3773 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3774 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
3775 fetching of HTML parts.
3777 * SoObjects/Appointments/SOGoCalendarComponent.m
3778 ([SOGoCalendarComponent -componentTag]): new template method that
3779 returns the vcalendar tag of the current object.
3780 ([SOGoCalendarComponent -component]): new method that returns the
3781 first object matching [self componentTag] within the current
3782 calendar object. This method replaces 'firstEventInCalendar:' as
3783 well as "firstTaskInCalendar:".
3784 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
3785 moved method from SOGoAppointmentObject.m.
3787 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3789 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
3790 module which shows each selected user's calendar in a different
3791 column instead of mixing their events together.
3793 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
3794 replaced use of [NSString stringByTrimmingWhiteSpaces] with
3795 [NSString stringByTrimmingSpaces].
3797 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
3798 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
3801 * UI/Scheduler/UIxCalDayOverview.m,
3802 UI/Scheduler/UIxCalDayChartview.m,
3803 UI/Scheduler/UIxCalDayListview.m,
3804 UI/Scheduler/UIxCalWeekOverview.m,
3805 UI/Scheduler/UIxCalWeekChartview.m,
3806 UI/Scheduler/UIxCalWeekListview.m,
3807 UI/Scheduler/UIxCalInlineMonthOverview.m,
3808 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
3810 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3812 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3813 -appendPersonalSourcesInContext:context]): release connectoin
3814 channel when everything is done.
3816 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3817 -newAbAction]): new action method to crate a new contact folder
3820 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
3821 that requests the folder manager to create a folder table with the
3822 specified type at the specified path. The type is taken from [self
3825 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3826 -folderType]): implemented.
3828 * SoObjects/Appointments/SOGoAppointmentFolder.m
3829 ([SOGoAppointmentFolder -folderType]): implemented.
3831 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3832 -appendPersonalSourcesInContext:context]): we now fetch all
3833 folders with type "Contact" that belong to the current user.
3834 ([SOGoContactFolders -newFolderWithName:name]): new method to
3835 create a new contact folder.
3837 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
3838 resulting url with [NSString+Utilities hostlessURL] instead of
3839 using NSURL. This is because the url in question sometimes has a
3840 hostname and sometimes not. "hostlessURL" ensure the hostname is
3842 ([UIxComponent -applicationPath]): same as above.
3844 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
3846 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
3847 folders before doing the one on messages.
3849 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3851 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
3852 makeObjectsPerform:withObject:withObject: for GNUstep
3855 * OGoContentStore/GNUmakefile, Protocols/common.make,
3856 SoObjects/common.make, UI/common.make: install in
3857 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
3859 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
3861 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
3864 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3866 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
3867 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
3870 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3871 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
3872 password would be accepted anyway as long as its length was > 0.
3873 This can be the case ONLY when LDAP is disabled otherwise we have
3874 a serious security issue...
3876 * SoObjects/Appointments/SOGoAppointmentObject.m
3877 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
3878 user is not an organizer nor a participant, he is declared as
3879 "Owner" if he owns the calendar the entry where the entry is
3880 contained. Other cases should not be possible.
3882 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3884 * UI/Contacts/UIxContactEditor.m: display and handle the new
3887 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3888 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
3891 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3892 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
3895 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3897 * SoObjects/Appointments/SOGoCalendarComponent.m
3898 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
3899 returns the value of ud "SOGoAppointmentSendEMailNotifications"
3901 ([SOGoCalendarComponent
3902 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
3904 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3906 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3907 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
3908 so that the mailbox cache is refreshed everytime the user presses
3909 on "get mail". I doubt a mailbox cache really is useful in general
3912 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3914 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3915 -userInContext:]): if the lookup is on "freebusy.ifb" and the
3916 username is "anonymous" the user is automatically set to
3919 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3921 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3922 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
3923 user with password "freebusy".
3925 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
3926 -contentAsString]): the default timerange is now 14 days before
3927 currentday and 1 month after.
3929 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3931 * SoObjects/Appointments/SOGoAppointmentFolder.m
3932 ([SOGoAppointmentFolder
3933 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
3934 escape the record string in a way suitable with XML encoding.
3936 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3938 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
3939 calendar view would not be updated properly.
3941 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3943 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3944 -newStartDate]): fix the handling of the component start date
3945 depending on the "hm" and the "day" parameters.
3947 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3948 -roleOfUser:uidinContext:context]): set role of current user to
3949 "Assistant" if the object that is accessed is "freebusy.ifb".
3951 * SoObjects/Appointments/SOGoAppointmentFolder.m
3952 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
3953 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
3954 ([SOGoAppointmentFolder
3955 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
3956 lookupCalendarFolderForUID: method, which doesn't do security
3959 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3961 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
3962 accessor that returns the comma-separated list of users with role
3964 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
3965 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
3966 "checkedUsers". Instead, each user is either classified in the
3967 list of assistants or the list of delegates.
3969 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3971 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
3972 -composeAction]): method imported from removed container modules.
3973 ([UIxMailMainFrame -mailFolderName]): method imported from removed
3976 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
3977 for wrapping UIxMailView with the "popupview" action.
3979 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
3980 since its the component that displays the same splash screen than
3981 the one in Thunderbird/Icedove.
3983 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
3984 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
3985 UI/MailerUI/UIxMailListViewContainer.[hm],
3986 UI/MailerUI/UIxMailViewContainer.[hm]: removed
3988 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3990 * UI/WebServerResources/HTMLElement.js: replaced the functional
3991 selectNode() and deselectNode() functions with select() and
3992 deselect() methods of HTMLElement.
3994 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
3995 events are initialized from here now instead of in the HTML code.
3997 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3998 -checkRightsAction]): new method similar to the one with the same
3999 name in UIxCalMainView.m.
4001 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
4002 code to handle the publishing of freebusy information.
4004 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4006 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4007 -checkRightsAction]): new action method that returns a
4008 comma-separated list of boolean values matching the right of the
4009 current user to "view" (as a permission) each foreign calendar
4010 stored in his preferences.
4012 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
4013 new method that sets a customOwner, which can be returned with
4014 ownerInContext it set.
4016 * SoObjects/Appointments/SOGoAppointmentFolder.m
4017 ([SOGoAppointmentFolder
4018 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
4020 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4022 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
4023 below, but for the Contacts and Calendar collections.
4025 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
4026 new acl facilities method from sope-gdl/GCSFolder.m.
4028 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
4029 -roleOfUser:uidinContext:context]): new method that returns
4030 SOGoRole_Assistant when the user is an assistant or a delegate on
4031 the "personal" ab object. This is so that setting roles on the
4032 SOGoContactFolders object is not required.
4034 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4036 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
4038 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
4039 to the handling of the user selection for the acls.
4041 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
4042 values from SoPermissions with ones specific to SOGo.
4044 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
4045 handles the storage for the acls.
4047 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
4048 class for SOGoAppointmentObject and SOGoTaskObject.
4050 * UI/Common/UIxAclEditor.[hm]: new component that provides a
4051 general editor for folder acls.
4053 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
4055 ([NSString -davMethodToObjC]): method that returns the method name
4056 for a DAV property implementation.
4058 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
4060 ([NSArray -stringsWithFormat:format]): new method that returns
4061 formatted occurences of the strings stored in the array.
4063 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
4064 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
4065 subclass module of SoWebDAVValue that supports collections of
4066 properties of the same type.
4068 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4070 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
4071 -lookupFolder:ofClassNamed:inContext:]): added the ability to
4072 configure the name of the SOGoDraftFolders with the ud var
4073 "SOGoDraftsFolderName".
4075 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4077 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
4078 -userTimeZone:username]): new method that returns the timezone for
4079 the specified user depending on his preferences and the server
4082 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
4083 -stringForData:partInfo:]): take the encoding into account and
4084 translate the text to "normal" before processing the charset data.
4086 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4088 * UI/WebServerResources/generic.js: the progress indicator is on
4089 when loading the page so we turn it off, and we turn it back on
4090 whenever we switch to another module...
4092 * UI/WebServerResources/SchedulerUI.js: make sure the day view
4093 synchronization mechanism works everywhere.
4095 * UI/WebServerResources/generic.js: the log window is not only
4096 visible when UIxDebugEnabled is set.
4098 * UI/WebServerResources/SchedulerUI.js: the month overview's day
4099 cells are now initialized with the DOM event interface methods
4100 instead of with html attributes.
4102 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
4103 headers (should be made configurable at some point)...
4105 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
4106 "not null" constraint on startdate, enddate, isopaque,
4107 participants and partmails.
4109 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4111 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
4112 -hoursToDisplay]): prevent a crash by retaining the
4113 "hoursToDisplay" array after it's created.
4114 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
4115 clickable hours DIV.
4117 * UI/WebServerResources/SchedulerUI.js: made the event
4118 participation status modification asynchronous, which also fixes a
4119 bug where the window would sometimes close before the accept or
4120 decline action was completed. Also, adapted the event handling
4121 related to the days or weeks view with the new DIV-based layout.
4123 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
4125 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
4126 DIV-based presentation of the days and weeks.
4128 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
4130 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
4131 might return an exception so we have to handle it if we don't
4134 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4136 * UI/WebServerResources/SchedulerUI.js: updated the list
4137 initialization code to use the new event management scheme, adding
4138 what was missing to be able to delete events and tasks again.
4140 * UI/WebServerResources/MailerUI.js: added code to activate the
4141 "Get mails" button. Fixed a bug which prevented messages to be
4144 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
4145 navigation and focus handling of INPUTs.
4147 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4149 * UI/WebServerResources/MailerUI.js: added code to handle the
4150 possible drag and drop events to manager in the mail module.
4151 Moving messages, opening parent folders, ...
4153 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
4154 the drag and drop manager as well as the interface to HTMLElement
4155 to trigger drag and drop events.
4157 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
4158 action to move the current message to the mailbox named after the
4159 value of parameter "tofolder".
4161 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
4162 -moveToFolderNamed:folderNameinContext:]): new method base on
4165 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4167 * UI/WebServerResources/generic.js: added and activated many
4168 "load" handlers to configure generic widgets used across the
4169 modules. More events are now handled in a DOM-fashion way instead
4170 of by setting the relative attributes in the templates.
4172 * UI/Templates/UIxSortableTableHeader.wox: all the events are
4173 declared from the javascript DOM onload handlers.
4175 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
4178 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
4179 declared from the javascript DOM onload handlers.
4181 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
4182 we want everything to be separated from each other, as much as
4185 * UI/WebServerResources/SOGoDragHandles.js: new module containing
4186 the "SOGoDragHandlesInterface", implementing methods that can be
4187 attributed to DIV so that they can be used as drag handles.
4189 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
4190 -asQPSubjectString]): initialize the tmp strings with '0' to make
4191 sure they don't contain garbage.
4193 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4195 * UI/WebServerResources/MailerUI.js: register the messageList
4196 table as a dragging source and the leaf of the navigation tree as
4197 dnd destinations to the DNDManager.
4199 * UI/WebServerResources/generic.js: initialize tabs from the
4200 "unload" event listener that is added programmatically instead of
4201 from the template... Also, added the new DNDManager object.
4203 * UI/WebServerResources/HTMLTableElement.js: added code to
4204 simulate XUL drag n drop events. This code will possibly be moved
4205 to HTMLElement.js instead later...
4207 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4208 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
4211 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4212 -_qualifierForFilter:filter]): only search records which starts
4213 with the specified pattern.
4215 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4217 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
4218 -asQPSubjectString]): new method that returns the special QP
4219 string with its qp declaration for email subjects.
4220 ([SOGoDraftObject -bodyPartForText])
4221 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
4222 double-encode data in UTF-8.
4224 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4225 -newStartDate]): new method to determine the start date depending
4226 on the URL parameters, the current day and the current time.
4227 ([UIxComponentEditor -toolbar]): new method to determine the
4228 filename of the toolbar that should be drawn depending on the
4229 ownership and the list of attendees of the task/event wrt to the
4232 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4233 -setDayStartHour:aStartHour]): adjust the minutes to the next
4234 quarter of hour, if not already set to a quarter.
4236 * UI/WebServerResources/UIxAppointmentEditor.js,
4237 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
4240 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4242 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4243 -loadValuesFromComponent:component]): handles access class
4244 (privacy) and status.
4246 * UI/Contacts/UIxContactsListViewContainer.m
4247 ([UIxContactsListViewContainer -additionalFolders]): return nil if
4248 [self additionalAddressBooks] returns an empty string.
4250 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4252 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
4253 rangesOf7Days]): enhanced and debugged algorithm to feed the array
4254 with slices where the first day is still in the requested month.
4256 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
4259 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
4260 of events in the day boxes of the calendar's monthly view.
4262 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
4263 -davContentType]): declare "text/calendar".
4265 * SoObjects/Appointments/SOGoAppointmentObject.m
4266 ([SOGoAppointmentObject -davContentType]): declare
4269 * SoObjects/Appointments/SOGoAppointmentFolder.m
4270 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
4271 HTTP methods are handled by SOPE and requires nil to be returned,
4272 this method now invokes the new
4273 "requestNamedIsHandledLater:inContext:" method to check that.
4274 ([SOGoAppointmentFolder
4275 -requestNamedIsHandledLater:nameinContext:context]): new methods
4276 that returns "YES" only for the "OPTIONS" http method (for now...).
4277 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
4278 overloaded method to append the "access-control" and
4279 "calendar-access" DAV abilities to the initial declaration.
4281 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
4282 imitate the look of Sunbird/Lightning's monthly view.
4284 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
4285 UIxCalMonthViewOld.[hm].
4287 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4289 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
4290 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
4292 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
4293 returns an image name based on the participation status of the
4296 * UI/WebServerResources/SchedulerUI.js: same strip down as for
4299 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
4300 ([UIxContactsListViewContainer -additionalFolders])
4301 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
4302 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
4303 methods to handle the external addressbooks a user has subscribed
4304 too, by retriving them from his preferences.
4306 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4307 -updateAdditionalAddressBooksAction]): new method that updates the
4308 user settings with the list of addressbook he has subscribed to.
4310 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
4311 module for the address book selector.
4313 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
4314 a toolbar with two buttons ("add" and "remove") to manage the
4315 additional addressbooks a user might subscribe to.
4317 * UI/WebServerResources/ContactsUI.js: added code to handle
4318 "external addressbooks" from the Javascript point-of-view, by
4319 extending existing methods and adding code for the "add ab" and
4320 "remove ab" buttons.
4322 * UI/WebServerResources/generic.js: moved extensions methods to
4323 DOM elements to separate files for better clarity.
4325 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
4326 new method that returns "pageContent" as class, but also "popup"
4327 for the DIV where the page content lies, so that we can manipulate
4328 the content of popup's with CSS identifiers.
4330 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4332 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4333 -displayStyle]): new method that returns a string containing the
4334 css style relative to the current appointment cell. This code is
4335 currently inactive but might be reused later.
4337 * UI/WebServerResources/SchedulerUI.js: added code to handle the
4338 display of the selected day (the day pointed by the mouse, or the
4339 current day when changing the view).
4341 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
4342 -dayCellClasses]): new method that returns a string containing the
4343 css classes applicable to the current cell, depending on the
4344 position of the day in the week, the day of today and the
4347 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
4348 -currentContactAptBorder]): new method that returns the
4349 appropriate border color for the specified user.
4351 * SoObjects/Appointments/SOGoAppointmentObject.m
4352 ([SOGoAppointmentObject
4353 -saveContentString:contentStringbaseVersion:baseVersion]):
4354 overloaded method that parse new events and detects if they have
4355 an organizer or not. If they are new and have no organizer set
4356 (Sunbird/Lightning...), the owner of the event is set as
4359 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
4360 category that provides facility methods and interfaces to the
4363 * SoObjects/Contacts/product.plist: give full access to ANY
4364 authenticated user, not just the owner (to every objects...).
4366 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4368 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
4369 every replica widgets are declared as such to their master
4370 counterpart. Take the days into account when displaying the time
4371 range taken by the appointment.
4373 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
4374 -getICalPersonsFromValue:selectorValue]): method taken from
4375 UIxFreeBusyUserSelector, that is shared both by
4376 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
4378 * SoObjects/Appointments/SOGoAppointmentFolder.m
4379 ([SOGoAppointmentFolder
4380 -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.
4382 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
4383 derived and taken as a subset of UIxFreeBusyUserSelector that
4384 implements the table part of the FreeBusy view. Most of the
4385 methods of UIxFreeBusyUserSelector relative to that table were
4386 moved into UIxFreeBusyUserSelectorTable, which can also be used as
4387 a standalone view for AJAX operations.
4389 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4391 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4392 -vCard]): change reverted.
4394 * UI/Contacts/UIxContactEditor.m: check whether the client contact
4395 folder has selector "globallyUniqueObjectId" before calling that
4398 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4399 -vCard]): the "setVClass" NGVCard method really is "setClass"
4402 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4403 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
4404 request the "streetAddress" instead of the "streetaddress".
4405 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
4406 mails that *contain*, and not just *start with* the search
4409 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4410 -vCard]): mark address returned from LDAP as the work address.
4412 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
4413 span covered with the anchor, not only the textual information
4416 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
4417 argument (event or task) to newEvent in the appointmentListMenu.
4418 Make the appointmentsListView display the appointmentsListMenu.
4420 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
4421 12 to 50 before displaying "...".
4422 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
4423 if its length > 0, whether location itself is nil or not...
4424 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
4425 of which the length > 0.
4427 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4429 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
4430 french and ISO dates.
4432 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
4433 from UIxContactSelector to handle contact lists (current and
4434 additional contacts).
4436 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4437 -_freeBusyAsText]): added handling of an "additional"-named query
4438 parameter that describe the number of additional days after
4439 enddate that should be returned.
4441 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4442 -_responseForResults:results]): give priority to results with
4443 "c_uid" fields. If none returned, use the first contact received.
4445 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4446 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
4447 2 and "CANCELLED" to 0.
4449 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4451 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
4452 of start and end dates to short string dates.
4454 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4455 -readFreeBusyAction]): new method that returns an array of numbers
4456 corresponding to the state in the freebusy of each "quarter of an
4457 hour" between the "sday" and "eday" date parameters passed in the
4458 url. This permits to handle the display of the freebusy with Ajax
4460 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
4461 since the free busy displays 2 days ahead.
4463 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4464 -contactSearchAction]): new action that returns the uid and the
4465 username + email of the user whose name contain the value of the
4466 "search" url parameter.
4468 * SoObjects/Appointments/SOGoAppointmentFolder.m
4469 ([SOGoAppointmentFolder
4470 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
4471 useful for the computing of the status of the freebusy.
4473 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
4474 -init]): new component that incarnates a user selector for events
4475 inspired by the new one found in Thunderbird Lightning.
4477 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4479 * UI/WebServerResources/generic.js: added code to enable or
4480 disable anchor visually (following our internal algorithm).
4482 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
4483 added new "url" ivar with its classic accessors.
4484 ([UIxComponentEditor -urlButtonClasses]): new method that returns
4485 the class strings for the url button on the appointment/task
4486 editor (depending on the validity of the url).
4488 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
4489 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
4490 the template to match the Lightning's new task/appointment editor.
4492 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
4494 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
4496 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4498 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4499 ([SOGoContactLDAPFolder
4500 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
4502 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
4503 iCalEntityObject instances instead of just iCalEvent's.
4505 * SoObjects/Appointments/SOGoAppointmentFolder.m
4506 ([SOGoAppointmentFolder
4507 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
4509 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
4510 bad way of handling ownership that way.
4512 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4513 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
4514 on "cn", just like Mozilla.
4516 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4518 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
4519 "to" should be retained, otherwise it will be autoreleased and a
4522 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4523 -writeAction]): updated method to fetch the card before initing
4526 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4527 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
4530 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
4531 -iCalStringTemplate]): start and due date are now optional.
4533 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4534 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
4535 appropriate accessors to be settable through the templates.
4537 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
4538 new "isDisabled" ivar with appropriate accessors to be
4539 settable through the templates.
4541 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4542 -availableCalendars]): new method that list the calendars to which
4543 the user has subscribed.
4544 ([UIxComponentEditor -componentOwner]): returns the owner of the
4547 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4548 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
4549 quickentries to null whenever each or all of them are null, by
4550 providing an impossible timestamp from with NSNotFound as value.
4552 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4554 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
4555 that handles the creation of new fields with the new APIs and the
4556 new node structure on the page.
4558 * UI/Scheduler/UIxAppointmentEditor.m,
4559 UI/Scheduler/UIxTaskEditor.m:
4560 refactored to user UIxComponentEditor as parent class.
4562 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
4563 containing the methods common to the UIxTaskEditor and the
4564 UIxAppointmentEditor.
4566 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4568 * SoObjects/Appointments/SOGoAppointmentFolder.m
4569 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
4570 the handling of time-ranges.
4572 * UI/WebServerResources/ContactsUI.js: specify a notification type as
4573 parameters when onConfirmContactSelection in invoked.
4575 * UI/WebServerResources/generic.js: specify a notification type as
4576 parameters when onContactRemove in invoked.
4578 * UI/WebServerResources/SchedulerUI.js: when the user deselects
4579 all calendars, select his entry.
4581 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4583 * UI/WebServerResources/SchedulerUI.js: edit and delete events
4584 with their owner-relative urls. Generate a correct entry in the
4585 css color table when a user is added to the calendars list. Put
4586 the same color next to the user id.
4588 * UI/WebServerResources/generic.js: implemented some new helper
4591 * SoObjects/Appointments/SOGoAppointmentFolder.m
4592 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
4593 entries if their owner is not the current user.
4595 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4596 -displayClasses]): return the correct class for the current event
4597 representation depending on its owner.
4599 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
4600 and associate a color for each user login depending on its
4601 position in the list.
4603 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
4604 -currentRowCSSClass]): return the correct class for the current
4605 row depending on the owner of the event.
4607 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4608 -setColors:colors]): new method to associate a color table with
4609 each user in the list.
4611 * SoObjects/Appointments/SOGoAppointmentFolder.m
4612 ([SOGoAppointmentFolder
4613 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
4615 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
4616 NSObject to associate an instance with a user.
4618 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4620 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
4623 * UI/WebServerResources/ContactsUI.js: added handling of
4624 notification of changes to contact selectors.
4626 * UI/WebServerResources/generic.js: added handling of notification
4627 of changes to contact selectors.
4629 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4630 -updateCalendarsAction]): proxy method to update the user
4631 preference table with the new selected calendar uids.
4633 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
4634 -calendarsContactsAction]): new method.
4636 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
4637 ([UIxContactSelector -setHasCheckBoxes:aBool])
4638 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
4639 permit the drawing of checkboxes instead of card icons.
4641 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
4642 wrap a selector the the "Calendars" tab.
4644 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
4645 new user calendar selector.
4647 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4649 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
4650 may cover hour 0 to hour 23.
4652 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4653 -iCalStringFromQueryParameter:format:]): dates explicitly set to
4656 * UI/WebServerResources/SchedulerUI.js: manage both lists of
4657 objects wrt to the toolbar actions.
4659 * UI/WebServerResources/generic.js: added code to the "String"
4660 class to decode number-encoded char entities.
4662 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4663 -batchDeleteAction]): new method to delete selected entries in the
4666 * SoObjects/Appointments/SOGoAppointmentFolder.m
4667 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
4668 that delete identified entries in batch.
4670 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4671 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
4673 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
4674 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4675 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
4676 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4678 return a UIxJSClose component if everything went fine.
4680 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
4683 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
4684 UIxAppointmentEditor.m.
4686 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
4687 a very light page with javascript code to close a window, by
4688 calling a method on the opener if specified. This component is
4689 designed to work as a response to form postings.
4691 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4693 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
4694 SOGoAppointmentObject adapted for the handling of tasks.
4696 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
4697 extracted from SOGoAppointmentObject.
4699 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4700 -saveUrl]): returns the url needed to POST the new form to.
4701 redirect the user to <aptid>/editAsAppointment instead of /edit,
4702 so that SOGoAppointmentFolder can return the correct object type.
4704 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
4705 -compareAptsAscending:_other]): accept empty start or end dates.
4707 * SoObjects/Appointments/SOGoAppointmentFolder.m
4708 ([SOGoAppointmentFolder
4709 -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.
4710 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
4711 components of type "vtodo" as well as "vevent".
4712 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
4713 url specified ends with AsTask or AsAppointment, returns the
4714 an object of the appropriate class, otherwise deduce it from its
4715 content if the HTTP method is "PUT", otherwise read its type from
4718 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4719 -extractQuickFieldsFromTodo:_task]): extract quick fields from
4722 * UI/Scheduler/UIxCalView.m ([UIxCalView
4723 -fetchCoreAppointmentsInfos]): replacement methods for
4724 fetchCoreInfos but by retrieving object with component "vevent".
4725 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
4728 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
4729 UIxCalAptListView adapted for the handling of tasks.
4731 * UI/Scheduler/UIxTaskProposal.[hm],
4732 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
4733 clones of the UIxAppointment* classes for the handling of tasks.
4735 * UI/WebServerResources/UIxTaskEditor.js: clone of
4736 UIxAppointmentEditor adapted for the handling of tasks.
4738 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
4739 Scroll the daily view to the appropriate hour when an appointment
4740 is selected in the appointments list.
4742 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4744 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4745 -setDayStartHour:aStartHour]): specifies the user timezone on the
4748 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
4751 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
4752 ([NSCalendarDate -driftedDate]): methods made useless by a better
4753 comprehension of the NSTimeZone API...
4755 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4757 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
4758 new methods from the NSCalendarDate methods.
4760 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
4761 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
4763 +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).
4764 ([NSCalendarDate -adjustedDate]): this method returns another
4765 instance set to the correct hour after the original date was set
4766 from a non-GMT timezone. This date can be used for storage.
4767 ([NSCalendarDate -driftedDate]): this method does exactly the
4768 opposite of -adjutedDate, that is, it enables the method
4769 hourOfDay, minuteOfHour etc... to return the values according to
4770 the original date's timezone. This date CANNOT be used for storage.
4772 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
4773 -shortDateString]): new method that will return a "short date
4774 string" (yyyymmdd) from a calendar date object.
4776 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4777 -_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.
4779 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
4780 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
4782 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4784 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
4785 view of the day at the height of hour 8:00.
4787 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
4788 ([UIxCalView -dayEndHour]): returns 24.
4790 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
4791 ([UIxContactFoldersView -newAction]): invoke
4792 _selectActionForApplication: on self with the proper attribute too.
4794 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
4795 we now use the action mechanism in UIxContactsListView to keep the
4796 same view for the contact selectors and the regular contact view.
4798 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
4799 UIxContactsListViewContainerBase.[hm]
4801 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
4803 * UI/WebServerResources/generic.js: generalized emailstring
4804 handling functions. Generalized address book access functions.
4806 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4807 -isPopup]): return YES if the "popup" query parameter is set.
4809 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4810 -defaultAction]): keep the url parameters when redirecting.
4811 ([UIxContactFoldersView -selectForSchedulerAction])
4812 ([UIxContactFoldersView -selectForMailerAction]): new action
4813 methods for the /scheduler-contacts and /mailer-contacts invocations.
4815 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
4816 newly available NSString+URL category.
4818 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
4819 -asURLParameters]): handle dictionary entries which could be
4820 instances of NSArray rather than NSString.
4822 * SoObjects/SOGo/NSString+URL.m ([NSString
4823 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
4824 ([NSString -urlWithoutParameters]): new method that returns the
4825 url without its parameters.
4827 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
4829 * SoObjects/SOGo/NSDictionary+URL.[hm],
4830 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
4832 * UI/WebServerResources/UIxMailEditor.js: add support for
4833 additions of different types (to, cc, bcc) of recipients from the
4836 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
4839 * UI/Contacts/UIxContactsMailerSelection.m,
4840 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
4841 UI/Contacts/UIxContactsSelectionView.m to provide a different set
4842 of widgets depending on the application invoking the contact list.
4844 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4846 * UI/WebServerResources/ContactsUI.js: hide the current contact
4847 whenever the user changes of contact folder.
4849 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
4850 now provided by the template when loading the page.
4852 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4853 -iCalPersonWithUid:uid]): new method taken from removed module
4856 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4858 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
4859 -categoriesAsString]): same as below.
4861 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
4862 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
4864 * SoObjects/Appointments/SOGoAppointmentObject.m
4865 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
4866 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
4869 * SoObjects/Appointments/SOGoAppointmentFolder.m
4870 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
4871 hackish test to detect whether the request concernes VEVENT's or
4872 anything else. Return events only in the former case.
4873 ([SOGoAppointmentFolder
4874 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
4875 c_name quickfield so that the calendar list can identify the
4876 appointments with their complete "filename".
4878 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
4879 groupsOfClass:fromSource: to parse the given vcalendar.
4881 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
4883 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
4885 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
4888 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
4890 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4892 * SoObjects/Appointments/SOGoAppointmentFolder.m
4893 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
4894 sensitive to the CalDAV method names.
4895 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
4896 "calendar-query" CalDAV method name.
4898 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
4899 code coming originally from MailerUI.js.
4901 * UI/WebServerResources/UIxContactEditor.js: imitate the
4902 Thunderbird address book by completing the display name with the
4903 content of the first and last name fields, until the display name
4904 is modified manually.
4906 * UI/WebServerResources/generic.js: added a "trim" method to the
4909 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4910 -displayName]): new method that returns the display name from "cn"
4911 or from the "displayName" key if found.
4913 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4914 -initSnapshot]): check if "[card n]" returns anything to avoid a
4917 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
4918 that returns an unparsed doctype definition for the pages.
4920 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4921 -vCard]): set the card's fn to attribute "displayName" if found
4924 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4926 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4927 -vCard]): handle the "streetAddress" and "l" fields.
4929 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
4930 header fields by converting the tables to DIVs and SPANs.
4932 * UI/WebServerResources/generic.css: attempted unification of font
4933 families and size across all the elements. changed the
4934 logConsole's "position" from "fixed" to "absolute" to avoid
4937 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4939 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
4940 empty the contact view when the current contact is being deleted.
4942 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
4943 parse the email field and provide the address full name if found
4944 as the "contactFN" parameter.
4946 * UI/WebServerResources/generic.js (openMailTo): do not give a
4947 name to the opened window so that serveral ones can be opened at
4950 * UI/MailPartViewers/UIxMailPartTextViewer.m
4951 ([UIxMailPartTextViewer -flatContentAsString]): override method by
4952 replacing carriage returns with "<br />" in the result string from
4953 super's implementation.
4955 * UI/Contacts/UIxContactView.m ([UIxContactView
4956 -_urlOfType:aType]): don't manage non-mailto urls through
4957 javascript, let the user decide what's best for him.
4959 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4960 -newAction]): transfer all the query parameters by using the
4961 "asURLParameters"'s result string from [self queryParameters].
4963 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4964 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
4965 query parameters and put their values (if any) into the snapshot.
4967 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
4968 carriage-returns to "<br />".
4969 ([UIxContactView -workCompany]): explicitly initialize company to
4970 nil if org is nil or empty.
4972 * UI/WebServerResources/UIxContactEditor.js: updated validation
4973 code after we added and renamed some fields.
4975 * UI/WebServerResources/ContactsUI.js: added code to cache contact
4976 cards and to handle card updates.
4978 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4980 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
4981 test the length of the returned string since they will never be
4984 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
4985 return self if the process went successful, returns an exception
4986 otherwise (and only otherwise...).
4988 * OGoContentStore/OCSContactFieldExtractor.m
4989 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
4990 adapted method to the new VCard api. Since the cards are stored in
4991 vcard format, we no longer deal with a dictionary but with a
4994 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4996 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
4997 return a string with a "mailto" url.
4998 ([UIxContactView -_urlOfType:aType]): generic method to return a
4999 url string with a html anchor pointing to it.
5001 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
5002 since subclass "UIxContactEditor" did nothing. Implemented code to
5003 display and modify the values parsed from the vcards, displayed in
5004 a way similar to the Thunderbird addressbook.
5006 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
5007 -save]): new dummy method.
5009 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
5010 -save]): made method void.
5012 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5014 * UI/Contacts/UIxContactView.m: added many wrapper methods to
5015 display blocks of data à la Thunderbird Addressbook. If data is
5016 available, those wrappers (around the NGVCard methods) will
5017 enclose the results in a proper HTML output with the correct label
5018 (if present), otherwise it will return an empty string.
5019 ([UIxContactView -vcardAction]): new action to return the contact
5020 as text/vcard (for exporting).
5022 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
5023 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
5025 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
5026 -vCard]): create a new NGVCard instance when no data is available
5028 ([SOGoContactGCSEntry -save]): save the vCard using the new
5029 "versitString" API method/message.
5031 * UI/Contacts/UIxContactView.h: separated interface from
5034 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
5035 views and display them beneath the list.
5037 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5039 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
5040 the timezone even when it's the server timezone.
5042 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5043 -privateContacts:inContext:]): no long configure the calendar
5044 object with the user's timezone since it's now accessible
5045 application-wide throught the SOGoObject methods.
5047 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
5048 method. Removed the "backendTimeZone" method.
5050 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
5051 instead of SoComponent.
5053 * SoObjects/Appointments/SOGoAppointmentObject.m:
5054 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
5055 [self serverTimeZone] instead of "EST" (which was removed).
5057 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
5058 "timeZone" ivar and its accessors.
5060 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
5061 centralized method returing the timezone configured in the
5062 userdefaults db or "Canada/Eastern" if missing.
5063 ([SOGoObject -userTimeZone]): new centralized method returing the
5064 timezone of the current user or the server timezone if missing
5065 from the user configuration table.
5067 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5069 * UI/WebServerResources/SchedulerUI.js: implemented caching of
5072 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
5073 return a path based on the object's context instead of the first
5074 level in SOGo's object hierarchy...
5076 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5078 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
5081 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
5082 timezone ([self viewTimeZone]) to the WEMonthOverview component to
5083 avoid a confusion with the days.
5085 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
5088 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
5089 imitate Sunbird's synchronization between the 3 visible views.
5091 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
5092 sure the numbers in dateString are formatted so as to take 4 chars
5093 for the year and 2 for the day and the month, otherwise
5094 NSCalendarDate will return a nil date.
5095 ([UIxComponent -applicationPath]): return a path based on the
5096 object's context instead of the second level in SOGo's object
5099 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5101 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
5102 user's timezone abbreviation to the date string passed as parameter to
5103 NSCalendarDate to generate an accurate date instance. Do the same
5104 when no date is specified and today is chosen.
5106 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
5107 form's time values to integers before comparing them.
5109 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
5110 ([UIxCalAptListView -currentEndTime]): initialize the resulting
5111 dates timezone with [self viewTimeZone].
5113 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
5114 "viewTimeZone" ivar destined to hold an instance of the user's
5116 ([UIxComponent -viewTimeZone]): take the timezone from the user's
5119 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5121 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
5122 rearranged the layout.
5124 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
5125 manage showing and hiding appointment details.
5127 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5128 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
5129 timezone by taking the current user's timezone setting.
5131 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
5133 * SoObjects/Appointments/SOGoAppointmentObject.m
5134 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
5135 set default timezone to EST, although this code should be
5136 rewritten to handle a system and a user default value.
5138 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
5139 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
5140 take the values from the hour and minute INPUTs when data is
5141 POSTed since we no longer use the UIxTimeSelector component.
5142 ([UIxTimeDateControl -selectableHours])
5143 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
5144 template SELECTs to display reasonable and acceptable values
5145 instead of all the possibilities.
5147 * UI/WebServerResources/generic.js: adapted code for the new
5148 implementation of the UIxContactSelector component (added a
5149 "remove" button, removed the previous INPUT and replaced them with
5150 links of class "button").
5152 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
5153 UIxTimeDateControl.m.
5155 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
5156 ([UIxCalDayTable -currentAppointmentHour]): new methods that
5157 returns correctly formatted values used as attributes for JS code.
5159 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
5160 -initialContactsAsString]): renamed implementation of
5161 initialParticipants.
5162 ([UIxContactSelector -currentContactId])
5163 ([UIxContactSelector -currentContactName]): new methods used when
5164 listing the initial contacts in the widget. Currently, both return
5165 the person's cn but the latter should ultimately return a user
5168 * UI/Contacts/UIxContactSelector.h: separated interface from
5169 UIxContactSelector.m.
5171 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
5172 all javascript code is now put in Scheduler.js/generic.js.
5174 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
5175 moved into NSCalendarDate+Scheduler instead.
5177 * SoObjects/Appointments/SOGoAppointmentFolder.m
5178 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
5179 configure the timezone from SOGoUserFolder when the instance is
5181 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
5182 the value of the new "timezone" ivar.
5184 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5186 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
5187 the date selector in the first page and the container of the
5188 future calendar selector in the second page.
5190 * UI/WebServerResources/generic.js: added code for handling tabbed
5193 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
5194 returns the bundle name associated to the current running product.
5196 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5198 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
5199 exception by invoking a timeout on the opener rather than invoking
5200 the list refresh method.
5202 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
5205 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
5206 ([UIxCalWeekView -prevWeekQueryParameters])
5207 ([UIxCalWeekView -nextWeekQueryParameters])
5208 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
5209 that return the dates relatively to the current day.
5210 ([UIxCalWeekView -lastWeekName])
5211 ([UIxCalWeekView -currentWeekName])
5212 ([UIxCalWeekView -nextWeekName])
5213 ([UIxCalWeekView -weekAfterNextWeekName])
5214 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
5215 methods that returns the label for the corresponding weeks.
5217 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
5218 used by UIxCalDayView and UIxCalWeekView to display the events
5219 occuring in one or more days.
5221 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5223 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
5224 entries in the new "monthMenu" and "yearMenu".
5226 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
5227 method to return the current day as a string formatted depending
5228 on the current locale.
5230 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
5231 ([UIxCalAptListView -endDate]): "today" is now the default filter
5232 for displayed events.
5233 ([UIxCalAptListView -currentSerialDay]): new method returning the
5234 date of the current enumerated appointment in serial form
5237 * UI/WebServerResources/SchedulerUI.js: added code to select the
5238 relevant day when an appointment is selected. Added code to popup
5239 a month and a year menu whenever the header entries are clicked in
5240 the calendar widget.
5242 * UI/WebServerResources/generic.js: made addClassName and
5243 removeClassName methods of HTMLElement.
5245 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5247 * UI/WebServerResources/MailerUI.js: fixed the contact creation
5248 from email addresses.
5250 * UI/WebServerResources/generic.js: centralized the search-related
5251 functions here since the same code was used across the 3
5254 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
5255 ([UIxCalAptListView -endDate]): return the required dates needed
5256 depending on the value given to the "filterpopup" url parameter.
5258 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
5259 code by invoking UIxComponent's labelForKey:.
5261 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
5262 [self pageResourceManager] instead of [self resourceManager].
5264 * UI/Contacts/UIxContactEditorBase.m: invokes
5265 globallyUniqueObjectId on the clientobject's class instead of the
5266 hardcoded "SOGoFolder".
5268 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
5269 -newAction]): redirect the "new" action to the personal (default)
5272 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
5273 +objectWithName:inContainer:]): new constructor.
5275 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
5276 -lookupContactWithId:recordId]): always create a contact object,
5277 even if it does not exist.
5279 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5281 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
5282 component that lays out the different components of SOGoCalendar.
5283 Only serves as an Objective-C counterpart to its xml template.
5285 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
5288 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
5289 display a widget to handle the information displayed in the
5290 appointments list. Not currently used, lacks implementation.
5292 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
5293 display a calendar as a dynamic widget from where one can select
5294 the current visible day.
5296 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
5297 extracted from UIxCalInlineMonthOverview.m.
5299 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
5300 calendarPageURL methods. The javascript code is handled by .js
5301 files as much as possible...
5303 * UI/WebServerResources/ContactsUI.js,
5304 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
5307 * UI/WebServerResources/SchedulerUI.js: implemented functions to
5308 handle the new widgets. XmlHTTPRequest code taken from
5311 * UI/WebServerResources/generic.js: put some functions related to
5312 element selections as methods to HTMLElement and HTMLTableElement.
5314 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
5315 display the list of appointments (embodies the code-size of
5316 UIxCalAptListView; answers to the "aptlist" method).
5318 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5320 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
5321 -correctURLAction]): new short action method replacing the method
5322 below by taking far less code.
5324 * SoObjects/Appointments/SOGoAppointmentFolder.m
5325 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
5326 with an action in the view-related code.
5328 * UI/Scheduler/UIxAppointmentEditor.m: invoke
5329 "stringByEscapingHTMLString" on the resulting value to avoid
5330 issues with accented characters.
5331 ([-jsCode]): removed method since the javascript code was merged
5332 into SchedulerUI.js.
5334 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5336 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
5337 new class method that returns an iCalPerson based on the UID given
5340 * UI/Contacts/UIxContactsListViewContainerBase.m:
5341 UIxContactsListViewContainer renamed to serve as a base class for
5342 the contact lists in both the contact editor and the contact
5345 * SoObjects/Contacts/SOGoContactLDAPFolder.m
5346 ([SOGoContactLDAPFolder
5347 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
5348 setUserIdentifier:setRootDN:]): an LDAP field specifying the
5349 loginname of the users can now be specified.
5351 * UI/WebServerResources/generic.js: added code to manage contact
5352 lists through the new implementation of the UIxContactSelector.
5354 * UI/Templates: put the templates related to SchedulerUI in its
5357 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
5358 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
5359 entry for "uid" with the field name representing the login name of
5360 the user in the corresponding LDAP branch.
5362 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5364 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
5365 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
5366 request is a PUT, always create an entry, even if we're not sure
5369 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5371 * UI/WebServerResources/ContactsUI.js: implemented live-search.
5373 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
5374 -appendSystemSourcesInContext:context]): populated method with
5375 code that creates entries mapped to instances SOGoContactFolder,
5376 based on the configuration found in the NSUserDefaults under the
5377 key "SOGoLDAPAddressBooks".
5378 ([SOGoContactFolders
5379 -lookupName:nameinContext:contextacquire:acquire]):
5380 "contactsources" do not exist anymore, SOGoContactFolder was split
5381 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
5382 and one protocol: SOGOContactFolder, instead.
5383 ([SOGoContactFolders -contactFolders]): new accessor used by the
5384 views of SOGoContactXXXFolder to list the possible sources.
5386 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
5387 defines the methods that UIxContactsView, ..Editor and so on...
5390 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
5391 defines the methods that UIxContactsListViewBase expects as well
5392 as the data fields returned in the contact lists.
5394 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
5395 returns entries an LDAP server. Conforms to the new
5396 SOGOContactFolder protocol.
5398 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
5399 returns a vCard based on contact entries from an LDAP server.
5400 Conforms to the new SOGOContactObject protocol.
5402 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
5403 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
5404 entry for the textual representation of the vCard.
5406 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
5409 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
5410 "SOGoContactObject".
5412 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
5413 method that generates a textual representation of the vcard.
5415 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
5417 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
5418 "SOGoContactFolder".
5420 * SoObjects/Contacts/SOGoContactSource.h,
5421 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
5424 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
5425 -singleAttributeWithName:key]): new method that returns the first
5426 object associated with an ldap key (where generally one value is
5429 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
5430 map the entry into an NSDictionary for processing by
5431 UIxContactsListViewBase.m with the least possible overhead.
5433 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
5436 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5438 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5439 -privateContacts:inContext:]): now returns an instance of
5442 * UI/Contacts/UIxContactsListViewContainer.m
5443 ([UIxContactsListViewContainer -contactFolderName]): new method to
5444 return the absolute path to the current contact folder, called
5445 from within the template.
5447 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
5448 JS code to initialize the 'currentContactFolder' generic var.
5450 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
5451 +contactFolderWithSource:inContainer:andName:]): new class
5452 method meant to return an instance connected to the specified
5453 source. Currently useless but won't be anymore in the next few
5456 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
5457 the "lookupFreeBusyObject" method since it does not exist.
5459 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
5460 as a "view" for the SOGoContactFolders object. Does nothing but
5461 redirect the browser to the URL of the personal address book of
5462 the user. It does not even have a template.
5464 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
5465 implementing the SOGoContactSource protocol. Does nothing
5466 currently but will be used to implement access to the personal
5467 address book of the user stored in the SOGo database.
5469 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
5470 protocol defining an API common to all possible types of contact
5473 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
5474 serving as the root of the contact folders available to the
5475 current user. Correctly lists the contact sources in webdav.
5477 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5479 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
5480 -composeAction]): new action method that permits external object
5481 to write a message from the default (primary) account.
5483 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5484 -initSnapshot]): new method with code taken from "defaultAction"
5485 but needed for others.
5486 ([UIxContactEditorBase -writeAction]): new action designed to
5487 compose the correct URL needed to obtain the MailerUI's email
5488 editor with the correct "mailto" parameter.
5490 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
5491 Common so that other modules can use it.
5493 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
5494 easier to manage both ajax and non-ajax requests.
5496 * UI/Contacts/UIxContactsFilterPanel.m: clone of
5497 UIxMailFilterPanel, but applicable to contact lists.
5499 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
5500 -vcardContentFromSOGoContactRecord]): use the new standard methods
5501 created for each type of entry. If a line is determined to not
5502 contain information, it will be skipped.
5504 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
5505 +initialize]): init defaultMailDomain with the user default
5506 "SOGoDefaultMailDomain".
5508 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5510 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5511 -saveAction]): reorganized methods to only have ONE return point.
5512 Invoke saveRecord: directly on the clientObject instead of
5513 saveContentString, which does the same thing anyway.
5515 * SoObjects/Contacts/NSDictionary+Contact.m
5516 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
5517 method to convert the dictionary returned with the user submission
5518 to a record in VCARD format to be stored in the database.
5520 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5522 * UI/WebServerResources/MailerUI.js: when opening the context menu
5523 of the message list, select the message below the mouse cursor and
5524 deselect the other selected messages temporarily. This mimics the
5525 behaviour of Thunderbird for that matter and was already
5526 implemented for the entries of the folder tree.
5528 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
5529 -iconForMenuItem]): new method that returns the fully qualified
5530 relative URL to the icon representing the mailbox, or the default
5531 mailbox icon if needed.
5533 * UI/SOGoUI/UIxComponent.m ([UIxComponent
5534 -urlForResourceFilename:filename]): automatically return an empty
5535 string whenever the filename passed as argument is nil.
5537 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
5538 "desc" parameter set to 1 so that they are sorted in descending
5539 order by default. Also, added "onHeaderClick()", triggered by
5540 clicking on the message list header elements.
5542 * UI/MailerUI/UIxMailSortableTableHeader.m
5543 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
5545 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5546 -isSortedDescending]): defaults to "YES" when the sort order is
5549 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5551 * UI/WebServerResources/MailerUI.js:
5552 - message cache: set the max num of cached messages to 20. Limit
5553 the cached message size to 30000 bytes.
5554 - ajax: when a message request is called while one is already
5555 being performed, the latter will be cancelled. Idem when
5556 retrieving the content of a mailbox.
5557 - folder tree: when a mailbox is selected because of the URL
5558 requested (initMailboxSelection), the dtree is expanded throughout
5559 the mailbox entry's parent hierarchy to ensure it is made visible
5560 when the page is being displayed. (new function: expandUpperTree).
5561 - mailbox loading: when loading a mailbox where a message was
5562 previously selected, we invoke its url with the "pageforuid"
5563 parameter correctly specified. During callback processing, we scan
5564 the table for the related row and reselect it.
5565 Also, the message area is set blank before loading any mailbox.
5567 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5568 -defaultAction]): if the "pageforuid" parameter is passed in the
5569 url, take its value and invoke [self firstMessageOfPageFor:]
5570 consequently to deduce the first message to display. Otherwise,
5571 set it to "idx", otherwise set it to 0.
5572 ([UIxMailListView -firstMessageOfPageFor:]): new method
5573 that determines the first message of the page where the message
5574 passed as parameter is contained.
5576 * UI/WebServerResources/UIxMailListView.js: removed this module,
5577 its code was put in MailerUI.js instead.
5579 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5581 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
5582 which returns the nodes for the parent specified in "parentMenu".
5583 Used to generate the javascript code for the folder dtree.
5585 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
5586 using that container-template are now using UIxMailMainFrame
5587 since UIxMailPanelFrame had no real interest. File removed.
5589 * UI/WebServerResources/dtree.{css,js}: new files to handle
5590 javascript-generated mailbox tree. Modified from original version
5591 by integrating the previous code with the one we are using for
5592 selections and mailbox handling. Minor visual enhancements too...
5594 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5596 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
5597 returned, put it in an NSArray before returning it (fixes
5600 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5602 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
5603 that returns a url string stripped from its "http://hostname"
5606 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
5608 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
5610 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5612 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
5613 -mailDateFormatter]): retrieve the timezone from the user settings
5614 and pass it to the returned dateFormatter. Also, the dateFormatter
5615 is kept in a static variable to avoid useless
5616 creations/destructions.
5618 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
5619 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
5621 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
5622 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
5623 s/Criteria/Text/ to handle the "criteria" form parameter.
5625 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5627 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
5628 to integrate better with the firefox look&feel. Added entries for
5629 the new "menu" DIV class (popup menus).
5631 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
5632 takes any chunk of text as param, detects the user email and the
5633 optional first and last names and return them in a well-formatted
5634 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
5635 namespace conflict. Added "onMenuClick(node, event, menuId)" to
5636 handle popup menus through "onclick" element attributes (node =
5637 this, event = event and menuId = name of the menu DIV id to
5640 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5641 -snapshot]): add an entry for "email" into the snapshot
5642 dictionary if a "contactEmail" URL parameter was detected and if
5643 the entry for "email" is empty.
5645 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
5646 button now invokes the newContact() js function in ContactsUI.js
5647 instead of opening "new" directly. newContact() pops up a window
5648 stripped from its navigation bar.
5650 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
5651 bundle (AddressBook).
5653 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
5654 "menu" and id "addressMenu" have the header email addresses
5655 display it with the new menu code in generic.js.
5657 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
5658 replaced the body tables with a div of class "pageContent"
5659 (standardization across the page templates).
5661 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
5662 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
5663 those are now inherited from UIxPageFrame.
5665 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
5667 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
5668 a "mailto" URL parameter is detected and the "to" array is empty,
5669 initialize "to" with the value of "mailto" before returning it.
5671 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
5672 -composeAction]): rewrote method in a cleaner way and with usage
5673 of the URL extensions to NSString and NSDictionary (see below).
5674 Also, if a "mailto" url parameter is detected, pass it to the
5677 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
5680 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
5681 returns a parameter string to add to a base URL.
5683 * UI/Common/NSString+URL.m ([NSString
5684 -composeURLWithAction:parameters:andHash:useHash]): new method to
5685 compose a complete URL from an object URL with parameters and an
5686 optional '#' character.
5688 * UI/Common/UIxPageFrame.h: separated interface from
5691 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
5693 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
5695 * UI/WebServerResources/generic.js: added code to manage
5696 selections within HTML containers.
5698 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
5699 added method to determine the possible URL for a product-specific
5700 javascript filename of the forme <productname>.js.
5701 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
5702 ([UIxPageFrame -isPopup]): new method to determine whether the
5703 application navigator bar should be displayed (main page) or not
5706 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
5707 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
5708 the user through LDAP.
5710 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5712 * The toolbar code from the MailerUI product was taken, renamed as
5713 "UIxToolBar" and put into UI/Common. Toolbar plists were created
5714 for the Contacts and Scheduler products and put in their respectir
5715 Toolbars/ subdirectories. Finally,
5716 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
5717 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
5718 and an invocation to the UIxToolbar component was put at the top
5719 of UI/Templaces/UIxPageFrame.wox.
5721 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
5722 within the templates whether a separator should be displayed.
5724 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
5725 that returns NO if the toolbar is empty.
5727 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5729 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
5731 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
5732 new toolbar objects.
5734 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
5736 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
5737 linkbanner as a DIV instead of a TABLE.
5739 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
5741 returns 'YES' to request the display of the navigation bar between
5744 2006-06-15 ludovic@inverse.ca
5746 * It's now possible to set the default
5747 domain using for email using the
5748 SOGoDefaultMailDomain preference key.
5750 2006-06-15 ludovic@inverse.ca
5752 * Initial import of SOGo from trunk.