1 2008-01-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3 * SoObjects/Contacts/SOGoFolder+CardDAV.m ([SOGoFolder
4 -davAddressbookQuery:queryContext]): when empty values are fed to
5 SOGo, their dictionary should be explicitly set to nil.
7 2008-01-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
9 * SoObjects/SOGo/SOGoCache.m ([SOGoCache
10 -registerObject:objectwithName:nameinContainer:container]):
11 register the object and its parents too.
13 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
14 +userWithLogin:newLoginroles:newRoles]): try to retrieve the
15 specified user from the SOGoCache.
17 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
18 -lookupName:lookupNameinContext:localContextacquire:acquire]): try
19 to retrieve the object specified from the cache and returns it if
22 * SoObjects/Appointments/SOGoAppointmentFolder.m
23 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): cache
24 the result in the SOGoCache.
26 * Main/SOGo.m ([SOGo -dispatchRequest:_request]): initialize and
27 kill the shared cache before and after the connection processing.
29 * SoObjects/SOGo/SOGoCache.[hm]: new cache module implementing a
30 per-connection cache mechanism.
32 2008-01-16 Ludovic Marcotte <ludovic@inverse.ca>
34 * Minor adjustments / bug fixes to previous commit.
36 2008-01-14 Ludovic Marcotte <ludovic@inverse.ca>
38 * Added files related to the custom recurrence
39 editor of the SOGo Web interface. The CSS
40 needs to be done correctly.
42 * Fixed a bug in the daily recurrence generator.
43 We now consider the byDayMask, if any.
45 * Moved the repeat/reminder code to the
46 UIxComponentEditor class / template.
48 * Added a few JavaScript methods to HTMLElement.js
50 2008-01-08 Francis Lachapelle <flachapelle@inverse.ca>
52 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
53 -composeAction]): the mailto form parameter can now be a
54 comma-separated list of email addresses.
56 2007-12-21 Ludovic Marcotte <ludovic@inverse.ca>
58 * UI/Contacts/UIxContactView.m
59 Modified -secondaryEmail so that we always get
60 the "last" email address in case no preferred
61 one was specified in the vCard. Also fixed
62 a memory leak in this method.
64 2007-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
66 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
67 -aclsForUser:uid]): removed useless ACL checks on the current
68 object to reduce DB usage.
70 2007-12-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
72 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -attachmentNames]):
73 initialize "attachmentNames" if it was NOT initialized... I think
76 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
77 -fetchMailForForwarding:sourceMail]): append the signature to
78 mails forwarded as attachment.
80 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
81 -clientPart]): new method that returns the corresponding
82 SOGoMailPart instance.
83 ([UIxMailPartViewer -pathToAttachment]): simplified method, ensure
84 the filename is present. If the part has none, create one with the
85 "Untitled-" prefix. Add an extension if none is found.
87 * UI/MailPartViewers/UIxMailPartImageViewer.m
88 ([UIxMailPartImageViewer -pathToImage]): removed method since it
89 implementents exactly the same functionality as
90 [UIxMailPartViewer -pathToAttachment].
92 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
93 -filename]): new method that returns the filename to the current
94 part by taking the different mime implementations into account.
95 [SOGoMailBodyPart -isBodyPartKey:inContext:]: commented out method
96 because we need to handle the part recognition in a different way,
97 by using the prefix "part" for example. One day we will do that.
99 * UI/Scheduler/NSArray+Scheduler.m ([NSMutableArray
100 -reverseArray]): new category method.
102 2007-12-17 Francis Lachapelle <flachapelle@inverse.ca>
104 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
105 -composeAction]): fixed URL when no recipient is specified.
107 2007-12-14 Ludovic Marcotte <ludovic@inverse.ca>
109 * SoObjects/Appointments/SOGoCalendarComponent.m
110 We set headers in lowercase so that they get properly
113 * SoObjects/Mailer/SOGoDraftObject.m
116 2007-12-13 Francis Lachapelle <flachapelle@inverse.ca>
118 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame -saveFoldersStateAction])
119 ([UIxMailMainFrame -getFoldersStateAction]): new methods to get
120 and set the folders state of the user's web view.
122 2007-12-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
124 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -crashAction]): new
125 action methods that generates a segmentation faults.
126 ([SOGoRootPage -exceptionAction]): new method that returns an
128 ([SOGoRootPage -raisedExceptionAction]): new method that raises an
129 exception without returning it.
131 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWithStatus:status])
132 ([UIxComponent -responseWithStatus:statusandString:contentString])
133 ([UIxComponent -responseWithStatus:statusandJSONRepresentation:contentObject])
134 ([UIxComponent -responseWith204]): new utility methods.
136 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
137 -responseWithStatus:statusandString:contentString])
139 -responseWithStatus:statusandJSONRepresentation:contentObject]):
142 * SoObjects/SOGo/NSScanner+BSJSONAdditions.m ([NSScanner
143 -scanJSONStringDelimiterString]): new category module taken from
146 * SoObjects/SOGo/NSDictionary+BSJSONAdditions.[hm]: new category
147 module taken from BSJSONAdditions 1.3.
148 http://blakeseely.com/downloads.html
150 2007-12-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
152 * SoObjects/SOGo/NSString+Utilities.m ([NSString
153 -stringByDetectingURLs]): we now go back until the real start of
156 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
157 -fetchAttachmentIds]): new method that wanders through the mail
158 structure to collect the attachment content ids and to associate
161 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
162 ([_UIxHTMLMailContentHandler
163 -startElement:_localNamenamespace:_nsrawName:_rawNameattributes:_attributes]):
164 the content-ids are now enclosed between "<>" before retrieval
165 from the attachment dictionary.
166 ([UIxMailPartHTMLViewer -cssContent])
167 ([UIxMailPartHTMLViewer -flatContentAsString]): the content-ids
168 are now fetch from the clientobject (an instance of
169 SOGoMailObject) with the new "fetchAttachmentIds" method.
171 2007-12-12 Francis Lachapelle <flachapelle@inverse.ca>
173 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
174 -eventsListAction]): added the state of the calendar's owner with
175 respect to the current event.
177 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
178 -_loadAttendees]): added the retrieval of attendees state on
181 2007-12-12 Ludovic Marcotte <ludovic@inverse.ca>
183 * UI/MailPartViewers/UIxMailRenderingContext.{h,m}
184 Removed template caching which added very little
185 and created re-entrant issues.
187 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
188 Added a hack (and stated so in the source file)
189 to avoid what seems to be a bug in libxml.
191 2007-12-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
193 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
195 ([SOGoContentObject -davLastModified])
196 ([SOGoContentObject -davContentLength]): implemented dav methods.
198 2007-12-10 Francis Lachapelle <flachapelle@inverse.ca>
200 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
201 -GETAction:]): when asAttachment is set to true, the header
202 "content-disposition" is set to "attachment" so browsers like IE
203 and Safari properly asks the user to save the file.
205 2007-12-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
207 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
208 ([UIxMailPartHTMLViewer -flatContentAsString]): when in
209 UIxMailPartAlternative, scan the filenames of potential cid at the
210 same level as our parent.
212 2007-12-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
214 * Main/SOGo.m ([SOGo -run]): the table creation script now have a
215 @{tableName} substitution variable to be substitued with the real
216 table name obtained from the configuration variables.
218 2007-12-07 Ludovic Marcotte <ludovic@inverse.ca>
220 * UI/MailPartViewers/UIxMailRenderingContext.m
221 We treat multipart/appledouble like multipart/mixed
222 for now. That allows the user to save both parts.
224 * Corrected typos in Localizable.string files.
226 2007-12-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
228 * UI/Common/UIxAclEditor.m ([-currentUserIsOwner]): replaced
229 method with -canModifyAcls that invokes the security manager
230 instead for the permission "SaveAcls" on the client object.
232 * SoObjects/Appointments/SOGoCalendarComponent.m
233 ([SOGoCalendarComponent -contentAsString]): securize the returned content.
234 ([SOGoCalendarComponent -aclsForUser:uid]): check whether the user
235 is an organizer or a participant as well.
237 * SoObjects/Appointments/SOGoAppointmentObject.m
238 ([SOGoAppointmentObject -changeParticipationStatus:_status]): the
239 user we should change the status of is not the active user but the
240 owner of the object. This is for delegation.
242 * SoObjects/Appointments/SOGoAppointmentFolder.m
243 ([SOGoAppointmentFolder -fetchContentObjectNames]): fetch the
244 elements through the fetchFields:from:to:title:component: method
245 method, so that the result is already filtered depending on the
248 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
249 -toolbar]): if the current user is a delegate, take the permission
250 "ModifyComponent" into account. Also, do not let him/her modify an
251 event for which he/she is the organizer.
253 * SoObjects/Contacts/SOGoContactLDAPFolder.m
254 ([SOGoContactLDAPFolder -davResourceType]): declared as a carddav
255 addressbook collection.
257 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
258 -davResourceType]): declared as a carddav addressbook collection.
260 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davLastModified]):
261 override SoObject's implementation. Otherwise a localized date is returned.
263 * UI/Common/UIxPageFrame.m ([UIxPageFrame -isCalendar])
264 ([UIxPageFrame -isContacts], [UIxPageFrame -isMail]): getters to
265 determine which module is the current one.
267 2007-12-06 Francis Lachapelle <flachapelle@inverse.ca>
269 * UI/Scheduler/NSArray+Scheduler.m ([NSArray -compareEventsTitleAscending:otherEvent])
270 ([NSArray -compareEventsLocationAscending:otherEvent])
271 ([NSArray -compareEventsEndDateAscending:otherEvent])
272 ([NSArray -reversedArray]): new methods that sort an array of
273 events depending of various parameters.
275 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
276 -eventsListAction]): added support for sorting events.
278 2007-12-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
280 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction])
281 ([UIxMailEditor -sendAction]): make sure that the attachments
282 having the same filename are correctly sequenced (ex: base.ext,
283 base-1.ext, base-2.ext).
285 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
286 -fetchBLOB]): added support for quoted-printable decoding. Also,
287 we return nil if the type is not supported.
289 2007-12-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
291 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -newAction]):
292 create task obejcts with the .ics extension.
294 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
295 -newAction]): create appointment objects with the .ics extension.
297 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -newAction]):
298 create objects with the .vcf extension.
300 * Main/NSException+Stacktrace.m: added missing symbols from
301 NSException.m and NSDebug.m (GNUstep).
303 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
304 -foldersSearchAction]): make use of the new search methods in
305 SOGoUserFolder (see below).
307 * UI/Contacts/UIxContactFoldersView.m ([-foldersSearchAction]):
308 moved method into ../MainUI/SOGoUserHomePage.m.
310 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
311 -foldersOfType:folderTypeforUID:uid]): only return folders owned
312 by the specified user.
314 2007-12-05 Francis Lachapelle <flachapelle@inverse.ca>
316 * SoObjects/Mailer/SOGoDraftObject.m: the condition for replyToAll
317 has to be done later to avoid duplicated to and cc addresses.
319 2007-12-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
321 * SoObjects/Appointments/SOGoAppointmentFolder.m
322 ([SOGoAppointmentFolder -davCalendarQuery:queryContext]): fixed a leak.
324 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder -davSubscribe:localContext])
325 ([SOGoGCSFolder -davUnsubscribe:localContext]): subscribe an
326 unsubscribe from DAV-based accesses. We could be compatible with
327 Microsoft's extensions but we have no need for a "subcription id",
328 so we implement our own.
330 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
331 -POSTAction:localContext]): new method to intercept DAV POSTs,
332 which we now use to implement certain custom commands such as
333 "subscribe" and "unsubscribe".
335 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
336 -davNamespaces]): declare the
337 "urn:inverse:params:xml:ns:inverse-dav" xml ns.
338 ([SOGoUserFolder -foldersOfType:folderTypeforUID:uid]): new method
339 designed to replace the UIxContactFoldersView.m mechanism for
340 displaying folders to subcribe to, as a common code base for both
341 Web and DAV-based subscriptions.
342 ([SOGoUserFolder -foldersOfType:typematchingUID:uid]): same as
344 ([SOGoUserFolder -davCollectionQuery:queryContext]): new method
345 that implement a custom DAV-based protocol query for querying
346 folder based on specified attributes.
348 2007-12-03 Ludovic Marcotte <ludovic@inverse.ca>
350 * Main/NSException+Stacktrace.{h,m} - new files
351 to handle automatic stack trace generation
352 upon an uncaught exception.
354 * Updated the templates and Localizable.string files
355 to fix typos and add new strings.
357 * SoObjects/Mailer/SOGoMailBodyPart.m
358 Fixed attachment retreival when the first character
361 * SoObjects/SOGo/SOGoGCSFolder.m
362 Fixed the sending of emails when folders are created/removed.
363 Notifications are sent if the defaults SOGoFoldersSendEMailNotifications
366 * UI/Common/UIxUserRightsEditor.m
367 * UI/Templates/SOGoACLEnglishModificationAdvisory.wox
368 * UI/Templates/SOGoACLFrenchModificationAdvisory.wox
369 * UI/Templates/SOGoACLGermanModificationAdvisory.wox
370 Added the capabilities to email notifications when ACLs have
371 changed on a DAV collection or an IMAP mailbox. Also added
372 new templates (3 .wox) to deal with this.
374 * UI/WebServerResources/ContactsUI.js
375 UI/WebServerResources/SchedulerUI.js
376 Added warnings on operations w/o selection.
378 2007-11-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
380 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
381 -appendSubscribedSources]): don't include sources for which we
382 don't have the SOGoPerm_AccessObject permission.
384 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
385 -rfc822DateString]): we want positive timezones to be specified
386 with a leading "+" too.
388 2007-11-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
390 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
391 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
392 return nil if the subscribed folder has no display name (meaning
393 it no longer exists).
395 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
396 -appendPersonalSources]): don't include sources which are no
399 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
400 -ocsPathOfContainer]): return the intended value, not that of
403 * SoObjects/Appointments/SOGoCalendarComponent.m
404 ([SOGoCalendarComponent -sendResponseToOrganizer]): send the
405 message only of sendEMailNotifications is set.
407 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -subscriptionRoles]):
408 new method that returns the roles that qualifies for adding the
409 special "authorized subscribed" sogo role.
411 2007-11-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
413 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
414 -aclsForUser:uid]): copy all the roles from the container. If the
415 object is new, make sure the roles contain "ObjectEditor" if and
416 only if "ObjectCreator" is present.
418 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
419 -aclsForUser:uid]): no longer take the "ObjectReader" role into
422 * UI/Common/UIxFolderActions.m ([UIxFolderActions
423 -canAccessContentAction]): always return HTTP status 204. We want
424 this because we are relying on the SOPE access control manager to
425 grant access to this method. This requires a fine-tuned access
426 control in SOGo itself...
428 * UI/Contacts/UIxContactsUserRightsEditor.m ([-userCanReadObjects])
429 ([-setUserCanReadObjects:userCanReadObjects]): removed methods.
431 * UI/MailerUI/UIxMailUserRightsEditor.m ([UIxMailUserRightsEditor
432 -updateRights]): no longer take the "ObjectReader" role into account.
433 ([-userCanReadMails], [-setUserCanReadMails:userCanReadMails]):
436 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
437 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): specify context
438 when looking up the Calendar folder.
440 2007-11-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
442 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): same as below.
444 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
445 -event]): create the event if it doesn't exist.
447 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -userHasCalendarAccess])
448 ([UIxPreferences -userHasMailAccess]): same as below, for
449 displaying preference tabs.
451 * UI/Common/UIxPageFrame.m ([UIxPageFrame
452 -userHasCalendarAccess]): new accessor for the link banner.
453 ([UIxPageFrame -userHasMailAccess]): same as above.
455 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
456 -toManyRelationshipKeys]): do not report the path to modules to
457 which the user has no access. No longer cache this information
458 statically, the array will be generated at each call.
459 ([SOGoUserFolder -lookupName:_keyinContext:_ctxacquire:_flag]):
460 ignore the path to modules to which the user has no access.
462 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -canAccessModule:module]):
463 new method that returns whether the user has access to the
466 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
467 -initFromUDSource:udSource]): take a new parameter named
468 'ModulesContraints' that defines a set of constraints for
469 accessing specified named modules. This is an optout, meaning the
470 modules will be present unless a constraint is specified.
472 * SoObjects/Appointments/SOGoAppointmentFolder.m
473 ([SOGoAppointmentFolder
474 -roleForComponentsWithAccessClass:accessClassforUser:uid]): cache
475 acl to reduce method calls.
476 ([SOGoAppointmentFolder
477 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
478 if the user is not the current user, we strip the useless info
481 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
482 -labelForKey:key]): new category method.
484 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
485 -event]): same as below.
487 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): request a
488 secured version of the component.
490 * UI/MailPartViewers/UIxMailPartViewer.m
491 ([-fallbackStringEncoding]): removed method.
492 ([UIxMailPartViewer -flatContentAsString]): we no longer use [self
493 fallbackStringEncoding]. Instead we directly specify
494 NSISOLatin1StringEncoding if UTF-8 has failed.
496 * UI/MailPartViewers/UIxMailPartICalViewer.m
497 ([-fallbackStringEncoding]): removed method.
499 2007-11-25 Ludovic Marcotte <ludovic@inverse.ca>
501 * SoObjects/Mailer/SOGoMailForward.m
502 Use [sourceMail decodedSubject] instead of [sourceMail subject]
503 Signature fix in -signature - see the comment
506 * SoObjects/Mailer/SOGoMailObject.m
507 Improved -stringFromData: to try UTF-8 then fallback to Latin1
509 * SoObjects/Mailer/SOGoMailReply.m
510 Modified -messageBody to strip the signature from the reply.
511 Also modified -signature to add "-- \n%@" instead of the
512 broken ""--\r\n%@" pattern.
514 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m
515 We now favor text/calendar parts over text/html and
516 text/plain parts when viewing a multipart/alternative mail.
517 This allows us to show the email invitations coming from
520 * UI/MailerUI/UIxMailAccountActions.m
521 Signature fix in -composeAction - see the comment
524 * UI/MailPartViewers/UIxMailPartViewer.m
525 Modified -flatContentAsString to use UTF-8 as the
526 default fallback encoding for 8-bit content.
528 * SoObjects/Mailer/SOGoDraftObject.m
529 Modified _fillInReplyAddresses:replyToAll:envelope:
530 so that if there's no recipient, we add at least
532 Fixed a mem leak in the same method.
534 2007-11-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
536 * UI/MailPartViewers/UIxMailRenderingContext.m
537 ([UIxMailRenderingContext -viewerForBodyInfo:_info]): same as below.
539 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
540 -plainTextContentFetchKeys]): same as below.
542 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
543 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): accept the
544 application/ics type from Google Calendar.
546 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
547 +distantFuture]): rewrote method to return an object that is
548 compatible with NSCalendarDate, unlike the implementation in
550 ([NSCalendarDate +distantPast]): same as above.
552 2007-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
554 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: fixed infinite loop
555 when charset is us-ascii, match it to ascii rather than none.
557 * SoObjects/Appointments/SOGoAppointmentFolder.m
558 ([SOGoAppointmentFolder
559 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
560 added search on the c_title column too.
562 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
563 -eventsListAction]): take the "search" url parameter into account.
564 ([UIxCalListingActions -eventsListAction]): fetch events matching
565 the title filter too.
567 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -connectAction]): the
568 user infos are now posted as "application/x-www-form-urlencoded".
569 So we have to have like a form has been posted.
571 2007-11-21 Francis Lachapelle <flachapelle@inverse.ca>
573 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
574 -calendarList]): also returns the calendar of the current
575 event. This is required so the proper calender is selected when
576 you view an event to which you don't have write access.
578 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
579 also returns true for super users.
581 2007-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
583 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
584 -lookupImap4BodyPartKey:inContext:]): return a correct body part
585 when "0" is requested, taking its mime-type into account.
587 * UI/MailPartViewers/UIxMailRenderingContext.m
588 ([UIxMailRenderingContext -flatContentForPartPath:_partPath]):
589 return content for part "0", which would be the message body.
591 2007-11-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
593 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
594 ([_UIxHTMLMailContentHandler
595 -setContentEncoding:newContentEncoding]): new method that
596 specifies an xml charset to return to the parser.
597 ([UIxMailPartHTMLViewer -flatContentAsString]): specifies the
598 charset to the content handler before parsing.
600 * SoObjects/Appointments/SOGoAppointmentObject.m: don't take an
601 empty c_name as a valid response when looking up an event. Create
602 one in that case instead.
604 2007-11-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
606 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -signature]):
607 returns the signature for the default identity of the default
609 ([UIxPreferences -setSignature:newSignature]): accessor that sets
610 the default signature.
612 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
613 -composeAction]): append the message signature to the new draft.
615 * SoObjects/Mailer/SOGoMailReply.m ([SOGoMailReply -signature]):
618 * SoObjects/Mailer/SOGoMailForward.m ([SOGoMailForward
619 -signature]): new method that takes the user's signature and put
620 it at the end of the message, if exists.
622 * UI/Common/UIxPageFrame.m ([UIxPageFrame -isSuperUser]): new
623 accessor that forwards the call to the active user.
625 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -signature]): returns the
626 user default signature.
627 ([SOGoUser -isSuperUser]): declares whether the user is listed
628 among the super users.
630 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
631 -setComponent:newComponent]): retain the component object.
632 ([UIxComponentEditor -organizerIdentity]): new accessor method to
633 handle list of possible organizers.
635 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
636 -event]): retain the returned event object.
638 * SoObjects/Appointments/SOGoAppointmentObject.m
639 ([SOGoAppointmentObject -saveComponent:newEvent]): reset the
640 organizer only if there are no attendees AND the owner of the
641 component is not the organizer him-/herself.
643 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
644 -toolbar]): rewrote in a way that ensures that each case is
647 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -isEqual:otherUser]): new
650 * UI/Scheduler/UIxTaskEditor.m ([-acceptAction])
651 ([-declineAction]): commented out unused methods.
653 * UI/MailPartViewers/UIxMailPartICalActions.m
654 ([UIxMailPartICalActions -deleteFromCalendarAction]): actually
655 delete the found object.
657 2007-11-18 Ludovic Marcotte <ludovic@inverse.ca>
659 * SoObjects/Mailer/SOGoMailBodyPart.m
660 SoObjects/Mailer/SOGoMailObject.m
661 UI/MailPartViewers/UIxMailPartViewer.m
662 Added support of messages containing non-textual
663 content and no parts.
665 * UI/MailerUI/UIxMailView.m
666 SoObjects/Mailer/SOGoMailObject.m
667 UI/Templates/MailerUI/UIxMailView.wox
668 Added support for the Reply-To header upon
671 2007-11-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
673 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]):
674 invoke saveComponent:.
676 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -hasOrganizer])
677 ([UIxComponentEditor -organizerName]): new template accessor
678 related to displaying the event's organizer.
679 ([-containsConflict:_component]): removed method.
680 ([UIxComponentEditor -takeValuesFromRequest:_rqinContext:_ctx]):
681 set RSVP to "TRUE" on each attendee.
683 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
684 -saveAction]): invoke saveComponent:.
686 * UI/MailPartViewers/UIxMailPartICalViewer.m
687 ([UIxMailPartICalViewer -isLoggedInUserTheOrganizer]): make use of
688 the -userIsOrganizer: category method.
689 ([-isLoggedInUserAnAttendee]): make use of -userIsParticipant:.
690 ([UIxMailPartICalViewer -hasSenderStatusChanged]): new template
691 accessor that determines whether the "Update" button should be
694 * UI/MailPartViewers/UIxMailPartICalActions.m
695 ([UIxMailPartICalActions -deleteFromCalendarAction]): implemented
697 ([UIxMailPartICalActions -updateUserStatusAction]): implemented
700 * UI/Common/UIxPageFrame.m ([UIxPageFrame
701 -setCssFiles:newCSSFiles]): new accessor that enables the
702 sub-templates to specify extra CSS files to load.
704 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
705 -homeFolderInContext:context]): cache the home folder of the user
706 object instead of the current user.
708 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
709 -deleteEntriesWithIds:ids]): invokes the "prepareDelete" optional
710 method if the child object implements it.
712 * SoObjects/SOGo/SOGoContentObject.m ([-setContentString:])
715 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
716 -setBaseDN:newBaseDNIDField:newIDFieldCNField:newCNFieldUIDField:newUIDFieldmailFields:newMailFieldsandBindFields:newBindFields]):
717 take a new "mailFields" parameter defining an array of fields
718 where to look at when searching the user's emails. It defaults to
719 the standard "mail" LDAP field.
721 * SoObjects/Appointments/SOGoAptMailICalReply.[hm]: new
722 SoComponent implementing a template for ITIP replies.
724 * SoObjects/Appointments/iCalPerson+SOGo.m ([iCalPerson
725 -mailAddress]): new method that returns a properly formatted email
726 address for the specified person entry.
727 ([iCalPerson -uid]): new method that tests whether the user is
728 known to the system and if so, returns its user id.
730 * SoObjects/Appointments/iCalPerson+SOGo.[hm]: new category module.
732 * SoObjects/Appointments/iCalEventChanges+SOGo.m
733 ([iCalEventChanges -sequenceShouldBeIncreased]): determine whether
734 the changes involved need a sequence inscrease, based on the
737 * SoObjects/Appointments/iCalEventChanges+SOGo.[hm]: new category
740 * SoObjects/Appointments/iCalEvent+SOGo.m ([iCalEvent
741 -isStillRelevant]): new overriden method determining the relevance
742 of the current event based on its end date.
744 * SoObjects/Appointments/iCalEvent+SOGo.[hm]: new category module.
746 * SoObjects/Appointments/iCalEntityObject+SOGo.m
747 ([iCalEntityObject -attendeeUIDs]): new category methods that
748 returns an array containing the uids of the system-know attendees.
749 ([iCalEntityObject -isStillRelevant]): new template method.
750 ([iCalEntityObject -itipEntryWithMethod:method]): clone the
751 current entry calendar with the specified ITIP method.
752 ([iCalEntityObject -attendeesWithoutUser:user]): returns an array
753 of attendees while making sure the specified user is not listed.
755 * SoObjects/Appointments/SOGoCalendarComponent.m
756 ([SOGoCalendarComponent -calendar:create:secure]): new name for
757 -calendar:. Added a "secure" parameter that specifies whether a
758 stripped calendar instance is needed or not. Also, we no longer
759 cache the content to simplify handling of new data.
760 ([SOGoCalendarComponent -component:create:secure]): same as above.
761 ([SOGoCalendarComponent
762 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
763 test whether the component is "still relevant" before sending an
765 ([SOGoCalendarComponent -sendResponseToOrganizer]): new method for
766 sending ITIP replies.
767 ([SOGoCalendarComponent -getUIDsForICalPerson:iCalPerson]):
768 removed method. Replaced with -[iCalPerson uid] category method.
770 * SoObjects/Appointments/SOGoAppointmentObject.[hm]: rewrote
771 class. No longer override saveContentString:,
772 saveContentString:baseSequence:, .... Implemented the
773 saveComponent: and the prepareDelete methods instead. Those
774 methods are called only from the web methods. This avoids the
775 risks related to email sending and changes propagation.
777 * UI/Common/UIxTabItem.m: removed useless class module.
779 * UI/Common/UIxTabView.[hm]: removed useless class module.
781 * UI/Common/UIxPrintPageFrame.m: removed useless class module.
783 * UI/Common/UIxAppNavView.m: removed useless class module.
785 2007-11-16 Ludovic Marcotte <ludovic@inverse.ca>
787 * SoObjects/Mailer/SOGoMailBaseObject.m
790 * SoObjects/Mailer/SOGoMailBodyPart.m
791 We also grok image/jpeg and return the SOGoMailBodyPart
792 for attachments fetching.
794 * SoObjects/Mailer/SOGoMailObject+Draft.m
795 Prevent a crash in case body decoding failed during
798 * SoObjects/Mailer/SOGoMailObject.m
799 Improved body decoding during a reply to also try
800 latin1 as an encoding.
802 * UI/MailPartViewers/UIxMailRenderingContext.m
803 Greatly improved the display mechanisms for emails.
804 Also properly consider the content disposition for
807 * UI/MailerUI/UIxMailToSelection.m
808 Removed worthless code.
810 * UI/WebServerResources/MailerUI.css
811 CSS fix for table views.
813 2007-11-15 Ludovic Marcotte <ludovic@inverse.ca>
815 * UI/WebServerResources/MailerUI.js
816 We now check for empty selection and warn the
817 user about it when deleting messages
819 * SoObjects/Mailer/SOGoDraftObject.m
820 Correctly check for the presence of a subject
821 before attempting to forward a message from
824 * SoObjects/Mailer/SOGoMailObject+Draft.m
825 We no longer use "[Fwd: ]" but simply "Fwd:"
826 when forwarding email messages.
828 * SoObjects/SOGo/SOGoUser.m
829 Modified the default forwarding format to be
830 inline instead of "attachment".
832 * SoObjects/Mailer/SOGoDraftObject.m
833 We now create and use a NGMimeContentDispositionHeaderField
834 in order to avoid encoding the whole Content-Disposition
835 header in case a non-ASCII char is present!
837 2007-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
839 * SoObjects/SOGo/iCalEntityObject+Utilities.m ([iCalEntityObject
840 -findParticipant:user]): new method based on the one removed from
841 SOGoCalendarComponent below.
843 * SoObjects/SOGo/iCalEntityObject+Utilities.[hm]: new category
844 module for iCalEntityObject.
846 * SoObjects/Appointments/SOGoCalendarComponent.m
847 ([-findParticipant:user]): removed method.
849 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
850 -setContentString:newContent]): new accessor method.
852 -saveContentString:newContentbaseVersion:newBaseVersion]): invoke
853 -[self setContentString:].
855 * UI/MailPartViewers/UIxMailPartICalViewer.m
856 ([UIxMailPartICalViewer -authorativeEvent]): returns the most
858 ([-isLoggedInUserTheOrganizer]): make use of -[SOGoUser
861 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
862 -stringByConvertingCRLNToHTML]): fixed crashes due to overflows in
863 temporary buffer we are handing.
865 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
866 -setComponent:newComponent]): check that newComponent is non-nil
867 before replacing the default values.
868 ([UIxComponentEditor -calendarList]): privacy is already an ivar.
869 We don't need to refetch it.
871 2007-11-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
873 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
874 -fetchMailForReplying:sourceMailtoAll:toAll]): remove the current
875 user from the list of recipients and make sure no other address is
878 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
879 -stringByConvertingCRLNToHTML]): build the returned NSString
880 without the ending \0.
882 2007-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
884 * UI/MailPartViewers/UIxMailPartICalViewer.m
885 ([UIxMailPartICalViewer -acceptLink])
886 ([UIxMailPartICalViewer -declineLink])
887 ([UIxMailPartICalViewer -tentativeLink]): removed useless methods.
889 * UI/MailPartViewers/UIxMailPartICalAction.m
890 ([UIxMailPartICalAction -addToCalendarAction])
891 ([UIxMailPartICalAction -deleteFromCalendarAction]): new stub
894 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
895 -lookupImap4BodyPartKey:]): make use of the new method below.
897 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
898 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): new method
899 that returns an appropriate Class depending on a given mime type.
901 * UI/SOGoUI/UIxComponent.m ([UIxComponent -canCreateOrModify]):
902 new boolean accessor that determines whether someone can create
903 (i.e. modify a new entry) or modify an existing entry.
905 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
906 -lookupName:lookupNameinContext:localContextacquire:acquire]):
907 overriden method to bind looked up keys to So methods but by
908 avoiding a call to toOneRelationshipKeys. This will be the top
909 method of the chain, meant to override SoObject's behaviour.
911 * SoObjects/Contacts/SOGoContactLDAPFolder.m
912 ([SOGoContactLDAPFolder
913 -lookupName:objectNameinContext:lookupContextacquire:acquire]):
914 removed hack to prevent [super lookupName...] to read the entire
915 LDAP directory when looking up a record.
917 2007-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
919 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
920 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
923 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
924 ([UIxMailPartHTMLViewer -_attachmentIds]): the reference was one
925 character too short, which cause the images not to be displayed
926 sometimes and crashes to happen whenever the references on a
927 message were wrong (due to bugs in SOPE).
929 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
930 -hasMessageAttachment]): consider an attachment any content that
931 has a non-nil disposition.
933 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
934 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
935 fixed method to make use of the parameters instead of the useless
936 remains that weren't even initialized.
938 * SoObjects/Appointments/SOGoAppointmentObject.m
939 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
940 don't propagate the event among the attendees if this is not an
942 ([SOGoAppointmentObject -deleteWithBaseSequence:]): same as above.
944 * Main/SOGo.m ([SOGo -authenticatorInContext:context]): make use
945 of the new category method below.
947 * SoObjects/SOGo/WORequest+SOGo.m ([WORequest
948 -handledByDefaultHandler]): new method that returns whether this
949 is an "so" or alike request.
951 * SoObjects/SOGo/WORequest+SOGo.[hm]: new category module.
953 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
954 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
955 write the new folder's name in the folder cache.
957 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
958 -calendars]): same as below.
960 * UI/Contacts/UIxContactsListViewContainer.m
961 ([UIxContactsListViewContainer -currentContactFolderName]):
962 translate the display name if its the default one.
964 * SoObjects/Appointments/SOGoAppointmentFolder.m
965 ([SOGoAppointmentFolder -create]): overriden method that invokes
966 its ancestor and then activate itself within the user settings.
968 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
969 -appendPersonalSources]): when the user is the owner of the
970 current folder, we create the "personal" folder if it doesn't
971 exist by invoking "create".
973 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
974 -primaryFetchProfile]): when no row is returned, we initialize
975 "values" to a new dictionary. This solves a bug where the defaults
976 would not be initialized properly.
978 2007-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
980 * SoObjects/SOGo/SOGoGCSFolder.m ([-compare:otherFolder]): method
981 moved into the SOGoFolder class.
983 * SoObjects/Appointments/SOGoAppointmentObject.m
984 ([SOGoAppointmentObject -saveContentString:_iCalinUIDs:_uids]):
985 simplified method by directly building a similar appointment
986 object with the current folder as container.
988 * SoObjects/Contacts/SOGoContactLDAPFolder.m
989 ([SOGoContactLDAPFolder
990 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
991 take the content of an object returned by
992 lookupName:inContext:acquire: instead of the dictionary passed as
993 parameter since it represents a flattened entry return by
994 lookupContactsWithFilter...
996 * SoObjects/Contacts/SOGoFolder+CardDAV.m: NSObject+CardDAV
997 category renamed to SOGoFolder+CardDAV.
999 * SoObjects/SOGo/SOGoParentFolder.m: no longer a subclass of
1000 SOGoObject, but of SOGoFolder instead.
1002 * SoObjects/SOGo/SOGoUserFolder.m: no longer a subclass of
1003 SOGoGCSFolder, but of SOGoFolder instead.
1005 * SoObjects/Appointments/SOGoAppointmentFolder.m
1006 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): fixed
1007 to take the new SOGoParentFolder class into account. Also, create
1008 the personal folder if it doesn't exist.
1010 * SoObjects/SOGo/SOGoFolder.[hm]: new class module implementing
1011 the parent of all SOGo containers.
1013 * SoObjects/SOGo/SOGoGCSFolder.[hm]: SOGoFolder class renamed to
1016 2007-11-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1018 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection
1019 -getAddressesFromFormValues:_dict]): take NSString and NSArray
1020 values. Ignore addresses with a length of 0.
1022 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -mailAccounts]): we now
1023 fetch the accounts from the user defaults and create default
1026 2007-11-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1028 * UI/MailPartViewers/UIxMailPartTextViewer.m
1029 ([UIxMailPartTextViewer -flatContentAsString]): re-added
1030 conversion of line-break to sequences of HTML "BR", with a fast
1033 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1034 -flatContentAsString]): simplified method now that we know
1035 -[NSString stringWithData:usingEncodingNamed:] has a more robust
1038 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1039 -showToAddress]): the answer is cached.
1041 * UI/Common/UIxObjectActions.m ([UIxObjectActions +initialize]):
1042 read "SOGoACLsSendEMailNotifications" from the user defaults to
1043 determiner whether to send an email when a user is added or
1044 removed from an object's acl.
1046 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1047 -contentForEditing]): make sure the htmlContent flag is set to NO
1048 when we select the textual part. Also we select only the relevant
1051 * UI/MailerUI/WOContext+UIxMailer.m ([-mailSubjectFormatter]):
1054 * UI/MailerUI/UIxMailView.m ([UIxMailView -messageSubject]): new
1055 method replacing -objectTitle, written like the ones below.
1057 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1058 -messageSubject]): rewrote method to act the one below.
1060 * UI/MailPartViewers/UIxMailPartMessageViewer.m
1061 ([UIxMailPartMessageViewer -messageSubject]): new method that
1062 returns the decoded mail subject or "Untitled" if the subject is
1065 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1066 -decodedSubject]): new method that invoke -decodedSubject from the
1067 NSString and NSData class, depending on the identity of the
1068 subject obtained from the envelope.
1070 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1071 -subjectForReply]): take the value of -[SOGoMail decodedSubject]
1072 instead of the subject of the envelope.
1073 ([SOGoMailObject -filenameForForward]): same as above.
1074 ([SOGoMailObject -subjectForForward]): same as above.
1076 * SoObjects/Mailer/NSString+Mail.m ([NSString -decodedSubject]):
1077 same as below for NSString.
1079 * SoObjects/Mailer/NSData+Mail.m ([NSData -decodedSubject]): new
1080 method that decodes the subject of a mail taken as an NSData
1081 instance. Handling the exceptions and the badly formatted headers.
1083 * UI/MailerUI/UIxSubjectFormatter.[hm]: dropped class module.
1085 2007-11-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1087 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1088 -deleteEntriesWithIds:ids]): make sure the objects returned by
1089 lookupName:... are not instances of NSException.
1091 2007-11-03 Ludovic Marcotte <ludovic@inverse.ca>
1093 * UI/Scheduler/UIxAppointmentEditor.m
1094 Fixed monthly recurrences support.
1096 2007-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1098 * SoObjects/Appointments/SOGoAppointmentObject.m
1099 ([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
1100 sent when modifying an event, when the event was considered
1101 relevant. The same thing is now implemented for event deletion.
1103 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1104 -primaryFetchProfile]): make sure that the deserialized "values"
1105 is an instance of NSMutableDictionary, otherwise we override it
1108 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1109 -contentForReply]): make use of the SOGoMailReply WO page.
1111 * SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
1112 from SOGoMailForward to handle mail replies instead. Only three
1113 methods remaining: date, from and messageBody. The latter is
1116 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1117 -fetchMailForForwarding:sourceMail]): fetch attachments for
1120 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1121 -hasMessageAttachment]): initialize hasAttachment with "NO" to
1122 avoid false positives.
1124 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
1125 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
1126 set title to an empty string where the event/task summary is null.
1128 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1129 -setHeaders:newHeaders]): make sure there is a message id in the
1130 headers dictionary, if not, generate one.
1131 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
1132 message id from the existing draft.
1133 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
1134 message id in the header map.
1136 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1137 -deleteFolderAction]): no longer prefix the target folder with
1140 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1141 -listMailboxesAction]): base the folder type on the folder
1144 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1145 -lookupName:_keyinContext:acquire:_acquire]): compare the full
1146 traversal to the potential looked up folder with the special
1147 folder names and return an object with the appropriate
1148 SOGoMailFolder subclass.
1150 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1151 -traversalFromMailAccount]): don't prepend the whole string with
1154 * SoObjects/Mailer/SOGoMailAccount.m
1155 ([-lookupSentFolder:_keyinContext:_ctx])
1156 ([-lookupDraftsFolder:_keyinContext:_ctx])
1157 ([-lookupTrashFolder:_keyinContext:_ctx])
1158 ([-lookupFiltersFolder:_key:_ctx]): removed methods.
1159 ([SOGoMailAccount -inboxFolderNameInContext:])
1160 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1161 ([SOGoMailAccount -sentFolderNameInContext:])
1162 ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
1163 the resulting name with "prefix" since we might return a nested
1165 ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
1166 names with "/". Sorts the resulting folder list with
1167 localizedCaseInsensitiveCompare: instead of
1168 caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
1169 that were removed, instead, we choose the appropriate class
1170 depending on the folder name. And since we are in SOGoMailAccount,
1171 we don't have to compute a traversal path to match the key with
1174 -folderWithTraversal:traversalandClassName:className]): new method
1175 that returns an instance of the specified SOGoMailFolder subclass,
1176 based on the traversal path passed as parameter.
1177 ([SOGoMailAccount -inboxFolderInContext:_ctx])
1178 ([SOGoMailAccount -draftsFolderInContext:_ctx])
1179 ([-sentFolderInContext:_ctx])
1180 ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
1181 -folderWithTraversal:andClassName: method described above.
1183 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1184 -primaryFetchProfile]): make use of -[NSPropertyListSerialization
1185 propertyListFromData:mutabilityOption:format:errorDescription:] to
1186 deserialize the plist. Removed variant for libFoundation since it
1187 should support the above.
1188 ([AgenorUserDefaults -generateSQLForInsert])
1189 ([AgenorUserDefaults -generateSQLForUpdate]): make use of
1190 -[NSPropertyListSerialization
1191 dataFromPropertyList:format:errorDescription:] to serialize the
1192 plist. Removed variant for libFoundation since it should support
1193 the above. Escape the backslashes from the resulting string.
1195 2007-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1197 * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
1198 SOGoMailFolder: SOGoMailSpecialFolder.
1200 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1201 -traversalFromMailAccount]): overridden method that returns the
1202 initialized mutable string.
1203 ([SOGoMailAccount -allFolderPaths]): take the special folder paths
1204 with -traversalFromMailAccount and reposition them at the
1205 beginning of the list. By creating the special folders during that
1206 request, we also make sure that the folder exists thanks to the
1207 new initialisation method of the new "SOGoSpecialMailFolder"
1209 ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
1211 ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
1213 ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
1214 longer use lookupImap4Folder.
1215 ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
1218 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1219 -traversalFromMailAccount]): new method that returns the full
1220 IMAP4 path to the object.
1222 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
1223 "superUsernames" after fetching it from the ud.
1225 2007-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1227 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1228 -eventsListAction]): substitude the start and end date with their
1229 UTC counterpart, taking into account the offset from UTC related
1230 to those dates instead of the current one. This renders
1231 -[UIxCalMainView -userUTCOffset] obsolete because the computings
1232 that occured in javascript are now done server-side.
1234 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
1235 removed obsolete method.
1237 * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
1238 method converting html content to plain text.
1240 * SoObjects/Mailer/NSString+Mail.[hm]: new category module
1241 enhancing NSString with utility methods pertaining to mail handling.
1243 * SoObjects/Mailer/SOGoMailObject.m
1244 ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
1246 -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
1247 modified method to be always recursive and to take an array of the
1248 accepted mime-types as parameter. The returned array now contains
1249 the mime-type as well as the part keys.
1251 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1252 -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
1253 ([SOGoMailObject -contentForEditing]): rewrote method to take into
1254 account the first text/plain part or the first text/html part
1255 converted to text/plain with our new -[NSString htmlToText]
1258 * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
1259 "replyToAll:" with YES as parameter instead of NO.
1261 2007-10-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1263 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1264 -davContentType]): ignore any possible parameter taken from the
1265 mime-info of the body part.
1267 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1268 -lastFirstMessageNumber]): new accessor that returns the first
1269 message number of the last series of messages.
1270 ([UIxMailListView -fetchKeys]): request the bodystructure for each
1272 ([UIxMailListView -hasMessageAttachment]): extract the attachment
1273 information from the message bodystructure.
1275 2007-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1277 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1278 -GETAction:]): use the "application/octet-stream" mime type for
1279 elements of type "application/x-xpinstall" to avoid confusing
1282 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
1283 ([UIxPreferences -itemMessageCheckText])
1284 ([UIxPreferences -userMessageCheck])
1285 ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
1286 methods for handling the retrieval of new messages automatically.
1288 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
1289 that returns the interval of time between automatic message
1292 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1293 -defaultAction]): now expunges the last folder marked for expunge.
1295 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1296 -trashInContext:_ctx]): now marks the container folder for
1299 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1300 -markForExpunge]): new method that marks the folder for the next
1301 automatic expunge operation in the user settings.
1302 ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
1303 takes the last folder marked for expunge, expunges it and removes
1304 it from the user settings, if it exists.
1306 2007-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1308 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1309 -messageSubjectCellStyleClass]): added support for replied,
1310 forwarded, forwarded and replied mails.
1312 * SoObjects/Mailer/NSData+Mail.m ([NSData
1313 -bodyDataFromEncoding:encoding]): new utility method that decodes
1314 the NSData instance properly depending on the encoding string
1315 passed as parameter.
1317 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1318 -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
1320 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1321 -stringForData:_datapartInfo:_info]): simplified by invoking
1322 -bodyDataFromEncoding: from our new NSData category methods.
1324 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1325 -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
1326 where only the body part of the first of the keys fetched was
1327 returned. Also decodes the body parts properly following their
1330 * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
1331 extends the NSData class with utility methods useful for handling
1334 2007-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1336 * SoObjects/SOGo/NSArray+Utilities.m
1337 ([NSArray -stringsWithFormat:format]): replace instances of NSNull
1340 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1341 -keysWithFormat:keyFormat]): replace instances of NSNull with
1344 * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
1345 empty, use "c_cn" instead.
1347 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1348 ([SOGoMailAccount -draftsFolderInContext:_ctx])
1349 ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
1350 of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
1351 no always be specified from the root instead of sometimes from the
1354 2007-10-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1356 * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
1357 ([UIxPageFrame -productLocalizableStrings]): invoke the new
1358 +[SOGoUser language] method if the user is nil.
1360 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
1361 that returns any generically-found language.
1362 ([SoUser -language]): modified to call the above.
1363 ([SOGoUser -language]): modified to call the above if the user
1364 language has a null length.
1366 * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
1367 -davEntityTag]): modified to return the "hash" of the vCard string.
1369 * UI/MailerUI/UIxMailActions.m ([UIxMailActions
1370 -removeAllLabelsAction]): new method that removes all label flags
1371 from the associated message.
1372 ([UIxMailActions -addLabel1Action]
1373 [UIxMailActions -addLabel2Action]
1374 [UIxMailActions -addLabel3Action
1375 [UIxMailActions -addLabel4Action]
1376 [UIxMailActions -addLabel5Action]): new methods that adds label
1377 flags to the associated message.
1378 ([UIxMailActions -removeLabel1Action]
1379 [UIxMailActions -removeLabel2Action]
1380 [UIxMailActions -removeLabel3Action
1381 [UIxMailActions -removeLabel4Action]
1382 [UIxMailActions -removeLabel5Action]): new methods that removes
1383 label flags from the associated message.
1385 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
1386 new accessor that returns the labels associated with the message.
1388 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1389 -allFolderPaths]): new method that returns all the paths of all
1390 the subfolders of the folder object.
1391 ([SOGoMailFolder -allFolderURLs]): new method replacing
1394 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1395 -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
1396 role from its parent folder.
1398 2007-10-19 Francis Lachapelle <flachapelle@inverse.ca>
1400 * SoObjects/SOGo/SOGoUser.m
1401 ([SOGoUser -rolesForObject:objectinContext:context]): allow
1402 multiple super usernames to be defined. The user default
1403 SOGoSuperUsername is renamed SOGoSuperUsernames and must be
1406 2007-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1408 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1409 -userInContext:]): override the super method by returning
1410 anonymous if the super returns nil.
1412 * UI/Common/UIxPageFrame.m ([UIxPageFrame
1413 -productLocalizableStrings]): new method that returns the
1414 product-specific translation dictionary as a JSON hash.
1415 ([UIxPageFrame -commonLocalizableStrings]): same as above but for
1416 the "Common" framework.
1417 ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
1418 the requestor components to require additional Javascript files.
1419 This is useful now that all the scripts are loaded at the end of
1421 ([UIxPageFrame -additionalJSFiles]): new getter related to the
1424 2007-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1426 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
1427 implemented new web method.
1429 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1430 -copyToFolderNamed:folderNameinContext:]): new method with the
1431 code cut/pasted from -moveToFolderNamed:inContext:.
1432 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
1433 modified to use the code from -copyToFolderNamed:inContext:, which
1434 is common between the two actions.
1436 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1437 ([SOGoMailAccount -sentFolderNameInContext:])
1438 ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
1439 the user settings into account.
1441 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
1442 ([UIxMailFolderActions -setAsSentFolderAction])
1443 ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
1444 that change the purpose of the active folder to "Sent", "Drafts"
1447 * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
1448 returns the subject as quoted-printable.
1450 * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
1451 SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
1452 the "aclMethod" method for the subsequent language-dependent
1455 * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
1456 returns the subject as quoted-printable.
1458 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1459 -dealloc]): release item, aptStartDate and aptEndDate.
1461 2007-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1463 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1464 -initWithName:newNameinContainer:newContainer]): the owner of a
1465 shared folder is set to "nobody" by default.
1467 * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
1468 that returns whether the object has an owner or not.
1470 2007-10-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1472 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1473 the folder even if the current user is not its owner.
1475 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
1477 * We now send advisory emails when folders
1478 are created / deleted.
1480 * Fixed the sending of advisory emails upon
1481 ACL changes on folders.
1483 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
1485 * UI/Scheduler/UIxComponentEditor.m
1486 Implemented event/task priority support.
1488 * SoObjects/Contacts/SOGoContactGCSFolder.m
1489 Added CardDAV support.
1491 * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
1492 Implemented From: based on LDAP results based on
1493 the MailFieldNames attribute (an array) specified
1494 in every LDAP-based authentication sources.
1496 * UI/MailPartViewers/UIxMailPartTextViewer.m and
1497 UI/WebServerResources/MailerUI.css
1498 We avoid replacing "\r\n" and "\n" with <br /> and
1499 rather use CSS capabilities for proper formatting.
1500 This is _WAY_ faster on very large mails.
1502 2007-10-10 Francis Lachapelle <flachapelle@inverse.ca>
1504 * UI/Scheduler/UIxComponentEditor.m
1505 ([UIxComponentEditor -componentCalendar]): returns the calendar
1506 object of the current event.
1508 2007-10-05 Ludovic Marcotte <ludovic@inverse.ca>
1510 * UI/WebServerResources/MailerUI.js
1511 We check if at least one message is selected
1512 before performing a Reply/Reply All/Forward
1514 * SoObjects/Appointments/SOGoAppointmentFolder.m
1515 and others - implemented support for recurring
1516 events (with some known limitations right now,
1517 all soon to be fixed).
1519 2007-10-04 Francis Lachapelle <flachapelle@inverse.ca>
1521 * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
1522 the constraint that a username can't start with a digit.
1524 2007-10-02 Francis Lachapelle <flachapelle@inverse.ca>
1526 * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
1527 repository to Inverse's branch.
1529 2007-09-28 Francis Lachapelle <flachapelle@inverse.ca>
1531 * SoObjects/Mailer/SOGoDraftObject.m
1532 ([SOGoDraftObject -isValidAttachmentName:_name]): removed
1533 constraint on space in file name.
1534 ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
1535 now removes from file name all characters preceding a backslash.
1536 This happens with IE7 because the complete attachment file path
1539 2007-09-25 Francis Lachapelle <flachapelle@inverse.ca>
1541 * SoObjects/Appointments/SOGoAptMailNotification.m
1542 ([SOGoAptMailNotification -appointmentURL]): set personal as the
1543 default calendar where to add the event.
1545 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1546 activate the SOGoUIxDefaultModule user defaults.
1548 2007-09-21 Francis Lachapelle <flachapelle@inverse.ca>
1550 * UI/SOGoUI/UIxComponent.m
1551 ([UIxComponent -shortUserNameForDisplay]): returns the string
1552 "wrongusernamepassword" when authentication failed.
1554 2007-09-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1556 * UI/MailPartViewers/UIxMailPartICalViewer.m
1557 ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
1558 entry of the Calendars parent folder.
1560 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1561 -messageSubject]): new accessor method to work-around a problem
1562 within SOPE where a subject could be returned as an NSData.
1564 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1565 -appendPersonalSources]): make sure the value of the "c_path4" of
1566 the returned rows are not NSNull, otherwise, discard them.
1568 2007-09-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1570 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1571 -compare:otherFolder]): new overriden method that compares two
1572 contact foldes based on their class and then transfer the control
1573 to the super method in SOGoFolder.
1575 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1576 ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
1577 compare two contact folders based on their class and then their
1580 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
1581 new method for sorting folders. The folders are compared based on
1582 their ownership, whether they are a main folder and finally
1583 depending on their display name.
1585 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1586 -pathArrayToSOGoObject]): do not reorder the paths if the third
1587 element is an instance of NSNull.
1589 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
1590 -subFolders]): returns a sorted array using the "compare:"
1593 2007-09-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1595 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1596 -calendars]): also returns the owner of the listed folders.
1598 * SoObjects/Appointments/SOGoAppointmentFolder.m
1599 ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
1601 * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
1602 method into UIxFolderActions.
1604 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1605 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
1606 freebusy info from the "personal" calendar.
1608 * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
1609 -createFolderAction]): new standardized method for requesting
1610 folder creations among gcs-based modules.
1612 * UI/Common/UIxParentFolderActions.[hm]: new action class module.
1614 * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
1615 module, equivalent to the SOGoParentFolder's child
1616 SOGoContactFolders, but for calendars.
1618 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
1619 method that returns translated strings for controller bundles
1620 (same as what UIxComponent does for view bundles).
1621 ([SOGoObject -pathArrayToSOGoObject]): new method that returns
1622 the real path to a subscribed folder (if subscribed).
1623 ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
1624 ([SOGoObject -globallyUniqueObjectId]): new instance method
1625 calling its class equivalent.
1627 2007-09-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1629 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
1630 whether the user is logged in and if so, redirect to his/her
1632 ([SOGoRootPage -appendToResponse:inContext:]): removed useless
1635 2007-09-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1637 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1638 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1640 ([SOGoFolder -displayName]): new method.
1641 ([SOGoFolder -delete]): accept to proceed only if nameInContainer
1644 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1645 ([SOGoContactLDAPFolder
1646 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1647 renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
1649 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1650 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1651 removed method, reimplemented in SOGoFolder.
1652 ([SOGoContactGCSFolder -displayName]): removed method,
1653 reimplemented in SOGoFolder.
1654 ([-delete]): removed method, modified in SOGoFolder.
1656 * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
1657 a subclass of SOGoParentFolder.
1659 * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
1660 from SOGoContactFolders and modified to be more content-independent.
1662 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
1663 ([UIxMailActions -markMessageReadAction]): new methods moved from
1664 UIxMailListView and adapted to invoke the client object directly,
1665 since the previous versions had to to a lookup from the parent
1668 * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
1669 method into UIxMailActions.
1670 ([-markMessageReadAction]): same as above.
1671 ([-viewAction]): removed useless method.
1672 ([-javaScriptOK]): removed useless method.
1673 ([-isJavaScriptRequest]): removed useless method.
1674 ([-lookupActiveMessage]): removed useless method.
1676 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1677 -responseWithStatus:status]): new method that returns a WOResponse
1678 initialized with the specified status code.
1679 ([WODirectAction -responseWith204]): new method that invokes the
1680 above one with "204" as parameter.
1681 ([WODirectAction -redirectToLocation:newLocation]): rewrote method
1682 to make use of -responseWithStatus:.
1684 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
1685 method that returns a WOResponse initialized with the 204 status
1688 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
1689 always use a "not deleted" search qualifier along with the user
1690 qualifier (if present).
1692 2007-09-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1694 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1695 -contactSearchAction]): only return the records which have an
1698 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1699 -trashInContext:_ctx]): no longer expunge the mailbox after
1700 marking a message deleted.
1701 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
1704 * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
1705 ([-trashAction]): moved method into UIxMailActions.
1706 ([-moveAction]): moved method into UIxMailActions.
1708 2007-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1710 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1711 ([_UIxHTMLMailContentHandler
1712 -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
1713 comments from the CSS code, do not add the CSS code to the body
1714 content and remove references of body from the CSS declarations.
1715 ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
1716 ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
1717 common with cssContent in a different method and invoke it only
1720 * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
1721 instead of UIxPageFrame.
1723 2007-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1725 * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
1726 ([-appendToResponse:responseinContext:ctx]): commented out.
1727 ([SOGoRootPage -connectURL]): new accessor that returns the full
1728 url the the "connect" method.
1729 ([-connectAction]): rewrote method to return a properly formatted
1730 auth. cookie based on the username and password passed as
1733 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1734 set the value of the cookie to "discard" and set its expiration
1737 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1738 -preprocessCredentialsInContext:context]): consider the user
1739 anonymous if the cookie value is "discard".
1740 ([SOGoWebAuthenticator
1741 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1742 set the expiration date of the cookie to yesterday.
1744 * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
1745 returns the path to the application if the clientObject is not a
1748 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
1749 moved the requirement of authentication from the SOGo application
1752 * SoObjects/Appointments/SOGoAppointmentObject.m
1753 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
1754 check whether the new appointment object is still relevant before
1755 sending a notification.
1757 2007-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1759 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1760 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1761 render the login page through the SoDefaultRenderer.
1763 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
1764 -isPublicInContext:localContext]): new overriden method that
1767 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1768 -currentCalendarLogin]): replace css-unsafe characters with _.
1770 * UI/SOGoUI/UIxComponent.m ([UIxComponent
1771 -shortUserNameForDisplay]): simplified method.
1772 ([-user]): removed method since [context activeUser] is as useful.
1774 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1776 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1777 set the cookie path to "/".
1779 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
1780 authenticator based on the request handler key. "dav" returns the
1781 SOGoDAVAuthenticator, anything else returns the Web authenticator.
1783 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
1784 "SOGoAuthenticator".
1786 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
1787 implementing a subclass of SoCookieAuthenticator, designed for
1788 web-based cookie authentication of users.m
1790 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1791 new method that resets the authentification cookie.
1793 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1795 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
1796 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
1797 didBind to NO to make sure no false authentication is returned if
1798 the bind operation is not executed.
1800 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1802 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
1803 "In-Reply-To" header field when replying.
1805 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
1806 table field names that are queried.
1808 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1809 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
1810 add the "c_" prefix to the quick table field names that are
1813 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1815 * SoObjects/Appointments/SOGoAppointmentFolder.m
1816 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
1817 "personal" to the ocs path of the appointment folder.
1819 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1820 -flatContentAsString]): use latin1 when the encoding is not
1821 specified, and to reencode data chunk which were not correctly
1822 decoded with the original charset.
1824 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
1825 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
1826 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
1827 ([SOGoAppointmentFolder
1828 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
1829 override those methods to use the "personal" additional directory.
1831 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
1832 append "/personal" to the calendar path to simulate a single
1833 calendar in a choice of many.
1835 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1836 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
1837 methods back here. Moved the folder existence check here, and do
1838 it on self only when the lookup happens for a non-folder object.
1839 This permits to accept entries for folders with parents who
1842 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1844 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1845 -shouldTakeValuesFromRequest:requestinContext:context]): same as
1848 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1849 -shouldTakeValuesFromRequest:requestinContext:context]):
1850 redesigned method since any method called can be received from a
1851 POST or a GET. Instead we check the method call itself and we
1852 accept only if it has the "save" prefix.
1854 * SoObjects/Appointments/SOGoAptMailNotification.m
1855 ([SOGoAptMailNotification -getSubject]): returns the subject an a
1856 quoted-printable encoded string, if needed.
1858 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1859 -asQPSubjectString:encoding]): moved method into
1860 NSString+Utilities.m.
1862 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1864 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1865 -messageForwardingList])
1866 ([UIxPreferences -itemMessageForwardingText])D
1867 ([UIxPreferences -userMessageForwarding])
1868 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
1869 new template methods for manage the user preference regarding
1872 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
1873 algorithm to return, in order, the user's defined language or the
1874 first browser language or, finally, the default language.
1875 ([SOGoUser -messageForwarding]): new method that returns the user
1876 preference for message forwarding: "inline" or "attached",
1877 defaulting to "attached".
1879 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1880 -contentForInlineForward]): new method that returns the content of
1881 the message for inline forwarding based on the SOGoMailForward
1884 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1885 -fetchMailForForwarding:sourceMail]): check the user preference
1886 for message forwarding and compose inline forwarded messages if required.
1888 * SoObjects/Appointments/SOGoCalendarComponent.m
1889 ([SOGoCalendarComponent
1890 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1891 now use a template based on the language returned from the
1894 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
1895 a subclass of SOGoMailForward for English locale.
1897 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
1898 a subclass of SOGoMailForward for French locale.
1900 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
1901 helps build template for inline forwarded messages.
1903 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1905 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
1906 to handle "<var:if-ie>" template tags.
1908 * UI/SOGoElements: new extension bundle containing sogo-specific
1911 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1912 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
1913 selected in the dialog.
1914 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
1915 first category, if ever, of the calendar entity.
1917 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1918 -composeAction]): restored method since it is needed by the
1921 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1922 -composeAction]): the address fields should be arrays and not
1925 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
1926 that returns the build date of SOGo in the template.
1928 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1930 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1931 -_flattenedRecords:records]): when the c_cn field is empty,
1932 returns set a formatted string with the concatenation of
1933 c_givenname and c_sn as the displayName.
1935 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1936 -isValidMailAccountName:_key]): prevent unknown accounts from
1939 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1940 -pathToAttachmentObject]): we no longer need the filename
1941 extension for SoLookup...
1943 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1944 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
1945 filename to have an extension, and thus accept any filename.
1947 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1948 -currentCName]): new method that returns the c_name of the
1949 contact, correctly escaped to be passed by url afterwards.
1951 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1952 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
1953 instance of [self decodedFlatContent] instead of the buggy
1954 NSString from [super flatContentAsString] to the parser.
1956 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1958 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
1959 new category method to reponds to the "delete" web command on
1961 ([UIxMailActions -deleteAttachmentAction]): new category method to
1962 reponds to the "deleteAttachment" web command on drafts, taking
1963 the "filename" url parameter into account.
1965 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1966 -contentForEditing]): new method that retrieve the editable mail
1968 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
1969 returns the body keys for attached files (parts with a "filename"
1972 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1973 -asQPSubjectString:encoding]): do not change the string if the
1974 encoded string has the same length (which means it is already
1976 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
1977 that retrieve a draft along with its attachments for editing.
1978 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
1979 choke if the "to" header field is empty.
1980 ([SOGoDraftObject -delete]): new method to delete the draft folder
1981 whenever operations are done.
1983 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1985 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
1986 useless stub method, of which the intention was implemented in
1988 ([-lookupSentFolderUsingAccount]): removed obsolete method.
1989 ([-selectedMailIdentity]): removed obsolete method.
1990 ([-lookupSentFolderUsingFrom]): removed obsolete method.
1991 ([-storeMailInSentFolder:_path]): removed obsolete method, of
1992 which the mechanism has been put in -[SOGoDraftObject sendMail]
1994 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
1995 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
1996 adapted algorithms to the new SOGoDraftObject methods.
1997 ([-deleteAction]): removed method since local draft objects cannot
1998 be removed by the user.
2000 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2001 -expungeAction]): new method replacing the one previously found in
2003 ([UIxMailFolderActions -createFolderAction])
2004 ([UIxMailFolderActions -renameFolderAction])
2005 ([UIxMailFolderActions -deleteFolderAction])
2006 ([UIxMailFolderActions -emptyTrashAction])
2007 ([UIxMailFolderActions -subscribeAction])
2008 ([UIxMailFolderActions -unsubscribeAction]): error situations
2009 should have http return code 500 instead of 403.
2011 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2012 -composeAction]): new method replacing the one previously in
2015 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2016 -imap4URLString]): removed overriden method (see below).
2018 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
2019 cache the mailbox acl.
2020 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
2021 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
2023 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
2024 the new method of determining the users mail accounts.
2026 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
2027 longer adds a "/" at the end of the string (the default for
2028 folders), therefore this will be overriden in SOGoMailFolder
2029 rather than in SOGoMailObject.
2031 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
2032 method, moved into the new UIxMailActions module class.
2034 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
2035 -newDraft]): new method that returns a new SOGoDraftObject
2036 instance with a unique filename based on the current timestamp and
2037 the "newDraft" prefix.
2039 -lookupName:nameinContext:localContextacquire:acquire]): overriden
2040 method by detecting local drafts with their "newDraft" prefix.
2041 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
2043 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
2044 from scratch by making it a subclass of SOGoMailFolder.
2046 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
2049 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
2052 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
2055 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
2056 new method, initializing the new ivars: IMAP4ID, headers, text,
2057 sourceURL and sourceFlag.
2058 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
2059 ([-_ensureUserSpoolFolderPath])
2060 ([-saveMimeMessageToTemporaryFileWithHeaders:])
2061 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
2062 ([-deleteTemporaryMessageFile:], [-delete], [-content])
2063 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
2064 ([-uid], [-flags], [-size], [-envelope]): removed methods.
2065 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
2067 ([SOGoDraftObject -setSourceURL:newSourceURL])
2068 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
2069 methods to store the url of the original message between accesses
2070 so that, depending on the action taken (forward or reply), the
2071 correct flag can be given.
2072 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
2073 the imap4 id that is returned for the message whenever it is saved
2074 into the drafts folder.
2075 ([SOGoDraftObject -save]): new method that takes in charge the
2076 saving of the message in the IMAP drafts folder.
2077 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
2078 new method that fills the original data of the new message with
2079 the reply content of the original message.
2080 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
2081 above for message forwarding.
2082 ([-spoolFileManager]): removed useless method (only returned the
2083 default filemanager...)
2084 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
2085 the resulting message as an NSData chunk.
2087 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
2088 containing a rewrite of the mail action methods found in
2089 UI/Mailer/, that needed to be put in the SOGoMailObject class.
2090 ([SOGoMailObject -subjectForReply]): new method that returns a
2091 subject suitable for replies.
2092 ([SOGoMailObject -contentForReply]): new method that returns the
2093 textual content of an email, quoted for replying.
2094 ([SOGoMailObject -filenameForForward]): new method that returns
2095 the name of the filename that should contain the forwarded
2096 message, based on its subject.
2097 ([SOGoMailObject -subjectForForward]): explicit.
2099 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2101 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
2102 -mailAccounts]): rewrote method to return the name of the mail
2103 accounts now available with the -[SOGoUser mailAccounts] method.
2104 ([UIxMailMainFrame -showLinkBanner]): removed method.
2105 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
2106 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
2107 ([UIxMailMainFrame -rootURL]): removed method.
2108 ([UIxMailMainFrame -userRootURL]): removed method.
2109 ([UIxMailMainFrame -calendarRootURL]): removed method.
2110 ([UIxMailMainFrame -contactsRootURL]): removed method.
2111 ([UIxMailMainFrame -hasErrorText])
2112 ([UIxMailMainFrame -errorText])
2113 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
2114 ([-composeAction]): removed method. Now provided by
2115 UIxMailAccountActions.
2116 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
2117 ([UIxMailMainFrame -hideFolderTree]): removed method.
2118 ([UIxMailMainFrame -treeRootClassName]): removed method.
2119 ([UIxMailMainFrame +initialize]): removed method.
2120 SOGoMailTreeRootClass userdefaults will no longer have any effect.
2122 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
2123 -redirectToLocation:newLocation]): new method that implements the
2124 same functionality as WOComponent.
2126 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
2128 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
2129 method that returns whether the current mail is store in the
2130 drafts folder hierarchy.
2132 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
2133 ([-primaryEmail]): removed method.
2134 ([SOGoUser -primaryIMAP4AccountString]): removed method.
2135 ([SOGoUser -mailAccounts]): new method that returns an array
2136 containing description dictionaries for all the user mail
2137 accounts. Each account also contain the user's identities for that
2139 ([SOGoUser -allIdentities]): new utility method that returns all
2140 the user identities on all accounts.
2141 ([SOGoUser -primaryIdentity]): new method return the first
2142 identity of the first account.
2144 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
2146 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2147 -isInDraftsFolder]): returns NO.
2148 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
2150 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
2152 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2153 -isInDraftsFolder]): new method that detects if self is contained
2154 by the drafts folder by calling itself on the container object.
2156 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
2158 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
2159 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
2160 return the name of the mail accounts now available with the
2161 -[SOGoUser mailAccounts] method.
2163 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
2166 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
2169 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
2170 -keysWithFormat:format]): method that forward the method of the
2171 same name to each member of the array, considering they all are
2172 instances of NSDictionary.
2173 ([NSArray -objectsForKey:key]): same principle as above.
2174 ([NSArray -flattenedArray]): new method that transforms an array
2175 of arrays into a single array containing all the elements of the
2178 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
2179 -keysWithFormat:keyFormat]): new method inspired by the python
2180 string formatting system and which replaces occurences of "%{key}"
2181 by the corresponding keys.
2183 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2185 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
2186 sql script before the generic one when initializing mandatory
2189 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2191 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2192 -pureEMailAddress]): new utility method inspired by the
2193 "_rawSender" private method in SOGoDraftObject, which it now
2196 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
2197 provides a common API for sending emails, no matter what the
2200 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2202 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2203 -quotasAction]): invoke "relativeImap4Name" instead of
2204 "nameInContainer" since the latter also returns the "folder"
2207 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2208 -listMailboxesAction]): declare the output as text/plain in UTF-8.
2210 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2211 -deleteFolderAction]): fixed the url of the destination folder.
2213 * Main/SOGo.m ([SOGo +initialize]): show the build date and
2214 hostname at startup.
2216 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2218 * SoObjects/Appointments/SOGoCalendarComponent.m
2219 ([SOGoCalendarComponent
2220 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
2221 set the mail date to the current date string returned by our
2222 rfc822DateString extension method.
2224 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2225 -_gcsFoldersFromFolder:): ignore the personal folders who are
2226 returned but don't really exist.
2228 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
2230 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
2231 has to return only one element.
2233 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2235 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
2236 -content]): new method returning the decoded content of the
2237 corresponding attachment as an NSData instance.
2238 ([UIxMailPartViewer -filename]): if the "filename" parameter of
2239 the metadata parameterList is empty, try to find out the filename
2240 from the "disposition" metadata returned with the BODYSTRUCTURE
2243 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
2244 -composeAction]): prefix the INBOX folder with "folder".
2246 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
2247 -relativeImap4Name]): return nameInContainer stripped from its
2248 first 6 characters since all folder names are prefixed with
2251 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2252 -imap4URLString]): invoke -relativeImap4Name instead of
2253 "nameInContainer" since the former will return the fixed IMAP4
2254 foldername and the latter the SoObject name.
2256 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2257 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
2259 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
2260 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
2261 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
2262 ([SOGoMailAccount -sentFolderNameInContext:])
2263 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
2264 names with "folder".
2265 ([SOGoMailAccount -inboxFolderInContext:_ctx])
2266 ([SOGoMailAccount -sentFolderInContext:_ctx])
2267 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
2268 the folder names with "folder" since they are prefixed earlier.
2270 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2272 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
2273 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
2274 all starts with "folder".
2276 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
2277 longer declare security info from here.
2279 * SoObjects/Mailer/SOGoMailFolder.m
2280 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
2281 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
2282 folder names now always start with "folder".
2284 * SoObjects/Mailer/SOGoMailAccount.m
2285 ([-lookupName:inContext:acquire:]): folder names now always start
2288 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2290 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
2291 -forwardAction]): adapted to the new saveAttachment:withMetadata:
2294 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
2295 code to save the attached filenames with the filename returned by
2296 the web server as well as their mime types.
2298 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
2299 ([UIxMailPartMessageViewer -toAddresses])
2300 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
2301 the corresponding fields separated with a ", " (if needed).
2303 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
2304 -saveAttachment:_attachwithMetadata:metadata]): new method
2305 replacing -saveAttachment:withName: and which takes a dictionary
2306 as parameter with the filename and the mime type of the
2308 The mimetype is then saved in a hidden text file.
2309 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
2310 take the mime type from the hidden text file related to the
2313 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
2314 ([SOGoContactGCSFolder
2315 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2316 return records if the db records are > 0 and not just > 1...
2318 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2320 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
2322 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
2324 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2325 ([SOGoContactLDAPFolder
2326 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2327 translate the returned records to a normalized form.
2329 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2330 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
2331 translate the returned records to a normalized form.
2333 * UI/Scheduler/UIxCalListingActions.m,
2334 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
2335 SoObjects/SOGo/AgenorUserDefaults.m,
2336 SoObjects/Contacts/SOGoContactGCSFolder.m,
2337 SoObjects/Appointments/SOGoAppointmentFolder.m,
2338 OGoContentStore/OCSiCalFieldExtractor.m,
2339 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
2340 table fields with "c_".
2342 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2344 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
2345 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
2346 the application settings. If set, both limit will influence the
2347 maximum size of the resultsets and the time taken to solve them.
2348 ([LDAPSource -_initLDAPConnection]): initialize the limits.
2350 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2352 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
2353 method that declares the DAV namespace related to CardDAV.
2354 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
2355 method that declares the "access-control" and "addressbook-access"
2356 classes to the list.
2358 * SoObjects/Appointments/SOGoAppointmentFolder.m
2359 ([-lookupActionForCalDAVMethod:]): removed method.
2360 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
2361 method that declares the DAV namespace related to CalDAV.
2363 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
2364 optional method for subclasses which handle specific extensions to
2365 the DAV protocol: CardDAV or CalDAV.
2367 -lookupName:lookupNameinContext:localContextacquire:acquire]):
2368 new overriden method that handles dav invocations for extensions
2369 to DAV by returning an appropriate SoSelectorInvocation.
2371 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2372 -asDavInvocation]): new method returning a dictionary with a "ns"
2373 key representing the dav namespace and a "method" key representing
2374 the dav method name of the request.
2376 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
2377 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
2379 ([UIxPreferences -shouldDisplayPasswordChange]): new template
2380 method that returns the value of SOGoUIxUserCanChangePassword.
2382 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
2383 scan the value of SOGoUIxDefaultModule. If not set, the default
2384 module defaults to "Calendar".
2385 ([SOGoUserHomePage -defaultAction]): redirect the user to the
2386 value of "SOGoUIxDefaultModule".
2388 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2390 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2391 -contactInfos]): cache the results to avoid multiple invocations.
2393 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2394 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
2395 really should return something or if we fake to return nil...
2397 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2399 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
2400 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
2401 default is set to "bypass".
2403 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2404 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
2405 when authMethod is set to "bypass" from now on. This would avoid a
2406 security concern with a default installation of SOGo.
2407 AuthentificationMethod is now prefixed with "SOGo" for better
2410 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2412 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2413 -quotasAction]): new method that returns a json representation of
2416 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2418 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2419 -imap4URL]): rewrote method to support accented mailbox names.
2420 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
2421 SOGoAuthenticator's passwordInContext:.
2423 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2424 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
2425 start and due dates to nil if hasStartDate and hasDueDate are
2428 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2429 -passwordInContext:context]): made method public.
2431 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2432 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
2433 to false to avoid a null violation.
2435 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2437 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2438 -contentAsString]): returns the message encoded in ISO Latin 1
2441 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
2442 SOGoSuperUsername user defaults.
2443 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
2445 ([SOGoUser -rolesForObject:objectinContext:context]): if the
2446 current user is the superuser, grant him/her the "owner" role.
2448 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
2449 the folder only if the current user is the owner of the future
2452 * SoObjects/Appointments/SOGoCalendarComponent.m
2453 ([SOGoCalendarComponent -contentAsString]): we return the content
2454 based on the permissions returned by the security manager instead
2455 of by looking at the user roles.
2457 * SoObjects/Appointments/SOGoAppointmentFolder.m
2458 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
2459 folders of the user to whom this folder belongs instead of the
2460 active user. This way, a delegate user will be able to have the
2461 same view that the original user has if he connects from his user
2464 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
2465 user exists before creating the SOGoUserFolder instance. If not,
2468 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
2469 return the message source code in plain text.
2471 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2472 -contentAsString]): returns the message encoded in UTF8.
2474 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2476 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
2477 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
2478 leading tagname into account when serializing the element values.
2480 * Main/SOGoProductLoader.m: only load bundle directories ending
2481 with the "SOGo" extension.
2483 * Main/SOGo.m ([SOGo
2484 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
2485 result set if the query has caused no exception. Otherwise we get
2486 an "evaluation is in progress exception".
2488 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2490 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2491 -generateSQLForInsert]): initialize error to nil before the
2492 serialization. Otherwise the method can get confused if it ever is
2493 initialized to something else.
2495 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
2496 -folderIsMandatory]): returns NO unconditionnally.
2498 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2499 -appendPersonalSources]): add the "personal" folder to the list of
2500 user folders even if it doesn't exist, so that it is created when
2501 the user accesses it.
2503 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2504 -folderIsMandatory]): returns YES if nameInContainer is set to
2505 "personal", which is the default address book.
2507 * SoObjects/Appointments/SOGoAppointmentFolder.m
2508 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
2509 users must have one Calendar folder (one and only one).
2510 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
2511 escaping '\' so make the carriage return a real one. This way,
2512 PgSQL 8 won't complain about escaping the string.
2514 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
2515 method that create the folder if considered mandatory.
2516 ([SOGoFolder -folderIsMandatory]): new method that determines
2517 whether the folder should be created automatically or not. To be
2518 overriden by subclasses.
2520 * Main/SOGo.m ([SOGo -run]): override method and create the
2521 missing system tables if needed.
2523 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2525 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
2526 -mailDateFormatter]): returns the user's date formatter.
2528 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
2529 applies the user timezone to the date object before returning it.
2531 * UI/Common/UIxSortButton.m: removed useless class module.
2533 * UI/Common/UIxSortableTableHeader.m: removed useless class
2536 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2537 -contactInfos]): use the "asc" url parameter instead of "desc" to
2538 determine the ordering.
2539 ([-sortOrdering]): removed method.
2540 ([UIxContactsListView -init]): removed the "searchText" ivar.
2541 (general): the template no longer use the UIxSortableTableHeader
2544 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
2545 -defaultSortKey]): default sort following the messages arrival
2546 instead of their date.
2547 ([-isSortedDescending]): removed method.
2548 ([-imap4SortOrdering]): use the "asc" url parameter instead of
2549 "desc" to determine the ordering.
2550 (general): the template no longer use the UIxSortableTableHeader
2553 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2555 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
2557 ([-setQualifier:_msg], [-qualifier]): removed methods.
2558 ([UIxMailListView -defaultAction]): added code to handle the
2559 search criteria and value passed as url parameters. Also, we now
2560 handle the same search criterias as Thunderbird/Icedove.
2562 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2564 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
2565 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
2566 the string instead of the string itself.
2567 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
2569 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
2570 bool var "acceptAnyUser" that is set when the AuthenticationMethod
2571 user default is nil.
2572 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
2573 unconditionnally returns an instance whenever acceptAnyUser is set.
2575 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2577 * Main/sogod.m (main): prevent SOGo from running as root.
2579 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2581 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2582 -setCurrentPassword:newPassword]): new stub method.
2583 ([SOGoUser -dateFormatterInContext:context]): new method that
2584 returns an instance of SOGoDateFormatter configured based on the
2587 * UI/Common/UIxPageFrame.m ([UIxPageFrame
2588 -relativePreferencesPath]): new method.
2590 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
2591 removed useless method.
2593 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
2594 different configurable formats (long and short date + time).
2596 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
2598 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2599 -isInternetRequest]): removed method.
2601 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2602 -jsonRepresentation]): new method with an explicit name.
2604 * UI/PreferencesUI/product.plist: new bundle that provides a web
2605 ui for handling user defaults.
2607 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
2609 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
2611 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
2613 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2615 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
2617 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2619 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
2620 -compareEventsAscending:otherEvent]): no longer use compare: on
2621 the time objects since one of them could be an NSNull, which
2622 crashes when comparing with anything.
2624 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2625 -eventsListAction]): sort events from here.
2626 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
2628 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
2629 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
2631 * SoObjects/Appointments/SOGoAppointmentFolder.m
2632 ([SOGoAppointmentFolder
2633 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
2634 no longer sort elements from here.
2636 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2638 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2639 -aclsForUser:uid]): implemented method by forwarding the request
2640 to the container. This fixes a bug where users could no longer
2641 read emails from shared folders.
2643 * SoObjects/Appointments/SOGoCalendarComponent.m
2644 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
2645 here, but rather in its parent class.
2647 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
2648 -stringForSecondsSinceThe70s:seconds]): new utility method.
2650 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2651 -eventsListAction]): no longer reduce the end day of one day for
2652 all day events since everything has been fixed in
2653 OCSiCalFieldExtractor.
2655 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2656 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
2657 the end date of all day events of 1 so that they stay on their
2660 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2662 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
2664 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
2666 ([-fetchCoreTasksInfos]): removed method.
2668 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2669 -init]): initialize an instance of SOGoDateFormatter.
2670 ([UIxCalListingActions -eventsListAction]): the display start and
2671 end dates are added to the listing for each event.
2673 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
2675 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2676 -isAllDay]): returns YES if the "hm" url parameter is set to
2678 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
2679 is displayed one day earlier.
2681 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2683 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2684 -_setupContext]): take the range of dates specified by the popup
2687 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
2688 WODirectAction that returns WOResponse objects with the events or
2689 todos satisfying the parameters passed in the url.
2691 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2692 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
2693 "isAllDay" into account and compute the amount of days to pass to
2696 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
2698 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
2699 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
2700 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
2701 new method that returns a json-formatted array of the visible tasks
2702 for the current user.
2704 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2706 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
2707 object must be present in the list of UIDs we delete the object
2708 from. Otherwise Calendar objects having no organizer and no
2709 attendees will remain in their owner's Calendar.
2711 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2712 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
2713 first 3 elements of the path array if the url returned by
2714 baseURLInContext: returns a hostname.
2716 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2717 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
2718 nil, in which case a crash happens when calling hasPrefix:.
2719 ([SOGoMailFolder -_sharesACLs]): same as above.
2720 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
2721 otherUsersFolderName is nil, we return nil.
2722 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
2723 nil from [self otherUsersPathToFolder], we return nil too.
2725 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2727 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2728 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
2729 the result of [self baseURLInContext:] to avoid a double escaping
2730 in the resulting string.
2732 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
2733 the user has the "ObjectReader" role on the parent container, then
2734 he is granted the "ObjectViewer" role on this object. Same for
2735 "ObjectEraser", although this might change later.
2737 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2738 -toolbar]): determine the toolbar filename based on the
2739 permissions declared by the securitymanager. The role mechanism
2740 has been adjusted on a lowerlevel so we can simplify the code.
2742 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2743 -initWithName:newNameinContainer:newContainer]): read the content
2744 directly from here. That way we can determine whether the object
2746 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
2747 the ObjectCreator role is enabled, we also grant the ObjectEditor
2748 role to the current user.
2750 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
2751 changed the method paradigm to only return HTTP code 204. Not test
2752 is done whatsoever since the security manager does it for us.
2754 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
2755 removed method because the same exists in UIxFolderActions.m
2757 * UI/Contacts/UIxContactsUserRightsEditor.m
2758 ([UIxContactsUserRightsEditor
2759 -setUserCanReadObjects:userCanReadObjects]): new method.
2761 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
2762 "FolderEraser" and special permission "Access Object". Removed
2763 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
2764 can be used instead. Removed "FolderReader" since it is useless.
2766 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2767 -vCard]): directly use the "content" ivar since it is initialized
2768 during object creation.
2770 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2771 ([SOGoContactLDAPFolder -init]): no longer handle the
2772 nameInContainer no the container ivars. They were removed because
2773 this class is a descendant of SOGoObject which already has them.
2774 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
2775 returning "displayName".
2776 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
2779 * SoObjects/Appointments/SOGoCalendarComponent.m
2780 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
2781 ([SOGoCalendarComponent -findParticipant:user]): new name for
2782 method "participant:".
2783 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
2784 findparticipant but taking a uid string as parameter.
2785 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
2786 iCalendar automatically. Instead, this is done only when the user
2787 is a "date and time viewer".
2788 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
2789 (modifier and responder) into account by compiling them with the
2792 * SoObjects/Contacts/SOGoContactFolder.h: removed
2793 "nameInContainer" from the list of required methods.
2795 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
2796 -davContentType]): returns "text/calendar".
2798 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2799 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
2800 groupdav resource-type.
2802 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2803 -davContentType]): same as below.
2805 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2806 -initWithName:newNameinContainer:newContainer]): new overriden
2807 method setting the custom owner directly.
2809 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2810 -davContentType]): same as below.
2812 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2813 -davContentType]): same as below.
2815 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
2816 declare "httpd/unix-directory".
2818 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
2819 "UTC" as fallback timezone instead of "Canada/Eastern".
2820 ([-hasEmail:email]): make use of the new NSArray's
2821 containsCaseInsensitiveString: method.
2823 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2824 -davContentType]): declare "message/rfc822" as content type.
2826 * SoObjects/Appointments/SOGoAppointmentFolder.m
2827 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
2829 ([SOGoAppointmentFolder
2830 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
2831 ([-fetchContentObjectNames]): commented out method since it was
2832 usefull only for testing Funambol.
2834 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
2835 -containsCaseInsensitiveString:match]): an enhanced version of
2838 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
2840 ([-showMarkDeletedButton]): removed useless method.
2841 ([-showTrashButton]): removed useless method.
2843 * SoObjects/Appointments/iCalEntityObject+SOGo.m
2844 ([iCalEntityObject -userIsParticipant:user]): new proxy method
2845 that invoked isParticipant on self for each possible email
2846 addresses of the user passed as parameter.
2847 ([iCalEntityObject -userIsOrganizer:user]): same as above.
2849 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
2852 * SoObjects/Appointments/SOGoAppointmentObject.m
2853 ([SOGoAppointmentObject
2854 -saveContentString:contentStringbaseVersion:baseVersion]): remove
2855 method since an event may not have an organizer.
2857 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2858 -GETAction:localContext]): clarified method. Added support for
2859 content-type (thanks to Helge Hess).
2860 ([SOGoObject -initWithName:_nameinContainer:_container]):
2861 initialize and retain the owner.
2862 ([SOGoObject -davContentType]): returns "text/plain".
2864 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2866 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2867 -addUserInAclsAction]): send an acl addition mail.
2868 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
2871 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2872 -_realActionWithFolderName:folderDict]): handle the possible
2873 presence of the "mail-invitation" url parameter. If present, the
2874 user will be redirected to the relevant folder.
2876 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
2877 ([SOGoUser -language]): new method that returns the user's
2878 preferred language, or the system's if none has been set yet.
2880 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
2881 that returns the full dav url to self.
2882 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
2883 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
2884 returns the full so url to the base of the SOGo module to which
2885 self belongs, and for the specified user.
2886 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
2887 but for the current user.
2888 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
2889 required by the acl advisory templates and which returns a link
2890 the target user can click to activate its new subscription.
2891 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
2892 but for inclusion of the application/x-sogo-notification part,
2893 which will be handled by the Lightning enhancer plugin.
2895 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
2896 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
2897 do nothing yet since imap folder subscription is not handled yet.
2899 * SoObjects/SOGo/SOGoContentObject.m
2900 ([-hasSupportForDefaultRoles]): removed method.
2902 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2903 -getFullEmailForUID:uid]): new method that returns the username +
2906 * SoObjects/Appointments/SOGoCalendarComponent.m
2907 ([SOGoCalendarComponent +initialize]): the default language for
2908 mail templates is now set to English.
2910 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
2911 SOGoACLAdvisory implementing the french template for user removal
2914 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
2915 SOGoACLAdvisory implementing the french template for user
2918 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
2919 SOGoACLAdvisory implementing the english template for user removal
2922 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
2923 SOGoACLAdvisory implementing the english template for user
2926 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
2927 supercall of all the acl advistory templates. The model is based
2928 on SOGoAptMailNotification except that the template encapsulates
2929 the message to be sent. Later, we might create a superclass common
2930 to all template-based emails.
2932 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2933 -addRange:newRange]): new method that store a string
2934 representation of the NSRange passed as parameter.
2935 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
2936 any range contained in self intersect with the one passed as parameter.
2938 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
2939 store ranges in an array to prevent them from intersecting with
2940 each other during the passes.
2942 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2944 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2945 -primaryFetchMailboxInfo]): useless method. Removed.
2947 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2949 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2950 -toManyRelationshipKeys]): invoke [self subfolders].
2951 ([SOGoMailFolder -subfolders]): new method containing what used to
2952 be in toManyRelationshipKeys.
2953 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
2956 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2957 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
2958 named and at the beginning of which we put the predefined folders.
2960 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2961 -emptyTrashAction]): new method inspired by a similar one from
2962 UIxMailListView, to which we added the ability to remove
2965 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
2966 method. Replaced with a similar one in UIxMailFolderActions.
2968 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2969 -renameFolderAction]): implemented method.
2970 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
2971 specified folder. Instead, we put it in the trash folder.
2973 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
2974 method, replaced with a similar method in the new
2975 UIxMailFolderAction class module.
2976 ([-deleteFolderAction]): idem.
2978 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2979 -createFolderAction]): new method implementing subfolder creation.
2980 ([UIxMailFolderActions -renameFolderAction]): new method
2981 implementing subfolder renaming (basic implementation to be
2983 ([UIxMailFolderActions -deleteFolderAction]): new method
2984 implementing folder deletion.
2986 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
2987 web actions related to the handling of imap folder.
2989 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2991 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2992 -ownerInContext:localContext]): overriden method because we are an
2993 IMAP4 client and we need a bit more intelligence to deduce the
2994 owner of the current folder.
2995 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
2996 return an NSException so we need to be careful here to avoid a
2998 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
2999 NSException so we need to be careful here to avoid a crash.
3001 * SoObjects/Mailer/SOGoMailAccounts.m
3002 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
3003 there is no longer any concept of Intranet or Internet connection
3006 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3007 -sharedFolderName]): new method.
3008 ([SOGoMailAccount -otherUsersFolderName]): new method.
3010 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
3011 new javascript code and the new UIxMailAccountActions class.
3013 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
3014 javascript code and the new UIxMailAccountActions class.
3016 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
3017 new javascript code and the new UIxMailAccountActions class.
3019 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
3020 -listMailboxesAction]): new method that returns a json-formatted
3021 tree of all the mailboxes available to the current user.
3023 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
3024 web actions related to the handling of mail accounts.
3026 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
3029 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
3030 -jsonRepresentation]): new interface method meant to be overriden
3031 by the primitive classes.
3033 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3035 * UI/MailerUI/UIxMailSplashView.m: removed.
3037 * SoObjects/Appointments/SOGoCalendarComponent.m
3038 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
3039 the uid to the list only when the user email is recognized by the
3042 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3044 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3045 -isDeletionAllowed]): completed method with the new imap acl api.
3047 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
3050 * SoObjects/SOGo/SOGoPermissions.m: added the new role
3051 "SOGoMailRole_MessageEraser".
3053 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
3054 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
3055 "defaultUserID" method into account.
3057 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
3058 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
3059 "defaultUserID" method into account.
3061 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
3062 methods to support the IMAP acls mentionned in the RFC 4314,
3063 removed the ones specific to Cyrus.
3065 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
3066 mandatory method for subclasses. Removed the SOGoDefaultUserID
3069 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
3070 overriden method to return @"<default>".
3072 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
3073 -defaultUserID]): overriden method to return @"<default>".
3075 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
3076 -aclsForUser:uid]): overriden method.
3077 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
3078 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
3079 ([SOGoMailFolder -defaultUserID]): overriden method.
3080 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
3082 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3084 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3085 -aclUsersForObjectAtPath:objectPathArray]): new method that being
3086 forwarded the calles to aclUsers for the GCS-based subclasses of
3089 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
3090 methods that would have been used to support IMAP acls. Replaced
3091 them with the new protocol for them that has been implemented in
3092 SOGo during the last few weeks.
3094 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
3095 -hasSupportForDefaultRoles]): override method by returning "YES".
3097 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
3098 -addObjectUniquely:object]): new method with an explicit name.
3100 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
3101 "acl" to "aclUsers". Now designed to return only the uid of the
3102 users involved in an ACL.
3103 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
3104 "NO" by default. To indicate to the acl editor that we don't want
3105 to handle a default user.
3107 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
3108 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
3111 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
3112 provides a view to the IMAP acls.
3114 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
3116 * UI/WebServerResources/MailerUI.js: replaced all invocations of
3117 addEventListener to the use of prototype's Event object. Also,
3118 configured all menus programmatically following descriptions lists
3119 containing their callbacks, or nulls, submenus id or separators.
3121 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3123 * UI/Common/UIxObjectActions.m ([UIxObjectActions
3124 -addUserInAclsAction]): save the previous roles of the user
3125 (unlikely) or the default roles, or None instead of saving the
3126 roles that should appear the first time in the role editor when no
3127 default has been set...
3129 * SoObjects/SOGo/SOGoObject.m: defined a new constant
3130 "SOGoDefaultUserID".
3132 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3133 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
3134 ignore the "AuthorizedSubscriber" role and add the "None" role
3135 when no other role is found.
3137 * UI/Common/UIxAclEditor.m: added a button for the new default
3140 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
3141 -_initRights]): don't take the "None" role into account when
3142 initializing the list of current roles.
3144 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
3147 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3149 * SoObjects/SOGo/NSString+Utilities.m ([NSString
3150 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
3151 There is no need to subscract the start from the length if a space
3152 is not found since the range has not changed either. Finally, the
3153 first character before the url might also be a tab or a cr, so we
3154 match it against the "urlAfterEndingChars" custom NSCharacterSet.
3155 ([NSString -stringByDetectingURLs]): modified to handle email
3156 addresses and add a correct "mailto:" link.
3158 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3160 * SoObjects/Appointments/SOGoAppointmentFolder.m
3161 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
3162 method to return the events in the range of 2 weeks ago up to 4
3165 * UI/MailPartViewers/UIxMailPartTextViewer.m
3166 ([UIxMailPartTextViewer -flatContentAsString]): use the new
3167 "stringByDetectingURLs" method to offer clickable urls.
3169 * SoObjects/SOGo/NSString+Utilities.m ([NSString
3170 -stringByDetectingURLs]): this new method replaces passive URLS
3171 with active ones for HTML resolution of the text.
3173 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3175 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3176 -asQPSubjectString:encoding]): simplified method.
3177 The headers indicates "utf-8" again thank to our fix in
3180 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
3183 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3185 * UI/Common/UIxObjectActions.m ([UIxObjectActions
3186 -removeUserFromAclsAction]): implemented this method which was
3187 missing and is required to remove users from ACLs.
3189 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3190 -subscribeAction]): folderDict was not autoreleased, resulting in
3193 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3194 -primaryFetchProfile]): when building with libFoundation, don't
3195 use the "propertyList" method from NSString. Rather, we convert
3196 the string to an NSData instance and passit as parameter to
3197 NSDeserializer. This way, we obtain a mutable dictionary rather
3198 than an immutable one.
3200 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
3201 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
3202 constant string "contentTypeValue".
3203 contentTypeValue is now set back to iso-8859-1 since NGMime
3204 converts extracts the data in that encoding.
3206 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3208 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
3209 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
3210 "bindFields" value is present in the user defaults, use the
3211 specified fields to find the dn of the user to bind.
3212 ([LDAPSource -allEntryIDs])
3213 ([LDAPSource -fetchContactsMatching:match])
3214 ([LDAPSource -lookupContactEntry:entryID])
3215 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
3216 bind and unbind the connection on each request.
3218 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
3220 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3221 -contactSearchAction]): simplified method to use the facilities
3222 provided by the LDAPUserManager. No longer takes care of the
3223 "ldap-only" url parameter since all requests are handled by the
3226 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3227 -primaryFetchProfile]): check that the value returned is not null
3228 before interpreting it.
3230 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
3231 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
3232 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
3233 system email is already present, remove it before adding it.
3235 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
3236 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
3237 loginToCheck is not empty.
3238 ([LDAPSource -fetchContactsMatching:match]): check that match is
3240 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
3242 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
3245 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3247 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
3249 ([SOGoUser -systemEmail]): returns the email formed from the
3250 username and the default mail domain.
3251 ([SOGoUser -hasEmail:email]): test whether the user has the
3252 specified email, in a case-insensitive way.
3254 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3255 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
3256 check login information.
3258 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3259 ([SOGoContactLDAPFolder
3260 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
3261 no longer manage LDAP connections. The requests are forwarded to
3262 the relevant LDAPSource instead.
3264 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3265 -appendSystemSources]): pass LDAPSource objects to
3266 SOGoContactLDAPFolder instances.
3268 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
3269 address of the "from" field before sending the message. Otherwise,
3270 sending the mail won't work.
3272 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
3273 rewrote this method to request all the available email identities
3274 for the current user. Also, the from field also contains the full
3275 name of the user, not just his/her email address.
3277 * SoObjects/Appointments/SOGoCalendarComponent.m
3278 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
3279 from the previous module iCalEntityObject+Agenor.
3280 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
3281 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
3284 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
3285 replacing the SOGoContactLDAPEntry module. It was renamed as such
3286 because it now receives a dictionary instead of an NGLdapEntry.
3287 It thus can now handle data from any source of LDIF data, not
3288 only coming from LDAP.
3290 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
3291 implementing most of what used to be the AgenorUserManager class.
3292 The difference is that users are cached in the forme of
3293 dictionaries and many sources are used. Also, it can be used to
3294 search LDAP contacts.
3296 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
3297 the concept of "ldap source", to be used by all the classes
3298 needing access to LDAP-provided information: addressbooks and the
3299 user manager. Most the method thereing are transcriptions of
3300 methods previously found in SOGoContactLDAPFolder. It also contain
3301 utility methods for user matching and authentification.
3303 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
3304 module, rendered useless by code refactoring.
3306 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
3307 with the freshly written "LDAPUserManager".
3309 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3311 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
3312 SOGOContactLDIFEntry.
3314 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
3315 module, obsoleted by code in SOGo/LDAPSource.[hm].
3317 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3319 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
3320 new method with an explicit name.
3322 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3324 * SoObjects/Appointments/SOGoCalendarComponent.m
3325 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
3326 replacing "isOrganizer:orOwner:" by taking only one instance of
3327 SOGoUser as parameter.
3328 ([SOGoCalendarComponent -participant:user]): new method replacing
3329 the previous "isParticipant" boolean method by returning the first
3330 participant matching the user passed as parameter. This method is
3331 used so that both the regular email address and the "system email
3332 address" of the user are matched against the participants emails.
3334 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3335 -getSystemEMailForUID:uid]): new method that returns the email
3336 formed with the user's uid and the default mail domain.
3338 * SoObjects/Appointments/SOGoCalendarComponent.m
3339 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
3340 was previously commented out.
3342 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
3343 forwared to [AgenorUserManager getSystemEmailForUID:].
3345 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3346 -toolbar]): method replacing the one with the same name in the
3347 task and appointment editor classes. This method makes also use of
3348 the new method "isOrganizerOrOwner:" and "participant:" in
3349 SOGoCalendarComponent.
3351 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3352 -toolbar]): removed method, replaced with a method with the same
3353 name in UIxComponentEditor.
3355 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
3356 method, replaced with a method with the same name in
3359 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
3360 -primaryFetchProfile]): the values returned from the database are
3361 converted to a put dictionary first, since the dictionary returned
3362 is actually an immutable one, which can cause a crash afterwards.
3364 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3366 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
3367 and "SOGoRole_ObjectEditor".
3369 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
3370 -prepareRightsForm]): this method is no longer mandatory.
3372 * UI/Contacts/UIxContactsUserRightsEditor.m
3373 ([UIxContactsUserRightsEditor
3374 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
3375 module to handle acls related to the address books. Partial
3378 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3379 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
3382 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
3383 specified roles from cache.
3384 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
3385 put resulting roles in cache.
3387 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
3388 initWithName:inContainer:. Instead, directly initialize the ivars
3389 as it is supposed to be to avoid an infinite loop whenever one of
3390 those two methods are overriden.
3392 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
3395 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3396 -aclsForUser:uid]): override method so that SOGo won't crash when
3397 loading the contact card.
3399 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3401 * SoObjects/Appointments/SOGoAppointmentFolder.m
3402 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
3403 "freebusy" special user should only require opaque elements.
3405 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3407 * SoObjects/Appointments/SOGoAppointmentFolder.m
3408 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
3409 our double declaration where the resulting XML would be screwed.
3410 There is only one collection per namespace.
3412 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
3413 rfc822DateString]): new method that returns a string conform to
3414 rfc 822 and suitable for email headers.
3416 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
3417 "rfc822DateString" category method on the date we put in the
3420 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3422 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
3423 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
3424 which should never be overriden.
3425 ([UIxUserRightsEditor -appendRight:newRight])
3426 ([UIxUserRightsEditor -removeRight:right])
3427 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
3428 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
3429 methods that can be used by the subclasses.
3430 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
3431 mandatorily be overriden to prepare the elements of the subclassed
3433 ([UIxUserRightsEditor -updateRights]): new method that should
3434 mandatorily be overriden to update the user rights from the
3435 elements of the subclassed form.
3437 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
3438 check if the uid is already listed before adding it to our array.
3439 This is because the acl table can contain more than one record per
3440 user/object relationship.
3442 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3443 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
3444 "roles" parameter is now an NSArray instead of a string. Therefore
3445 we loop throughout the array to populate the table. All the
3446 relevant records are removed prior to the addition of the new
3449 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
3450 -aclsForUser:uid]): new override that returns nil until we add
3451 support for IMAP acls.
3453 * SoObjects/Mailer/SOGoMailAccounts.m
3454 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
3456 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3457 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
3459 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3460 -aclsForUser:uid]): override this method which will always return
3463 * SoObjects/SOGo/SOGoPermissions.[hm]: added
3464 [Public,Private,Confidential]
3465 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
3466 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
3467 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
3469 * SoObjects/Appointments/SOGoAppointmentFolder.m
3470 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
3471 that defines default roles for new elements in the acl.
3473 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
3474 module and subclass of UIxUserRightsEditor specific to the
3475 handling of user rights on calendar folders.
3477 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3479 * SoObjects/Appointments/SOGoAppointmentFolder.m
3480 ([SOGoAppointmentFolder -groupDavResourceType]): return both
3481 "vevent-collection" and "vtodo-collection".
3483 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
3484 that implements the detailed editor of user rights per-object.
3486 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3488 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3489 -rolesForObject:objectinContext:context]): no longer query objects
3490 for "roleForUser:". Instead, all objects should implement
3493 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
3494 new method to comply with the new acl "protocol" in SOGoObject.
3495 Uses SOGoFolder's new facilities for ACLS.
3496 ([SOGoContentObject -aclsForUser:uid]): idem.
3497 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
3498 ([SOGoContentObject -removeAclsForUsers:users]): idem.
3500 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3501 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
3502 based folders. This method is derived from the code that was in
3503 UIxAclFolder before its removal.
3504 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
3507 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
3509 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
3510 ([SOGoFolder -setRoleForUsers:uidsto:role])
3511 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
3513 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
3514 that requires overriding by subclasses.
3515 ([SOGoObject -aclsForUser:uid]): idem.
3516 ([SOGoObject -defaultAclRoles]): idem.
3517 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
3518 ([SOGoObject -removeAclsForUsers:users]): idem.
3520 * UI/Common/UIxObjectActions.m: new module implementing the web
3521 actions common to SOGoObject and all its subclasses.
3522 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
3523 user with the clientObject defaults user rights to the object's
3526 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
3527 to the point where it will only list the users (and their name)
3528 associated with an object acl.
3530 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
3531 methods have been moved into SOGoObject and SOGoFolder during a
3534 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3535 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
3536 method made useless by the programmatic handling of iCalendar
3538 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
3539 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
3540 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
3542 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
3543 drop on all folder nodes, not just on leaves.
3545 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3546 ([SOGoContactLDAPFolder
3547 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
3549 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3551 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
3552 debugging facilities when the SOGoDebugObjectAllocation user
3555 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3557 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
3558 method that SOGo will need with non-gnustep Foundation
3560 ([NSString -stringByAppendingPathComponent:component]): new method
3561 that SOGo will need when building with libFoundation. Method
3562 removed later since it is available from
3563 Foundation/NSPathUtilities.h.
3565 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
3568 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
3569 every subclass to access [WOApplication context] without having to
3570 invoke it more than once.
3572 * SoObjects/Appointments/SOGoCalendarComponent.m
3573 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
3574 moved method from SOGoTaskObject and SOGoAppointmentObject up to
3577 * UI/Scheduler/UIxCalSelectTab.m: removed module.
3579 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3581 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
3582 -vCard]): test the prefix of the card in a case-independent way.
3584 * OGoContentStore/OCSContactFieldExtractor.m
3585 ([OCSContactFieldExtractor
3586 -extractQuickFieldsFromContent:content]): we no longer accept
3587 records in a format other than versit vCard so we can get rid of a
3590 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3592 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3593 -selectorComponentClass]): restored method.
3595 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3597 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
3598 -shouldDisplayCurrentTask]): the current task is not displayed if
3599 it is NOT completed or if the "showCompletedTasks" flag is set.
3600 The logic was inverted in Lightning and is now in SOGo too.
3602 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3604 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
3605 want the "work" url instead of the "home".
3607 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3608 -_saveSnapshot]): save url values from snapshot.
3609 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
3611 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3612 -calendarList]): new method replacing "availableCalendars".
3614 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
3615 -calendarFolders]): we now take the list of subscribed calendar
3618 * SoObjects/Appointments/SOGoAppointmentFolder.m
3619 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
3620 method derived from and replacing [UIxCalView calendarFolders].
3622 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3624 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3625 -toManyRelationshipKeys]): don't put the predefined folders in the
3626 list if they are returned by the server.
3628 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
3629 longer store the "flattenedBlocks" in a dictionary since the
3630 object will be deleted anyway and we don't need to put the folders
3633 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3634 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
3635 attachment path into account when computing the part urls.
3637 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3639 * UI/Contacts/UIxContactsListViewContainer.m
3640 ([UIxContactsListViewContainer -additionalFolders]): take the list
3641 of subscribed folders from the new property list used for the user
3642 settings. The value of its key is SubscribedFolders for the
3643 dictionary entry named "Contacts".
3645 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3646 -canAccessContentAction]): new method to override the one from
3647 UIxFoldersActions by taking into account the fact that, this time,
3648 the clientObject is an ldap folder. Removed many method that used
3649 to be related to the handling of the user selector.
3651 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
3652 to make sure they can be removed.
3654 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
3655 populate the calendar entries based on the user settings plist.
3657 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3658 -selectForMailerAction]): restored method.
3660 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
3661 from a simplified version of the old UIxContactEditor (removed).
3663 * UI/Contacts/UIxContactsUserFolders.m: new template module for
3664 selecting users or user folders through an LDAP search of which
3665 the results are displayed as a tree.
3667 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
3668 method "onContactAdd" here since the Mailer is now the only module
3669 to use it when composing emails.
3671 * UI/WebServerResources/generic.js: added code for handling the
3672 new scheme used for describing SOGo folders, common code to handle
3673 folder addition or removal.
3675 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3676 -activateFolderAction]): new method that change the "active"
3677 settings in the folder-related fields in the user settings.
3678 ([UIxFolderActions -deactivateFolderAction]): see above.
3680 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3681 -checkRightsAction]): removed method.
3683 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3684 -updateAdditionalAddressBooksAction]): removed method.
3686 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3687 -updateCalendarsAction]): removed method.
3689 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3691 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3692 -checkRightsAction]): removed method.
3694 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3695 -canAccessContentAction]): new method designed to replace
3696 [UIxCalMainView checkRightsAction] in a more universal way.
3698 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3700 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3701 -roleOfUser:uidinContext:context]): take all the subkeys into
3702 account, not only the "personal" folder.
3704 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3705 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
3706 to the new components.
3708 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
3711 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3712 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
3713 field of the sogo_user_profile table, where the user-customizable
3714 changes will be saved.
3715 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
3716 similar to the one above, using the "settings" field where the
3717 automatic settings will be saved.
3719 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
3720 module to bind the userdefaults to a property list contained in a
3721 specified field of the sogo_user_profile table.
3722 ([AgenorUserDefaults
3723 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
3724 added a "fieldName" parameter.
3726 * UI/Common/UIxFolderActions.m: new module implementing web
3727 actions common to all GCS-based folders.
3729 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3731 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
3732 put a carriage return after the day name.
3734 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3735 -readFreeBusyAction]): restored method.
3737 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3739 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3740 -defaultAction]): remade module to redirect automatically to the
3743 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
3745 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3747 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3748 -deleteAction]): new web method to delete personal addressbook
3751 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3752 -delete]): override method to refuse the deletion of the folder if
3753 its nameInContainer is "personal".
3755 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
3756 that forwards the deletion request to the folder manager.
3758 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3760 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
3761 -zoomList]): new method that returns the list of available zoom factors.
3763 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3764 -changeStatusAction]): rewrote method.
3766 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3767 -_handleAttendeesEdition]): make sure "attendeesNames" has a
3768 length > 0 before computing the attendees. Otherwise there will be
3769 an invalid empty entry.
3770 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
3771 organizer when there are attendees and remove it when the
3772 attendees are removed.
3774 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3776 * UI/Scheduler/UIxAttendeesEditor.m): new component.
3778 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
3779 the task and appointment editors. Now a container component
3780 handling the common elements of tasks and events.
3782 * UI/Scheduler/UIxTaskEditor.m: same as below.
3784 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
3785 a subclass of UIxComponentEditor but a subcomponent of it.
3787 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
3788 toolbar can have the special value "none" to indicate there is
3789 none attached to the window.
3791 * SoObjects/Appointments/SOGoCalendarComponent.m
3792 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
3794 ([SOGoCalendarComponent -isParticipant:email]): new method.
3795 ([SOGoCalendarComponent -calendar:create]): takes one parameter
3796 "create" which is a boolean indicating whether we want to create
3797 the calendar if it does not exist.
3799 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3801 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
3802 of a table, the same way the dayly and weekly views have been for
3805 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
3807 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
3810 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
3811 property to point at the user folder
3813 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3815 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3816 -userInContext:]): returns "SOGoUser".
3818 * SoObjects/Appointments/SOGoCalendarComponent.m
3819 ([SOGoCalendarComponent -contentAsString]): overriden method that
3820 takes the privacy into account and discard the relevant fields if
3821 needed by generating a new content string and caching it.
3822 ([SOGoCalendarComponent
3823 -saveContentString:contentStringbaseVersion:baseVersion]): if the
3824 new method above has cached a content string, release it and set
3825 it to nil so that it will have to be regenerated in the case it is
3827 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
3828 discard the fields that have to be hidden when the card is
3831 * SoObjects/Appointments/SOGoAppointmentFolder.m
3832 ([SOGoAppointmentFolder
3833 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
3834 sure the cards are now handled as instances of
3835 SOGoCalendarComponent instead of SOGoContentObject so that their
3836 content string is taking the privacy classifiction into account.
3837 ([SOGoAppointmentFolder -_privacySqlString]): new method that
3838 generates a query to determine what information can be given and
3839 if the card itself has to be shown.
3841 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3842 -getICalPersonsFromValue:selectorValue]): removed useless
3843 "isAccessRestricted" method.
3845 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3846 -setStyle:_style]): test whether the values of orgmail and
3847 partmails are null before manipulating them, otherwise SOGo sends
3848 a "rangeOfString:" message to an NSNull, which makes it crashes.
3850 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3851 -extractQuickFieldsFromEvent:_event]): we now use the new
3852 "symbolicAccessClass" method from iCalEntity to determine the
3853 value of the "classifiction" field.
3854 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
3857 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3859 * SoObjects/Appointments/SOGoAppointmentFolder.m
3860 ([SOGoAppointmentFolder
3861 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
3862 see below, the query is adapted consequently.
3864 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3865 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
3866 renamed to "classification" and can any integer as value.
3867 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
3870 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3872 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3873 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
3874 don't prepend anything to the class and id named. Instead, we
3875 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
3878 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3880 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
3881 -rolesOfUser:logininContext:context]): if object does not exists
3882 (for example when it's being created), the current user has the
3883 same rights on it than he/she has on its parent container.
3885 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3886 -nameExistsInFolder:objectName]): methods that tests if a c_name
3887 corresponding to the name passed as parameter is present in the db
3890 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3892 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3893 -rolesForObject:objectinContext:context]): test for
3894 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
3896 * SoObjects/Appointments/SOGoCalendarComponent.m
3897 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
3898 returns the roles of the user on the container object if the event
3901 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3903 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
3904 alternativeViewer a multipart/related message is being handled.
3906 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
3909 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
3910 text/html component before text/plain.
3912 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3913 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
3914 fetching of HTML parts.
3916 * SoObjects/Appointments/SOGoCalendarComponent.m
3917 ([SOGoCalendarComponent -componentTag]): new template method that
3918 returns the vcalendar tag of the current object.
3919 ([SOGoCalendarComponent -component]): new method that returns the
3920 first object matching [self componentTag] within the current
3921 calendar object. This method replaces 'firstEventInCalendar:' as
3922 well as "firstTaskInCalendar:".
3923 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
3924 moved method from SOGoAppointmentObject.m.
3926 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3928 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
3929 module which shows each selected user's calendar in a different
3930 column instead of mixing their events together.
3932 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
3933 replaced use of [NSString stringByTrimmingWhiteSpaces] with
3934 [NSString stringByTrimmingSpaces].
3936 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
3937 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
3940 * UI/Scheduler/UIxCalDayOverview.m,
3941 UI/Scheduler/UIxCalDayChartview.m,
3942 UI/Scheduler/UIxCalDayListview.m,
3943 UI/Scheduler/UIxCalWeekOverview.m,
3944 UI/Scheduler/UIxCalWeekChartview.m,
3945 UI/Scheduler/UIxCalWeekListview.m,
3946 UI/Scheduler/UIxCalInlineMonthOverview.m,
3947 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
3949 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3951 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3952 -appendPersonalSourcesInContext:context]): release connectoin
3953 channel when everything is done.
3955 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3956 -newAbAction]): new action method to crate a new contact folder
3959 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
3960 that requests the folder manager to create a folder table with the
3961 specified type at the specified path. The type is taken from [self
3964 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3965 -folderType]): implemented.
3967 * SoObjects/Appointments/SOGoAppointmentFolder.m
3968 ([SOGoAppointmentFolder -folderType]): implemented.
3970 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3971 -appendPersonalSourcesInContext:context]): we now fetch all
3972 folders with type "Contact" that belong to the current user.
3973 ([SOGoContactFolders -newFolderWithName:name]): new method to
3974 create a new contact folder.
3976 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
3977 resulting url with [NSString+Utilities hostlessURL] instead of
3978 using NSURL. This is because the url in question sometimes has a
3979 hostname and sometimes not. "hostlessURL" ensure the hostname is
3981 ([UIxComponent -applicationPath]): same as above.
3983 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
3985 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
3986 folders before doing the one on messages.
3988 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3990 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
3991 makeObjectsPerform:withObject:withObject: for GNUstep
3994 * OGoContentStore/GNUmakefile, Protocols/common.make,
3995 SoObjects/common.make, UI/common.make: install in
3996 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
3998 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
4000 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
4003 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4005 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
4006 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
4009 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
4010 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
4011 password would be accepted anyway as long as its length was > 0.
4012 This can be the case ONLY when LDAP is disabled otherwise we have
4013 a serious security issue...
4015 * SoObjects/Appointments/SOGoAppointmentObject.m
4016 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
4017 user is not an organizer nor a participant, he is declared as
4018 "Owner" if he owns the calendar the entry where the entry is
4019 contained. Other cases should not be possible.
4021 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4023 * UI/Contacts/UIxContactEditor.m: display and handle the new
4026 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4027 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
4030 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4031 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
4034 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4036 * SoObjects/Appointments/SOGoCalendarComponent.m
4037 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
4038 returns the value of ud "SOGoAppointmentSendEMailNotifications"
4040 ([SOGoCalendarComponent
4041 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
4043 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4045 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
4046 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
4047 so that the mailbox cache is refreshed everytime the user presses
4048 on "get mail". I doubt a mailbox cache really is useful in general
4051 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4053 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
4054 -userInContext:]): if the lookup is on "freebusy.ifb" and the
4055 username is "anonymous" the user is automatically set to
4058 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4060 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
4061 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
4062 user with password "freebusy".
4064 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
4065 -contentAsString]): the default timerange is now 14 days before
4066 currentday and 1 month after.
4068 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4070 * SoObjects/Appointments/SOGoAppointmentFolder.m
4071 ([SOGoAppointmentFolder
4072 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
4073 escape the record string in a way suitable with XML encoding.
4075 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4077 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
4078 calendar view would not be updated properly.
4080 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4082 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4083 -newStartDate]): fix the handling of the component start date
4084 depending on the "hm" and the "day" parameters.
4086 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4087 -roleOfUser:uidinContext:context]): set role of current user to
4088 "Assistant" if the object that is accessed is "freebusy.ifb".
4090 * SoObjects/Appointments/SOGoAppointmentFolder.m
4091 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
4092 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
4093 ([SOGoAppointmentFolder
4094 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
4095 lookupCalendarFolderForUID: method, which doesn't do security
4098 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4100 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
4101 accessor that returns the comma-separated list of users with role
4103 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
4104 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
4105 "checkedUsers". Instead, each user is either classified in the
4106 list of assistants or the list of delegates.
4108 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4110 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
4111 -composeAction]): method imported from removed container modules.
4112 ([UIxMailMainFrame -mailFolderName]): method imported from removed
4115 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
4116 for wrapping UIxMailView with the "popupview" action.
4118 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
4119 since its the component that displays the same splash screen than
4120 the one in Thunderbird/Icedove.
4122 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
4123 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
4124 UI/MailerUI/UIxMailListViewContainer.[hm],
4125 UI/MailerUI/UIxMailViewContainer.[hm]: removed
4127 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4129 * UI/WebServerResources/HTMLElement.js: replaced the functional
4130 selectNode() and deselectNode() functions with select() and
4131 deselect() methods of HTMLElement.
4133 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
4134 events are initialized from here now instead of in the HTML code.
4136 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4137 -checkRightsAction]): new method similar to the one with the same
4138 name in UIxCalMainView.m.
4140 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
4141 code to handle the publishing of freebusy information.
4143 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4145 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4146 -checkRightsAction]): new action method that returns a
4147 comma-separated list of boolean values matching the right of the
4148 current user to "view" (as a permission) each foreign calendar
4149 stored in his preferences.
4151 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
4152 new method that sets a customOwner, which can be returned with
4153 ownerInContext it set.
4155 * SoObjects/Appointments/SOGoAppointmentFolder.m
4156 ([SOGoAppointmentFolder
4157 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
4159 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4161 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
4162 below, but for the Contacts and Calendar collections.
4164 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
4165 new acl facilities method from sope-gdl/GCSFolder.m.
4167 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
4168 -roleOfUser:uidinContext:context]): new method that returns
4169 SOGoRole_Assistant when the user is an assistant or a delegate on
4170 the "personal" ab object. This is so that setting roles on the
4171 SOGoContactFolders object is not required.
4173 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4175 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
4177 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
4178 to the handling of the user selection for the acls.
4180 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
4181 values from SoPermissions with ones specific to SOGo.
4183 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
4184 handles the storage for the acls.
4186 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
4187 class for SOGoAppointmentObject and SOGoTaskObject.
4189 * UI/Common/UIxAclEditor.[hm]: new component that provides a
4190 general editor for folder acls.
4192 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
4194 ([NSString -davMethodToObjC]): method that returns the method name
4195 for a DAV property implementation.
4197 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
4199 ([NSArray -stringsWithFormat:format]): new method that returns
4200 formatted occurences of the strings stored in the array.
4202 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
4203 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
4204 subclass module of SoWebDAVValue that supports collections of
4205 properties of the same type.
4207 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4209 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
4210 -lookupFolder:ofClassNamed:inContext:]): added the ability to
4211 configure the name of the SOGoDraftFolders with the ud var
4212 "SOGoDraftsFolderName".
4214 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4216 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
4217 -userTimeZone:username]): new method that returns the timezone for
4218 the specified user depending on his preferences and the server
4221 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
4222 -stringForData:partInfo:]): take the encoding into account and
4223 translate the text to "normal" before processing the charset data.
4225 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4227 * UI/WebServerResources/generic.js: the progress indicator is on
4228 when loading the page so we turn it off, and we turn it back on
4229 whenever we switch to another module...
4231 * UI/WebServerResources/SchedulerUI.js: make sure the day view
4232 synchronization mechanism works everywhere.
4234 * UI/WebServerResources/generic.js: the log window is not only
4235 visible when UIxDebugEnabled is set.
4237 * UI/WebServerResources/SchedulerUI.js: the month overview's day
4238 cells are now initialized with the DOM event interface methods
4239 instead of with html attributes.
4241 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
4242 headers (should be made configurable at some point)...
4244 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
4245 "not null" constraint on startdate, enddate, isopaque,
4246 participants and partmails.
4248 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4250 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
4251 -hoursToDisplay]): prevent a crash by retaining the
4252 "hoursToDisplay" array after it's created.
4253 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
4254 clickable hours DIV.
4256 * UI/WebServerResources/SchedulerUI.js: made the event
4257 participation status modification asynchronous, which also fixes a
4258 bug where the window would sometimes close before the accept or
4259 decline action was completed. Also, adapted the event handling
4260 related to the days or weeks view with the new DIV-based layout.
4262 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
4264 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
4265 DIV-based presentation of the days and weeks.
4267 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
4269 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
4270 might return an exception so we have to handle it if we don't
4273 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4275 * UI/WebServerResources/SchedulerUI.js: updated the list
4276 initialization code to use the new event management scheme, adding
4277 what was missing to be able to delete events and tasks again.
4279 * UI/WebServerResources/MailerUI.js: added code to activate the
4280 "Get mails" button. Fixed a bug which prevented messages to be
4283 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
4284 navigation and focus handling of INPUTs.
4286 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4288 * UI/WebServerResources/MailerUI.js: added code to handle the
4289 possible drag and drop events to manager in the mail module.
4290 Moving messages, opening parent folders, ...
4292 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
4293 the drag and drop manager as well as the interface to HTMLElement
4294 to trigger drag and drop events.
4296 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
4297 action to move the current message to the mailbox named after the
4298 value of parameter "tofolder".
4300 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
4301 -moveToFolderNamed:folderNameinContext:]): new method base on
4304 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4306 * UI/WebServerResources/generic.js: added and activated many
4307 "load" handlers to configure generic widgets used across the
4308 modules. More events are now handled in a DOM-fashion way instead
4309 of by setting the relative attributes in the templates.
4311 * UI/Templates/UIxSortableTableHeader.wox: all the events are
4312 declared from the javascript DOM onload handlers.
4314 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
4317 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
4318 declared from the javascript DOM onload handlers.
4320 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
4321 we want everything to be separated from each other, as much as
4324 * UI/WebServerResources/SOGoDragHandles.js: new module containing
4325 the "SOGoDragHandlesInterface", implementing methods that can be
4326 attributed to DIV so that they can be used as drag handles.
4328 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
4329 -asQPSubjectString]): initialize the tmp strings with '0' to make
4330 sure they don't contain garbage.
4332 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4334 * UI/WebServerResources/MailerUI.js: register the messageList
4335 table as a dragging source and the leaf of the navigation tree as
4336 dnd destinations to the DNDManager.
4338 * UI/WebServerResources/generic.js: initialize tabs from the
4339 "unload" event listener that is added programmatically instead of
4340 from the template... Also, added the new DNDManager object.
4342 * UI/WebServerResources/HTMLTableElement.js: added code to
4343 simulate XUL drag n drop events. This code will possibly be moved
4344 to HTMLElement.js instead later...
4346 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4347 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
4350 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4351 -_qualifierForFilter:filter]): only search records which starts
4352 with the specified pattern.
4354 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4356 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
4357 -asQPSubjectString]): new method that returns the special QP
4358 string with its qp declaration for email subjects.
4359 ([SOGoDraftObject -bodyPartForText])
4360 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
4361 double-encode data in UTF-8.
4363 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4364 -newStartDate]): new method to determine the start date depending
4365 on the URL parameters, the current day and the current time.
4366 ([UIxComponentEditor -toolbar]): new method to determine the
4367 filename of the toolbar that should be drawn depending on the
4368 ownership and the list of attendees of the task/event wrt to the
4371 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4372 -setDayStartHour:aStartHour]): adjust the minutes to the next
4373 quarter of hour, if not already set to a quarter.
4375 * UI/WebServerResources/UIxAppointmentEditor.js,
4376 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
4379 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4381 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4382 -loadValuesFromComponent:component]): handles access class
4383 (privacy) and status.
4385 * UI/Contacts/UIxContactsListViewContainer.m
4386 ([UIxContactsListViewContainer -additionalFolders]): return nil if
4387 [self additionalAddressBooks] returns an empty string.
4389 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4391 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
4392 rangesOf7Days]): enhanced and debugged algorithm to feed the array
4393 with slices where the first day is still in the requested month.
4395 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
4398 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
4399 of events in the day boxes of the calendar's monthly view.
4401 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
4402 -davContentType]): declare "text/calendar".
4404 * SoObjects/Appointments/SOGoAppointmentObject.m
4405 ([SOGoAppointmentObject -davContentType]): declare
4408 * SoObjects/Appointments/SOGoAppointmentFolder.m
4409 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
4410 HTTP methods are handled by SOPE and requires nil to be returned,
4411 this method now invokes the new
4412 "requestNamedIsHandledLater:inContext:" method to check that.
4413 ([SOGoAppointmentFolder
4414 -requestNamedIsHandledLater:nameinContext:context]): new methods
4415 that returns "YES" only for the "OPTIONS" http method (for now...).
4416 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
4417 overloaded method to append the "access-control" and
4418 "calendar-access" DAV abilities to the initial declaration.
4420 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
4421 imitate the look of Sunbird/Lightning's monthly view.
4423 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
4424 UIxCalMonthViewOld.[hm].
4426 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4428 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
4429 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
4431 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
4432 returns an image name based on the participation status of the
4435 * UI/WebServerResources/SchedulerUI.js: same strip down as for
4438 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
4439 ([UIxContactsListViewContainer -additionalFolders])
4440 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
4441 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
4442 methods to handle the external addressbooks a user has subscribed
4443 too, by retriving them from his preferences.
4445 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4446 -updateAdditionalAddressBooksAction]): new method that updates the
4447 user settings with the list of addressbook he has subscribed to.
4449 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
4450 module for the address book selector.
4452 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
4453 a toolbar with two buttons ("add" and "remove") to manage the
4454 additional addressbooks a user might subscribe to.
4456 * UI/WebServerResources/ContactsUI.js: added code to handle
4457 "external addressbooks" from the Javascript point-of-view, by
4458 extending existing methods and adding code for the "add ab" and
4459 "remove ab" buttons.
4461 * UI/WebServerResources/generic.js: moved extensions methods to
4462 DOM elements to separate files for better clarity.
4464 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
4465 new method that returns "pageContent" as class, but also "popup"
4466 for the DIV where the page content lies, so that we can manipulate
4467 the content of popup's with CSS identifiers.
4469 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4471 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4472 -displayStyle]): new method that returns a string containing the
4473 css style relative to the current appointment cell. This code is
4474 currently inactive but might be reused later.
4476 * UI/WebServerResources/SchedulerUI.js: added code to handle the
4477 display of the selected day (the day pointed by the mouse, or the
4478 current day when changing the view).
4480 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
4481 -dayCellClasses]): new method that returns a string containing the
4482 css classes applicable to the current cell, depending on the
4483 position of the day in the week, the day of today and the
4486 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
4487 -currentContactAptBorder]): new method that returns the
4488 appropriate border color for the specified user.
4490 * SoObjects/Appointments/SOGoAppointmentObject.m
4491 ([SOGoAppointmentObject
4492 -saveContentString:contentStringbaseVersion:baseVersion]):
4493 overloaded method that parse new events and detects if they have
4494 an organizer or not. If they are new and have no organizer set
4495 (Sunbird/Lightning...), the owner of the event is set as
4498 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
4499 category that provides facility methods and interfaces to the
4502 * SoObjects/Contacts/product.plist: give full access to ANY
4503 authenticated user, not just the owner (to every objects...).
4505 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4507 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
4508 every replica widgets are declared as such to their master
4509 counterpart. Take the days into account when displaying the time
4510 range taken by the appointment.
4512 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
4513 -getICalPersonsFromValue:selectorValue]): method taken from
4514 UIxFreeBusyUserSelector, that is shared both by
4515 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
4517 * SoObjects/Appointments/SOGoAppointmentFolder.m
4518 ([SOGoAppointmentFolder
4519 -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.
4521 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
4522 derived and taken as a subset of UIxFreeBusyUserSelector that
4523 implements the table part of the FreeBusy view. Most of the
4524 methods of UIxFreeBusyUserSelector relative to that table were
4525 moved into UIxFreeBusyUserSelectorTable, which can also be used as
4526 a standalone view for AJAX operations.
4528 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4530 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4531 -vCard]): change reverted.
4533 * UI/Contacts/UIxContactEditor.m: check whether the client contact
4534 folder has selector "globallyUniqueObjectId" before calling that
4537 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4538 -vCard]): the "setVClass" NGVCard method really is "setClass"
4541 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4542 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
4543 request the "streetAddress" instead of the "streetaddress".
4544 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
4545 mails that *contain*, and not just *start with* the search
4548 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4549 -vCard]): mark address returned from LDAP as the work address.
4551 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
4552 span covered with the anchor, not only the textual information
4555 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
4556 argument (event or task) to newEvent in the appointmentListMenu.
4557 Make the appointmentsListView display the appointmentsListMenu.
4559 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
4560 12 to 50 before displaying "...".
4561 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
4562 if its length > 0, whether location itself is nil or not...
4563 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
4564 of which the length > 0.
4566 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4568 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
4569 french and ISO dates.
4571 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
4572 from UIxContactSelector to handle contact lists (current and
4573 additional contacts).
4575 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4576 -_freeBusyAsText]): added handling of an "additional"-named query
4577 parameter that describe the number of additional days after
4578 enddate that should be returned.
4580 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4581 -_responseForResults:results]): give priority to results with
4582 "c_uid" fields. If none returned, use the first contact received.
4584 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4585 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
4586 2 and "CANCELLED" to 0.
4588 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4590 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
4591 of start and end dates to short string dates.
4593 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
4594 -readFreeBusyAction]): new method that returns an array of numbers
4595 corresponding to the state in the freebusy of each "quarter of an
4596 hour" between the "sday" and "eday" date parameters passed in the
4597 url. This permits to handle the display of the freebusy with Ajax
4599 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
4600 since the free busy displays 2 days ahead.
4602 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4603 -contactSearchAction]): new action that returns the uid and the
4604 username + email of the user whose name contain the value of the
4605 "search" url parameter.
4607 * SoObjects/Appointments/SOGoAppointmentFolder.m
4608 ([SOGoAppointmentFolder
4609 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
4610 useful for the computing of the status of the freebusy.
4612 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
4613 -init]): new component that incarnates a user selector for events
4614 inspired by the new one found in Thunderbird Lightning.
4616 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4618 * UI/WebServerResources/generic.js: added code to enable or
4619 disable anchor visually (following our internal algorithm).
4621 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
4622 added new "url" ivar with its classic accessors.
4623 ([UIxComponentEditor -urlButtonClasses]): new method that returns
4624 the class strings for the url button on the appointment/task
4625 editor (depending on the validity of the url).
4627 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
4628 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
4629 the template to match the Lightning's new task/appointment editor.
4631 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
4633 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
4635 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4637 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4638 ([SOGoContactLDAPFolder
4639 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
4641 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
4642 iCalEntityObject instances instead of just iCalEvent's.
4644 * SoObjects/Appointments/SOGoAppointmentFolder.m
4645 ([SOGoAppointmentFolder
4646 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
4648 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
4649 bad way of handling ownership that way.
4651 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4652 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
4653 on "cn", just like Mozilla.
4655 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4657 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
4658 "to" should be retained, otherwise it will be autoreleased and a
4661 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4662 -writeAction]): updated method to fetch the card before initing
4665 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4666 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
4669 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
4670 -iCalStringTemplate]): start and due date are now optional.
4672 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4673 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
4674 appropriate accessors to be settable through the templates.
4676 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
4677 new "isDisabled" ivar with appropriate accessors to be
4678 settable through the templates.
4680 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4681 -availableCalendars]): new method that list the calendars to which
4682 the user has subscribed.
4683 ([UIxComponentEditor -componentOwner]): returns the owner of the
4686 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4687 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
4688 quickentries to null whenever each or all of them are null, by
4689 providing an impossible timestamp from with NSNotFound as value.
4691 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4693 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
4694 that handles the creation of new fields with the new APIs and the
4695 new node structure on the page.
4697 * UI/Scheduler/UIxAppointmentEditor.m,
4698 UI/Scheduler/UIxTaskEditor.m:
4699 refactored to user UIxComponentEditor as parent class.
4701 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
4702 containing the methods common to the UIxTaskEditor and the
4703 UIxAppointmentEditor.
4705 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4707 * SoObjects/Appointments/SOGoAppointmentFolder.m
4708 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
4709 the handling of time-ranges.
4711 * UI/WebServerResources/ContactsUI.js: specify a notification type as
4712 parameters when onConfirmContactSelection in invoked.
4714 * UI/WebServerResources/generic.js: specify a notification type as
4715 parameters when onContactRemove in invoked.
4717 * UI/WebServerResources/SchedulerUI.js: when the user deselects
4718 all calendars, select his entry.
4720 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4722 * UI/WebServerResources/SchedulerUI.js: edit and delete events
4723 with their owner-relative urls. Generate a correct entry in the
4724 css color table when a user is added to the calendars list. Put
4725 the same color next to the user id.
4727 * UI/WebServerResources/generic.js: implemented some new helper
4730 * SoObjects/Appointments/SOGoAppointmentFolder.m
4731 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
4732 entries if their owner is not the current user.
4734 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4735 -displayClasses]): return the correct class for the current event
4736 representation depending on its owner.
4738 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
4739 and associate a color for each user login depending on its
4740 position in the list.
4742 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
4743 -currentRowCSSClass]): return the correct class for the current
4744 row depending on the owner of the event.
4746 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4747 -setColors:colors]): new method to associate a color table with
4748 each user in the list.
4750 * SoObjects/Appointments/SOGoAppointmentFolder.m
4751 ([SOGoAppointmentFolder
4752 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
4754 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
4755 NSObject to associate an instance with a user.
4757 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4759 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
4762 * UI/WebServerResources/ContactsUI.js: added handling of
4763 notification of changes to contact selectors.
4765 * UI/WebServerResources/generic.js: added handling of notification
4766 of changes to contact selectors.
4768 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4769 -updateCalendarsAction]): proxy method to update the user
4770 preference table with the new selected calendar uids.
4772 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
4773 -calendarsContactsAction]): new method.
4775 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
4776 ([UIxContactSelector -setHasCheckBoxes:aBool])
4777 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
4778 permit the drawing of checkboxes instead of card icons.
4780 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
4781 wrap a selector the the "Calendars" tab.
4783 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
4784 new user calendar selector.
4786 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4788 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
4789 may cover hour 0 to hour 23.
4791 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4792 -iCalStringFromQueryParameter:format:]): dates explicitly set to
4795 * UI/WebServerResources/SchedulerUI.js: manage both lists of
4796 objects wrt to the toolbar actions.
4798 * UI/WebServerResources/generic.js: added code to the "String"
4799 class to decode number-encoded char entities.
4801 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4802 -batchDeleteAction]): new method to delete selected entries in the
4805 * SoObjects/Appointments/SOGoAppointmentFolder.m
4806 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
4807 that delete identified entries in batch.
4809 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4810 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
4812 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
4813 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4814 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
4815 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4817 return a UIxJSClose component if everything went fine.
4819 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
4822 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
4823 UIxAppointmentEditor.m.
4825 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
4826 a very light page with javascript code to close a window, by
4827 calling a method on the opener if specified. This component is
4828 designed to work as a response to form postings.
4830 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4832 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
4833 SOGoAppointmentObject adapted for the handling of tasks.
4835 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
4836 extracted from SOGoAppointmentObject.
4838 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4839 -saveUrl]): returns the url needed to POST the new form to.
4840 redirect the user to <aptid>/editAsAppointment instead of /edit,
4841 so that SOGoAppointmentFolder can return the correct object type.
4843 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
4844 -compareAptsAscending:_other]): accept empty start or end dates.
4846 * SoObjects/Appointments/SOGoAppointmentFolder.m
4847 ([SOGoAppointmentFolder
4848 -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.
4849 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
4850 components of type "vtodo" as well as "vevent".
4851 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
4852 url specified ends with AsTask or AsAppointment, returns the
4853 an object of the appropriate class, otherwise deduce it from its
4854 content if the HTTP method is "PUT", otherwise read its type from
4857 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4858 -extractQuickFieldsFromTodo:_task]): extract quick fields from
4861 * UI/Scheduler/UIxCalView.m ([UIxCalView
4862 -fetchCoreAppointmentsInfos]): replacement methods for
4863 fetchCoreInfos but by retrieving object with component "vevent".
4864 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
4867 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
4868 UIxCalAptListView adapted for the handling of tasks.
4870 * UI/Scheduler/UIxTaskProposal.[hm],
4871 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
4872 clones of the UIxAppointment* classes for the handling of tasks.
4874 * UI/WebServerResources/UIxTaskEditor.js: clone of
4875 UIxAppointmentEditor adapted for the handling of tasks.
4877 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
4878 Scroll the daily view to the appropriate hour when an appointment
4879 is selected in the appointments list.
4881 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4883 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4884 -setDayStartHour:aStartHour]): specifies the user timezone on the
4887 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
4890 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
4891 ([NSCalendarDate -driftedDate]): methods made useless by a better
4892 comprehension of the NSTimeZone API...
4894 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4896 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
4897 new methods from the NSCalendarDate methods.
4899 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
4900 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
4902 +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).
4903 ([NSCalendarDate -adjustedDate]): this method returns another
4904 instance set to the correct hour after the original date was set
4905 from a non-GMT timezone. This date can be used for storage.
4906 ([NSCalendarDate -driftedDate]): this method does exactly the
4907 opposite of -adjutedDate, that is, it enables the method
4908 hourOfDay, minuteOfHour etc... to return the values according to
4909 the original date's timezone. This date CANNOT be used for storage.
4911 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
4912 -shortDateString]): new method that will return a "short date
4913 string" (yyyymmdd) from a calendar date object.
4915 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4916 -_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.
4918 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
4919 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
4921 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4923 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
4924 view of the day at the height of hour 8:00.
4926 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
4927 ([UIxCalView -dayEndHour]): returns 24.
4929 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
4930 ([UIxContactFoldersView -newAction]): invoke
4931 _selectActionForApplication: on self with the proper attribute too.
4933 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
4934 we now use the action mechanism in UIxContactsListView to keep the
4935 same view for the contact selectors and the regular contact view.
4937 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
4938 UIxContactsListViewContainerBase.[hm]
4940 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
4942 * UI/WebServerResources/generic.js: generalized emailstring
4943 handling functions. Generalized address book access functions.
4945 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4946 -isPopup]): return YES if the "popup" query parameter is set.
4948 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4949 -defaultAction]): keep the url parameters when redirecting.
4950 ([UIxContactFoldersView -selectForSchedulerAction])
4951 ([UIxContactFoldersView -selectForMailerAction]): new action
4952 methods for the /scheduler-contacts and /mailer-contacts invocations.
4954 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
4955 newly available NSString+URL category.
4957 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
4958 -asURLParameters]): handle dictionary entries which could be
4959 instances of NSArray rather than NSString.
4961 * SoObjects/SOGo/NSString+URL.m ([NSString
4962 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
4963 ([NSString -urlWithoutParameters]): new method that returns the
4964 url without its parameters.
4966 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
4968 * SoObjects/SOGo/NSDictionary+URL.[hm],
4969 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
4971 * UI/WebServerResources/UIxMailEditor.js: add support for
4972 additions of different types (to, cc, bcc) of recipients from the
4975 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
4978 * UI/Contacts/UIxContactsMailerSelection.m,
4979 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
4980 UI/Contacts/UIxContactsSelectionView.m to provide a different set
4981 of widgets depending on the application invoking the contact list.
4983 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4985 * UI/WebServerResources/ContactsUI.js: hide the current contact
4986 whenever the user changes of contact folder.
4988 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
4989 now provided by the template when loading the page.
4991 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4992 -iCalPersonWithUid:uid]): new method taken from removed module
4995 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4997 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
4998 -categoriesAsString]): same as below.
5000 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
5001 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
5003 * SoObjects/Appointments/SOGoAppointmentObject.m
5004 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
5005 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
5008 * SoObjects/Appointments/SOGoAppointmentFolder.m
5009 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
5010 hackish test to detect whether the request concernes VEVENT's or
5011 anything else. Return events only in the former case.
5012 ([SOGoAppointmentFolder
5013 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
5014 c_name quickfield so that the calendar list can identify the
5015 appointments with their complete "filename".
5017 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
5018 groupsOfClass:fromSource: to parse the given vcalendar.
5020 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
5022 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
5024 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
5027 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
5029 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5031 * SoObjects/Appointments/SOGoAppointmentFolder.m
5032 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
5033 sensitive to the CalDAV method names.
5034 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
5035 "calendar-query" CalDAV method name.
5037 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
5038 code coming originally from MailerUI.js.
5040 * UI/WebServerResources/UIxContactEditor.js: imitate the
5041 Thunderbird address book by completing the display name with the
5042 content of the first and last name fields, until the display name
5043 is modified manually.
5045 * UI/WebServerResources/generic.js: added a "trim" method to the
5048 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
5049 -displayName]): new method that returns the display name from "cn"
5050 or from the "displayName" key if found.
5052 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
5053 -initSnapshot]): check if "[card n]" returns anything to avoid a
5056 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
5057 that returns an unparsed doctype definition for the pages.
5059 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
5060 -vCard]): set the card's fn to attribute "displayName" if found
5063 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5065 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
5066 -vCard]): handle the "streetAddress" and "l" fields.
5068 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
5069 header fields by converting the tables to DIVs and SPANs.
5071 * UI/WebServerResources/generic.css: attempted unification of font
5072 families and size across all the elements. changed the
5073 logConsole's "position" from "fixed" to "absolute" to avoid
5076 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5078 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
5079 empty the contact view when the current contact is being deleted.
5081 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
5082 parse the email field and provide the address full name if found
5083 as the "contactFN" parameter.
5085 * UI/WebServerResources/generic.js (openMailTo): do not give a
5086 name to the opened window so that serveral ones can be opened at
5089 * UI/MailPartViewers/UIxMailPartTextViewer.m
5090 ([UIxMailPartTextViewer -flatContentAsString]): override method by
5091 replacing carriage returns with "<br />" in the result string from
5092 super's implementation.
5094 * UI/Contacts/UIxContactView.m ([UIxContactView
5095 -_urlOfType:aType]): don't manage non-mailto urls through
5096 javascript, let the user decide what's best for him.
5098 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
5099 -newAction]): transfer all the query parameters by using the
5100 "asURLParameters"'s result string from [self queryParameters].
5102 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
5103 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
5104 query parameters and put their values (if any) into the snapshot.
5106 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
5107 carriage-returns to "<br />".
5108 ([UIxContactView -workCompany]): explicitly initialize company to
5109 nil if org is nil or empty.
5111 * UI/WebServerResources/UIxContactEditor.js: updated validation
5112 code after we added and renamed some fields.
5114 * UI/WebServerResources/ContactsUI.js: added code to cache contact
5115 cards and to handle card updates.
5117 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5119 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
5120 test the length of the returned string since they will never be
5123 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
5124 return self if the process went successful, returns an exception
5125 otherwise (and only otherwise...).
5127 * OGoContentStore/OCSContactFieldExtractor.m
5128 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
5129 adapted method to the new VCard api. Since the cards are stored in
5130 vcard format, we no longer deal with a dictionary but with a
5133 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5135 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
5136 return a string with a "mailto" url.
5137 ([UIxContactView -_urlOfType:aType]): generic method to return a
5138 url string with a html anchor pointing to it.
5140 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
5141 since subclass "UIxContactEditor" did nothing. Implemented code to
5142 display and modify the values parsed from the vcards, displayed in
5143 a way similar to the Thunderbird addressbook.
5145 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
5146 -save]): new dummy method.
5148 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
5149 -save]): made method void.
5151 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5153 * UI/Contacts/UIxContactView.m: added many wrapper methods to
5154 display blocks of data à la Thunderbird Addressbook. If data is
5155 available, those wrappers (around the NGVCard methods) will
5156 enclose the results in a proper HTML output with the correct label
5157 (if present), otherwise it will return an empty string.
5158 ([UIxContactView -vcardAction]): new action to return the contact
5159 as text/vcard (for exporting).
5161 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
5162 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
5164 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
5165 -vCard]): create a new NGVCard instance when no data is available
5167 ([SOGoContactGCSEntry -save]): save the vCard using the new
5168 "versitString" API method/message.
5170 * UI/Contacts/UIxContactView.h: separated interface from
5173 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
5174 views and display them beneath the list.
5176 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5178 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
5179 the timezone even when it's the server timezone.
5181 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5182 -privateContacts:inContext:]): no long configure the calendar
5183 object with the user's timezone since it's now accessible
5184 application-wide throught the SOGoObject methods.
5186 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
5187 method. Removed the "backendTimeZone" method.
5189 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
5190 instead of SoComponent.
5192 * SoObjects/Appointments/SOGoAppointmentObject.m:
5193 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
5194 [self serverTimeZone] instead of "EST" (which was removed).
5196 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
5197 "timeZone" ivar and its accessors.
5199 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
5200 centralized method returing the timezone configured in the
5201 userdefaults db or "Canada/Eastern" if missing.
5202 ([SOGoObject -userTimeZone]): new centralized method returing the
5203 timezone of the current user or the server timezone if missing
5204 from the user configuration table.
5206 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5208 * UI/WebServerResources/SchedulerUI.js: implemented caching of
5211 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
5212 return a path based on the object's context instead of the first
5213 level in SOGo's object hierarchy...
5215 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5217 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
5220 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
5221 timezone ([self viewTimeZone]) to the WEMonthOverview component to
5222 avoid a confusion with the days.
5224 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
5227 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
5228 imitate Sunbird's synchronization between the 3 visible views.
5230 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
5231 sure the numbers in dateString are formatted so as to take 4 chars
5232 for the year and 2 for the day and the month, otherwise
5233 NSCalendarDate will return a nil date.
5234 ([UIxComponent -applicationPath]): return a path based on the
5235 object's context instead of the second level in SOGo's object
5238 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5240 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
5241 user's timezone abbreviation to the date string passed as parameter to
5242 NSCalendarDate to generate an accurate date instance. Do the same
5243 when no date is specified and today is chosen.
5245 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
5246 form's time values to integers before comparing them.
5248 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
5249 ([UIxCalAptListView -currentEndTime]): initialize the resulting
5250 dates timezone with [self viewTimeZone].
5252 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
5253 "viewTimeZone" ivar destined to hold an instance of the user's
5255 ([UIxComponent -viewTimeZone]): take the timezone from the user's
5258 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5260 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
5261 rearranged the layout.
5263 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
5264 manage showing and hiding appointment details.
5266 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5267 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
5268 timezone by taking the current user's timezone setting.
5270 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
5272 * SoObjects/Appointments/SOGoAppointmentObject.m
5273 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
5274 set default timezone to EST, although this code should be
5275 rewritten to handle a system and a user default value.
5277 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
5278 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
5279 take the values from the hour and minute INPUTs when data is
5280 POSTed since we no longer use the UIxTimeSelector component.
5281 ([UIxTimeDateControl -selectableHours])
5282 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
5283 template SELECTs to display reasonable and acceptable values
5284 instead of all the possibilities.
5286 * UI/WebServerResources/generic.js: adapted code for the new
5287 implementation of the UIxContactSelector component (added a
5288 "remove" button, removed the previous INPUT and replaced them with
5289 links of class "button").
5291 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
5292 UIxTimeDateControl.m.
5294 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
5295 ([UIxCalDayTable -currentAppointmentHour]): new methods that
5296 returns correctly formatted values used as attributes for JS code.
5298 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
5299 -initialContactsAsString]): renamed implementation of
5300 initialParticipants.
5301 ([UIxContactSelector -currentContactId])
5302 ([UIxContactSelector -currentContactName]): new methods used when
5303 listing the initial contacts in the widget. Currently, both return
5304 the person's cn but the latter should ultimately return a user
5307 * UI/Contacts/UIxContactSelector.h: separated interface from
5308 UIxContactSelector.m.
5310 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
5311 all javascript code is now put in Scheduler.js/generic.js.
5313 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
5314 moved into NSCalendarDate+Scheduler instead.
5316 * SoObjects/Appointments/SOGoAppointmentFolder.m
5317 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
5318 configure the timezone from SOGoUserFolder when the instance is
5320 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
5321 the value of the new "timezone" ivar.
5323 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5325 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
5326 the date selector in the first page and the container of the
5327 future calendar selector in the second page.
5329 * UI/WebServerResources/generic.js: added code for handling tabbed
5332 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
5333 returns the bundle name associated to the current running product.
5335 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5337 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
5338 exception by invoking a timeout on the opener rather than invoking
5339 the list refresh method.
5341 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
5344 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
5345 ([UIxCalWeekView -prevWeekQueryParameters])
5346 ([UIxCalWeekView -nextWeekQueryParameters])
5347 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
5348 that return the dates relatively to the current day.
5349 ([UIxCalWeekView -lastWeekName])
5350 ([UIxCalWeekView -currentWeekName])
5351 ([UIxCalWeekView -nextWeekName])
5352 ([UIxCalWeekView -weekAfterNextWeekName])
5353 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
5354 methods that returns the label for the corresponding weeks.
5356 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
5357 used by UIxCalDayView and UIxCalWeekView to display the events
5358 occuring in one or more days.
5360 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5362 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
5363 entries in the new "monthMenu" and "yearMenu".
5365 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
5366 method to return the current day as a string formatted depending
5367 on the current locale.
5369 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
5370 ([UIxCalAptListView -endDate]): "today" is now the default filter
5371 for displayed events.
5372 ([UIxCalAptListView -currentSerialDay]): new method returning the
5373 date of the current enumerated appointment in serial form
5376 * UI/WebServerResources/SchedulerUI.js: added code to select the
5377 relevant day when an appointment is selected. Added code to popup
5378 a month and a year menu whenever the header entries are clicked in
5379 the calendar widget.
5381 * UI/WebServerResources/generic.js: made addClassName and
5382 removeClassName methods of HTMLElement.
5384 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5386 * UI/WebServerResources/MailerUI.js: fixed the contact creation
5387 from email addresses.
5389 * UI/WebServerResources/generic.js: centralized the search-related
5390 functions here since the same code was used across the 3
5393 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
5394 ([UIxCalAptListView -endDate]): return the required dates needed
5395 depending on the value given to the "filterpopup" url parameter.
5397 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
5398 code by invoking UIxComponent's labelForKey:.
5400 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
5401 [self pageResourceManager] instead of [self resourceManager].
5403 * UI/Contacts/UIxContactEditorBase.m: invokes
5404 globallyUniqueObjectId on the clientobject's class instead of the
5405 hardcoded "SOGoFolder".
5407 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
5408 -newAction]): redirect the "new" action to the personal (default)
5411 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
5412 +objectWithName:inContainer:]): new constructor.
5414 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
5415 -lookupContactWithId:recordId]): always create a contact object,
5416 even if it does not exist.
5418 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5420 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
5421 component that lays out the different components of SOGoCalendar.
5422 Only serves as an Objective-C counterpart to its xml template.
5424 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
5427 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
5428 display a widget to handle the information displayed in the
5429 appointments list. Not currently used, lacks implementation.
5431 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
5432 display a calendar as a dynamic widget from where one can select
5433 the current visible day.
5435 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
5436 extracted from UIxCalInlineMonthOverview.m.
5438 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
5439 calendarPageURL methods. The javascript code is handled by .js
5440 files as much as possible...
5442 * UI/WebServerResources/ContactsUI.js,
5443 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
5446 * UI/WebServerResources/SchedulerUI.js: implemented functions to
5447 handle the new widgets. XmlHTTPRequest code taken from
5450 * UI/WebServerResources/generic.js: put some functions related to
5451 element selections as methods to HTMLElement and HTMLTableElement.
5453 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
5454 display the list of appointments (embodies the code-size of
5455 UIxCalAptListView; answers to the "aptlist" method).
5457 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5459 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
5460 -correctURLAction]): new short action method replacing the method
5461 below by taking far less code.
5463 * SoObjects/Appointments/SOGoAppointmentFolder.m
5464 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
5465 with an action in the view-related code.
5467 * UI/Scheduler/UIxAppointmentEditor.m: invoke
5468 "stringByEscapingHTMLString" on the resulting value to avoid
5469 issues with accented characters.
5470 ([-jsCode]): removed method since the javascript code was merged
5471 into SchedulerUI.js.
5473 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5475 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
5476 new class method that returns an iCalPerson based on the UID given
5479 * UI/Contacts/UIxContactsListViewContainerBase.m:
5480 UIxContactsListViewContainer renamed to serve as a base class for
5481 the contact lists in both the contact editor and the contact
5484 * SoObjects/Contacts/SOGoContactLDAPFolder.m
5485 ([SOGoContactLDAPFolder
5486 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
5487 setUserIdentifier:setRootDN:]): an LDAP field specifying the
5488 loginname of the users can now be specified.
5490 * UI/WebServerResources/generic.js: added code to manage contact
5491 lists through the new implementation of the UIxContactSelector.
5493 * UI/Templates: put the templates related to SchedulerUI in its
5496 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
5497 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
5498 entry for "uid" with the field name representing the login name of
5499 the user in the corresponding LDAP branch.
5501 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5503 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
5504 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
5505 request is a PUT, always create an entry, even if we're not sure
5508 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5510 * UI/WebServerResources/ContactsUI.js: implemented live-search.
5512 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
5513 -appendSystemSourcesInContext:context]): populated method with
5514 code that creates entries mapped to instances SOGoContactFolder,
5515 based on the configuration found in the NSUserDefaults under the
5516 key "SOGoLDAPAddressBooks".
5517 ([SOGoContactFolders
5518 -lookupName:nameinContext:contextacquire:acquire]):
5519 "contactsources" do not exist anymore, SOGoContactFolder was split
5520 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
5521 and one protocol: SOGOContactFolder, instead.
5522 ([SOGoContactFolders -contactFolders]): new accessor used by the
5523 views of SOGoContactXXXFolder to list the possible sources.
5525 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
5526 defines the methods that UIxContactsView, ..Editor and so on...
5529 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
5530 defines the methods that UIxContactsListViewBase expects as well
5531 as the data fields returned in the contact lists.
5533 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
5534 returns entries an LDAP server. Conforms to the new
5535 SOGOContactFolder protocol.
5537 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
5538 returns a vCard based on contact entries from an LDAP server.
5539 Conforms to the new SOGOContactObject protocol.
5541 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
5542 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
5543 entry for the textual representation of the vCard.
5545 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
5548 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
5549 "SOGoContactObject".
5551 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
5552 method that generates a textual representation of the vcard.
5554 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
5556 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
5557 "SOGoContactFolder".
5559 * SoObjects/Contacts/SOGoContactSource.h,
5560 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
5563 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
5564 -singleAttributeWithName:key]): new method that returns the first
5565 object associated with an ldap key (where generally one value is
5568 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
5569 map the entry into an NSDictionary for processing by
5570 UIxContactsListViewBase.m with the least possible overhead.
5572 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
5575 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5577 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
5578 -privateContacts:inContext:]): now returns an instance of
5581 * UI/Contacts/UIxContactsListViewContainer.m
5582 ([UIxContactsListViewContainer -contactFolderName]): new method to
5583 return the absolute path to the current contact folder, called
5584 from within the template.
5586 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
5587 JS code to initialize the 'currentContactFolder' generic var.
5589 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
5590 +contactFolderWithSource:inContainer:andName:]): new class
5591 method meant to return an instance connected to the specified
5592 source. Currently useless but won't be anymore in the next few
5595 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
5596 the "lookupFreeBusyObject" method since it does not exist.
5598 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
5599 as a "view" for the SOGoContactFolders object. Does nothing but
5600 redirect the browser to the URL of the personal address book of
5601 the user. It does not even have a template.
5603 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
5604 implementing the SOGoContactSource protocol. Does nothing
5605 currently but will be used to implement access to the personal
5606 address book of the user stored in the SOGo database.
5608 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
5609 protocol defining an API common to all possible types of contact
5612 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
5613 serving as the root of the contact folders available to the
5614 current user. Correctly lists the contact sources in webdav.
5616 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5618 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
5619 -composeAction]): new action method that permits external object
5620 to write a message from the default (primary) account.
5622 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5623 -initSnapshot]): new method with code taken from "defaultAction"
5624 but needed for others.
5625 ([UIxContactEditorBase -writeAction]): new action designed to
5626 compose the correct URL needed to obtain the MailerUI's email
5627 editor with the correct "mailto" parameter.
5629 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
5630 Common so that other modules can use it.
5632 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
5633 easier to manage both ajax and non-ajax requests.
5635 * UI/Contacts/UIxContactsFilterPanel.m: clone of
5636 UIxMailFilterPanel, but applicable to contact lists.
5638 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
5639 -vcardContentFromSOGoContactRecord]): use the new standard methods
5640 created for each type of entry. If a line is determined to not
5641 contain information, it will be skipped.
5643 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
5644 +initialize]): init defaultMailDomain with the user default
5645 "SOGoDefaultMailDomain".
5647 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5649 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5650 -saveAction]): reorganized methods to only have ONE return point.
5651 Invoke saveRecord: directly on the clientObject instead of
5652 saveContentString, which does the same thing anyway.
5654 * SoObjects/Contacts/NSDictionary+Contact.m
5655 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
5656 method to convert the dictionary returned with the user submission
5657 to a record in VCARD format to be stored in the database.
5659 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5661 * UI/WebServerResources/MailerUI.js: when opening the context menu
5662 of the message list, select the message below the mouse cursor and
5663 deselect the other selected messages temporarily. This mimics the
5664 behaviour of Thunderbird for that matter and was already
5665 implemented for the entries of the folder tree.
5667 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
5668 -iconForMenuItem]): new method that returns the fully qualified
5669 relative URL to the icon representing the mailbox, or the default
5670 mailbox icon if needed.
5672 * UI/SOGoUI/UIxComponent.m ([UIxComponent
5673 -urlForResourceFilename:filename]): automatically return an empty
5674 string whenever the filename passed as argument is nil.
5676 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
5677 "desc" parameter set to 1 so that they are sorted in descending
5678 order by default. Also, added "onHeaderClick()", triggered by
5679 clicking on the message list header elements.
5681 * UI/MailerUI/UIxMailSortableTableHeader.m
5682 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
5684 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5685 -isSortedDescending]): defaults to "YES" when the sort order is
5688 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5690 * UI/WebServerResources/MailerUI.js:
5691 - message cache: set the max num of cached messages to 20. Limit
5692 the cached message size to 30000 bytes.
5693 - ajax: when a message request is called while one is already
5694 being performed, the latter will be cancelled. Idem when
5695 retrieving the content of a mailbox.
5696 - folder tree: when a mailbox is selected because of the URL
5697 requested (initMailboxSelection), the dtree is expanded throughout
5698 the mailbox entry's parent hierarchy to ensure it is made visible
5699 when the page is being displayed. (new function: expandUpperTree).
5700 - mailbox loading: when loading a mailbox where a message was
5701 previously selected, we invoke its url with the "pageforuid"
5702 parameter correctly specified. During callback processing, we scan
5703 the table for the related row and reselect it.
5704 Also, the message area is set blank before loading any mailbox.
5706 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5707 -defaultAction]): if the "pageforuid" parameter is passed in the
5708 url, take its value and invoke [self firstMessageOfPageFor:]
5709 consequently to deduce the first message to display. Otherwise,
5710 set it to "idx", otherwise set it to 0.
5711 ([UIxMailListView -firstMessageOfPageFor:]): new method
5712 that determines the first message of the page where the message
5713 passed as parameter is contained.
5715 * UI/WebServerResources/UIxMailListView.js: removed this module,
5716 its code was put in MailerUI.js instead.
5718 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5720 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
5721 which returns the nodes for the parent specified in "parentMenu".
5722 Used to generate the javascript code for the folder dtree.
5724 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
5725 using that container-template are now using UIxMailMainFrame
5726 since UIxMailPanelFrame had no real interest. File removed.
5728 * UI/WebServerResources/dtree.{css,js}: new files to handle
5729 javascript-generated mailbox tree. Modified from original version
5730 by integrating the previous code with the one we are using for
5731 selections and mailbox handling. Minor visual enhancements too...
5733 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5735 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
5736 returned, put it in an NSArray before returning it (fixes
5739 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5741 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
5742 that returns a url string stripped from its "http://hostname"
5745 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
5747 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
5749 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5751 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
5752 -mailDateFormatter]): retrieve the timezone from the user settings
5753 and pass it to the returned dateFormatter. Also, the dateFormatter
5754 is kept in a static variable to avoid useless
5755 creations/destructions.
5757 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
5758 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
5760 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
5761 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
5762 s/Criteria/Text/ to handle the "criteria" form parameter.
5764 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5766 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
5767 to integrate better with the firefox look&feel. Added entries for
5768 the new "menu" DIV class (popup menus).
5770 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
5771 takes any chunk of text as param, detects the user email and the
5772 optional first and last names and return them in a well-formatted
5773 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
5774 namespace conflict. Added "onMenuClick(node, event, menuId)" to
5775 handle popup menus through "onclick" element attributes (node =
5776 this, event = event and menuId = name of the menu DIV id to
5779 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5780 -snapshot]): add an entry for "email" into the snapshot
5781 dictionary if a "contactEmail" URL parameter was detected and if
5782 the entry for "email" is empty.
5784 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
5785 button now invokes the newContact() js function in ContactsUI.js
5786 instead of opening "new" directly. newContact() pops up a window
5787 stripped from its navigation bar.
5789 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
5790 bundle (AddressBook).
5792 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
5793 "menu" and id "addressMenu" have the header email addresses
5794 display it with the new menu code in generic.js.
5796 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
5797 replaced the body tables with a div of class "pageContent"
5798 (standardization across the page templates).
5800 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
5801 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
5802 those are now inherited from UIxPageFrame.
5804 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
5806 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
5807 a "mailto" URL parameter is detected and the "to" array is empty,
5808 initialize "to" with the value of "mailto" before returning it.
5810 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
5811 -composeAction]): rewrote method in a cleaner way and with usage
5812 of the URL extensions to NSString and NSDictionary (see below).
5813 Also, if a "mailto" url parameter is detected, pass it to the
5816 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
5819 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
5820 returns a parameter string to add to a base URL.
5822 * UI/Common/NSString+URL.m ([NSString
5823 -composeURLWithAction:parameters:andHash:useHash]): new method to
5824 compose a complete URL from an object URL with parameters and an
5825 optional '#' character.
5827 * UI/Common/UIxPageFrame.h: separated interface from
5830 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
5832 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
5834 * UI/WebServerResources/generic.js: added code to manage
5835 selections within HTML containers.
5837 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
5838 added method to determine the possible URL for a product-specific
5839 javascript filename of the forme <productname>.js.
5840 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
5841 ([UIxPageFrame -isPopup]): new method to determine whether the
5842 application navigator bar should be displayed (main page) or not
5845 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
5846 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
5847 the user through LDAP.
5849 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5851 * The toolbar code from the MailerUI product was taken, renamed as
5852 "UIxToolBar" and put into UI/Common. Toolbar plists were created
5853 for the Contacts and Scheduler products and put in their respectir
5854 Toolbars/ subdirectories. Finally,
5855 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
5856 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
5857 and an invocation to the UIxToolbar component was put at the top
5858 of UI/Templaces/UIxPageFrame.wox.
5860 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
5861 within the templates whether a separator should be displayed.
5863 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
5864 that returns NO if the toolbar is empty.
5866 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5868 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
5870 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
5871 new toolbar objects.
5873 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
5875 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
5876 linkbanner as a DIV instead of a TABLE.
5878 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
5880 returns 'YES' to request the display of the navigation bar between
5883 2006-06-15 ludovic@inverse.ca
5885 * It's now possible to set the default
5886 domain using for email using the
5887 SOGoDefaultMailDomain preference key.
5889 2006-06-15 ludovic@inverse.ca
5891 * Initial import of SOGo from trunk.