1 2007-11-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4 -toolbar]): rewrote in a way that ensures that each case is
7 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -isEqual:otherUser]): new
10 * UI/Scheduler/UIxTaskEditor.m ([-acceptAction])
11 ([-declineAction]): commented out unused methods.
13 * UI/MailPartViewers/UIxMailPartICalActions.m
14 ([UIxMailPartICalActions -deleteFromCalendarAction]): actually
15 delete the found object.
17 2007-11-18 Ludovic Marcotte <ludovic@inverse.ca>
19 * SoObjects/Mailer/SOGoMailBodyPart.m
20 SoObjects/Mailer/SOGoMailObject.m
21 UI/MailPartViewers/UIxMailPartViewer.m
22 Added support of messages containing non-textual
25 * UI/MailerUI/UIxMailView.m
26 SoObjects/Mailer/SOGoMailObject.m
27 UI/Templates/MailerUI/UIxMailView.wox
28 Added support for the Reply-To header upon
31 2007-11-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
33 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]):
34 invoke saveComponent:.
36 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -hasOrganizer])
37 ([UIxComponentEditor -organizerName]): new template accessor
38 related to displaying the event's organizer.
39 ([-containsConflict:_component]): removed method.
40 ([UIxComponentEditor -takeValuesFromRequest:_rqinContext:_ctx]):
41 set RSVP to "TRUE" on each attendee.
43 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
44 -saveAction]): invoke saveComponent:.
46 * UI/MailPartViewers/UIxMailPartICalViewer.m
47 ([UIxMailPartICalViewer -isLoggedInUserTheOrganizer]): make use of
48 the -userIsOrganizer: category method.
49 ([-isLoggedInUserAnAttendee]): make use of -userIsParticipant:.
50 ([UIxMailPartICalViewer -hasSenderStatusChanged]): new template
51 accessor that determines whether the "Update" button should be
54 * UI/MailPartViewers/UIxMailPartICalActions.m
55 ([UIxMailPartICalActions -deleteFromCalendarAction]): implemented
57 ([UIxMailPartICalActions -updateUserStatusAction]): implemented
60 * UI/Common/UIxPageFrame.m ([UIxPageFrame
61 -setCssFiles:newCSSFiles]): new accessor that enables the
62 sub-templates to specify extra CSS files to load.
64 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
65 -homeFolderInContext:context]): cache the home folder of the user
66 object instead of the current user.
68 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
69 -deleteEntriesWithIds:ids]): invokes the "prepareDelete" optional
70 method if the child object implements it.
72 * SoObjects/SOGo/SOGoContentObject.m ([-setContentString:])
75 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
76 -setBaseDN:newBaseDNIDField:newIDFieldCNField:newCNFieldUIDField:newUIDFieldmailFields:newMailFieldsandBindFields:newBindFields]):
77 take a new "mailFields" parameter defining an array of fields
78 where to look at when searching the user's emails. It defaults to
79 the standard "mail" LDAP field.
81 * SoObjects/Appointments/SOGoAptMailICalReply.[hm]: new
82 SoComponent implementing a template for ITIP replies.
84 * SoObjects/Appointments/iCalPerson+SOGo.m ([iCalPerson
85 -mailAddress]): new method that returns a properly formatted email
86 address for the specified person entry.
87 ([iCalPerson -uid]): new method that tests whether the user is
88 known to the system and if so, returns its user id.
90 * SoObjects/Appointments/iCalPerson+SOGo.[hm]: new category module.
92 * SoObjects/Appointments/iCalEventChanges+SOGo.m
93 ([iCalEventChanges -sequenceShouldBeIncreased]): determine whether
94 the changes involved need a sequence inscrease, based on the
97 * SoObjects/Appointments/iCalEventChanges+SOGo.[hm]: new category
100 * SoObjects/Appointments/iCalEvent+SOGo.m ([iCalEvent
101 -isStillRelevant]): new overriden method determining the relevance
102 of the current event based on its end date.
104 * SoObjects/Appointments/iCalEvent+SOGo.[hm]: new category module.
106 * SoObjects/Appointments/iCalEntityObject+SOGo.m
107 ([iCalEntityObject -attendeeUIDs]): new category methods that
108 returns an array containing the uids of the system-know attendees.
109 ([iCalEntityObject -isStillRelevant]): new template method.
110 ([iCalEntityObject -itipEntryWithMethod:method]): clone the
111 current entry calendar with the specified ITIP method.
112 ([iCalEntityObject -attendeesWithoutUser:user]): returns an array
113 of attendees while making sure the specified user is not listed.
115 * SoObjects/Appointments/SOGoCalendarComponent.m
116 ([SOGoCalendarComponent -calendar:create:secure]): new name for
117 -calendar:. Added a "secure" parameter that specifies whether a
118 stripped calendar instance is needed or not. Also, we no longer
119 cache the content to simplify handling of new data.
120 ([SOGoCalendarComponent -component:create:secure]): same as above.
121 ([SOGoCalendarComponent
122 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
123 test whether the component is "still relevant" before sending an
125 ([SOGoCalendarComponent -sendResponseToOrganizer]): new method for
126 sending ITIP replies.
127 ([SOGoCalendarComponent -getUIDsForICalPerson:iCalPerson]):
128 removed method. Replaced with -[iCalPerson uid] category method.
130 * SoObjects/Appointments/SOGoAppointmentObject.[hm]: rewrote
131 class. No longer override saveContentString:,
132 saveContentString:baseSequence:, .... Implemented the
133 saveComponent: and the prepareDelete methods instead. Those
134 methods are called only from the web methods. This avoids the
135 risks related to email sending and changes propagation.
137 * UI/Common/UIxTabItem.m: removed useless class module.
139 * UI/Common/UIxTabView.[hm]: removed useless class module.
141 * UI/Common/UIxPrintPageFrame.m: removed useless class module.
143 * UI/Common/UIxAppNavView.m: removed useless class module.
145 2007-11-16 Ludovic Marcotte <ludovic@inverse.ca>
147 * SoObjects/Mailer/SOGoMailBaseObject.m
150 * SoObjects/Mailer/SOGoMailBodyPart.m
151 We also grok image/jpeg and return the SOGoMailBodyPart
152 for attachments fetching.
154 * SoObjects/Mailer/SOGoMailObject+Draft.m
155 Prevent a crash in case body decoding failed during
158 * SoObjects/Mailer/SOGoMailObject.m
159 Improved body decoding during a reply to also try
160 latin1 as an encoding.
162 * UI/MailPartViewers/UIxMailRenderingContext.m
163 Greatly improved the display mechanisms for emails.
164 Also properly consider the content disposition for
167 * UI/MailerUI/UIxMailToSelection.m
168 Removed worthless code.
170 * UI/WebServerResources/MailerUI.css
171 CSS fix for table views.
173 2007-11-15 Ludovic Marcotte <ludovic@inverse.ca>
175 * UI/WebServerResources/MailerUI.js
176 We now check for empty selection and warn the
177 user about it when deleting messages
179 * SoObjects/Mailer/SOGoDraftObject.m
180 Correctly check for the presence of a subject
181 before attempting to forward a message from
184 * SoObjects/Mailer/SOGoMailObject+Draft.m
185 We no longer use "[Fwd: ]" but simply "Fwd:"
186 when forwarding email messages.
188 * SoObjects/SOGo/SOGoUser.m
189 Modified the default forwarding format to be
190 inline instead of "attachment".
192 * SoObjects/Mailer/SOGoDraftObject.m
193 We now create and use a NGMimeContentDispositionHeaderField
194 in order to avoid encoding the whole Content-Disposition
195 header in case a non-ASCII char is present!
197 2007-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
199 * SoObjects/SOGo/iCalEntityObject+Utilities.m ([iCalEntityObject
200 -findParticipant:user]): new method based on the one removed from
201 SOGoCalendarComponent below.
203 * SoObjects/SOGo/iCalEntityObject+Utilities.[hm]: new category
204 module for iCalEntityObject.
206 * SoObjects/Appointments/SOGoCalendarComponent.m
207 ([-findParticipant:user]): removed method.
209 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
210 -setContentString:newContent]): new accessor method.
212 -saveContentString:newContentbaseVersion:newBaseVersion]): invoke
213 -[self setContentString:].
215 * UI/MailPartViewers/UIxMailPartICalViewer.m
216 ([UIxMailPartICalViewer -authorativeEvent]): returns the most
218 ([-isLoggedInUserTheOrganizer]): make use of -[SOGoUser
221 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
222 -stringByConvertingCRLNToHTML]): fixed crashes due to overflows in
223 temporary buffer we are handing.
225 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
226 -setComponent:newComponent]): check that newComponent is non-nil
227 before replacing the default values.
228 ([UIxComponentEditor -calendarList]): privacy is already an ivar.
229 We don't need to refetch it.
231 2007-11-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
233 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
234 -fetchMailForReplying:sourceMailtoAll:toAll]): remove the current
235 user from the list of recipients and make sure no other address is
238 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
239 -stringByConvertingCRLNToHTML]): build the returned NSString
240 without the ending \0.
242 2007-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
244 * UI/MailPartViewers/UIxMailPartICalViewer.m
245 ([UIxMailPartICalViewer -acceptLink])
246 ([UIxMailPartICalViewer -declineLink])
247 ([UIxMailPartICalViewer -tentativeLink]): removed useless methods.
249 * UI/MailPartViewers/UIxMailPartICalAction.m
250 ([UIxMailPartICalAction -addToCalendarAction])
251 ([UIxMailPartICalAction -deleteFromCalendarAction]): new stub
254 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
255 -lookupImap4BodyPartKey:]): make use of the new method below.
257 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
258 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): new method
259 that returns an appropriate Class depending on a given mime type.
261 * UI/SOGoUI/UIxComponent.m ([UIxComponent -canCreateOrModify]):
262 new boolean accessor that determines whether someone can create
263 (i.e. modify a new entry) or modify an existing entry.
265 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
266 -lookupName:lookupNameinContext:localContextacquire:acquire]):
267 overriden method to bind looked up keys to So methods but by
268 avoiding a call to toOneRelationshipKeys. This will be the top
269 method of the chain, meant to override SoObject's behaviour.
271 * SoObjects/Contacts/SOGoContactLDAPFolder.m
272 ([SOGoContactLDAPFolder
273 -lookupName:objectNameinContext:lookupContextacquire:acquire]):
274 removed hack to prevent [super lookupName...] to read the entire
275 LDAP directory when looking up a record.
277 2007-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
279 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
280 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
283 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
284 ([UIxMailPartHTMLViewer -_attachmentIds]): the reference was one
285 character too short, which cause the images not to be displayed
286 sometimes and crashes to happen whenever the references on a
287 message were wrong (due to bugs in SOPE).
289 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
290 -hasMessageAttachment]): consider an attachment any content that
291 has a non-nil disposition.
293 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
294 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
295 fixed method to make use of the parameters instead of the useless
296 remains that weren't even initialized.
298 * SoObjects/Appointments/SOGoAppointmentObject.m
299 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
300 don't propagate the event among the attendees if this is not an
302 ([SOGoAppointmentObject -deleteWithBaseSequence:]): same as above.
304 * Main/SOGo.m ([SOGo -authenticatorInContext:context]): make use
305 of the new category method below.
307 * SoObjects/SOGo/WORequest+SOGo.m ([WORequest
308 -handledByDefaultHandler]): new method that returns whether this
309 is an "so" or alike request.
311 * SoObjects/SOGo/WORequest+SOGo.[hm]: new category module.
313 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
314 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
315 write the new folder's name in the folder cache.
317 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
318 -calendars]): same as below.
320 * UI/Contacts/UIxContactsListViewContainer.m
321 ([UIxContactsListViewContainer -currentContactFolderName]):
322 translate the display name if its the default one.
324 * SoObjects/Appointments/SOGoAppointmentFolder.m
325 ([SOGoAppointmentFolder -create]): overriden method that invokes
326 its ancestor and then activate itself within the user settings.
328 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
329 -appendPersonalSources]): when the user is the owner of the
330 current folder, we create the "personal" folder if it doesn't
331 exist by invoking "create".
333 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
334 -primaryFetchProfile]): when no row is returned, we initialize
335 "values" to a new dictionary. This solves a bug where the defaults
336 would not be initialized properly.
338 2007-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
340 * SoObjects/SOGo/SOGoGCSFolder.m ([-compare:otherFolder]): method
341 moved into the SOGoFolder class.
343 * SoObjects/Appointments/SOGoAppointmentObject.m
344 ([SOGoAppointmentObject -saveContentString:_iCalinUIDs:_uids]):
345 simplified method by directly building a similar appointment
346 object with the current folder as container.
348 * SoObjects/Contacts/SOGoContactLDAPFolder.m
349 ([SOGoContactLDAPFolder
350 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
351 take the content of an object returned by
352 lookupName:inContext:acquire: instead of the dictionary passed as
353 parameter since it represents a flattened entry return by
354 lookupContactsWithFilter...
356 * SoObjects/Contacts/SOGoFolder+CardDAV.m: NSObject+CardDAV
357 category renamed to SOGoFolder+CardDAV.
359 * SoObjects/SOGo/SOGoParentFolder.m: no longer a subclass of
360 SOGoObject, but of SOGoFolder instead.
362 * SoObjects/SOGo/SOGoUserFolder.m: no longer a subclass of
363 SOGoGCSFolder, but of SOGoFolder instead.
365 * SoObjects/Appointments/SOGoAppointmentFolder.m
366 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): fixed
367 to take the new SOGoParentFolder class into account. Also, create
368 the personal folder if it doesn't exist.
370 * SoObjects/SOGo/SOGoFolder.[hm]: new class module implementing
371 the parent of all SOGo containers.
373 * SoObjects/SOGo/SOGoGCSFolder.[hm]: SOGoFolder class renamed to
376 2007-11-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
378 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection
379 -getAddressesFromFormValues:_dict]): take NSString and NSArray
380 values. Ignore addresses with a length of 0.
382 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -mailAccounts]): we now
383 fetch the accounts from the user defaults and create default
386 2007-11-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
388 * UI/MailPartViewers/UIxMailPartTextViewer.m
389 ([UIxMailPartTextViewer -flatContentAsString]): re-added
390 conversion of line-break to sequences of HTML "BR", with a fast
393 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
394 -flatContentAsString]): simplified method now that we know
395 -[NSString stringWithData:usingEncodingNamed:] has a more robust
398 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
399 -showToAddress]): the answer is cached.
401 * UI/Common/UIxObjectActions.m ([UIxObjectActions +initialize]):
402 read "SOGoACLsSendEMailNotifications" from the user defaults to
403 determiner whether to send an email when a user is added or
404 removed from an object's acl.
406 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
407 -contentForEditing]): make sure the htmlContent flag is set to NO
408 when we select the textual part. Also we select only the relevant
411 * UI/MailerUI/WOContext+UIxMailer.m ([-mailSubjectFormatter]):
414 * UI/MailerUI/UIxMailView.m ([UIxMailView -messageSubject]): new
415 method replacing -objectTitle, written like the ones below.
417 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
418 -messageSubject]): rewrote method to act the one below.
420 * UI/MailPartViewers/UIxMailPartMessageViewer.m
421 ([UIxMailPartMessageViewer -messageSubject]): new method that
422 returns the decoded mail subject or "Untitled" if the subject is
425 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
426 -decodedSubject]): new method that invoke -decodedSubject from the
427 NSString and NSData class, depending on the identity of the
428 subject obtained from the envelope.
430 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
431 -subjectForReply]): take the value of -[SOGoMail decodedSubject]
432 instead of the subject of the envelope.
433 ([SOGoMailObject -filenameForForward]): same as above.
434 ([SOGoMailObject -subjectForForward]): same as above.
436 * SoObjects/Mailer/NSString+Mail.m ([NSString -decodedSubject]):
437 same as below for NSString.
439 * SoObjects/Mailer/NSData+Mail.m ([NSData -decodedSubject]): new
440 method that decodes the subject of a mail taken as an NSData
441 instance. Handling the exceptions and the badly formatted headers.
443 * UI/MailerUI/UIxSubjectFormatter.[hm]: dropped class module.
445 2007-11-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
447 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
448 -deleteEntriesWithIds:ids]): make sure the objects returned by
449 lookupName:... are not instances of NSException.
451 2007-11-03 Ludovic Marcotte <ludovic@inverse.ca>
453 * UI/Scheduler/UIxAppointmentEditor.m
454 Fixed monthly recurrences support.
456 2007-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
458 * SoObjects/Appointments/SOGoAppointmentObject.m
459 ([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
460 sent when modifying an event, when the event was considered
461 relevant. The same thing is now implemented for event deletion.
463 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
464 -primaryFetchProfile]): make sure that the deserialized "values"
465 is an instance of NSMutableDictionary, otherwise we override it
468 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
469 -contentForReply]): make use of the SOGoMailReply WO page.
471 * SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
472 from SOGoMailForward to handle mail replies instead. Only three
473 methods remaining: date, from and messageBody. The latter is
476 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
477 -fetchMailForForwarding:sourceMail]): fetch attachments for
480 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
481 -hasMessageAttachment]): initialize hasAttachment with "NO" to
482 avoid false positives.
484 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
485 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
486 set title to an empty string where the event/task summary is null.
488 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
489 -setHeaders:newHeaders]): make sure there is a message id in the
490 headers dictionary, if not, generate one.
491 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
492 message id from the existing draft.
493 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
494 message id in the header map.
496 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
497 -deleteFolderAction]): no longer prefix the target folder with
500 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
501 -listMailboxesAction]): base the folder type on the folder
504 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
505 -lookupName:_keyinContext:acquire:_acquire]): compare the full
506 traversal to the potential looked up folder with the special
507 folder names and return an object with the appropriate
508 SOGoMailFolder subclass.
510 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
511 -traversalFromMailAccount]): don't prepend the whole string with
514 * SoObjects/Mailer/SOGoMailAccount.m
515 ([-lookupSentFolder:_keyinContext:_ctx])
516 ([-lookupDraftsFolder:_keyinContext:_ctx])
517 ([-lookupTrashFolder:_keyinContext:_ctx])
518 ([-lookupFiltersFolder:_key:_ctx]): removed methods.
519 ([SOGoMailAccount -inboxFolderNameInContext:])
520 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
521 ([SOGoMailAccount -sentFolderNameInContext:])
522 ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
523 the resulting name with "prefix" since we might return a nested
525 ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
526 names with "/". Sorts the resulting folder list with
527 localizedCaseInsensitiveCompare: instead of
528 caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
529 that were removed, instead, we choose the appropriate class
530 depending on the folder name. And since we are in SOGoMailAccount,
531 we don't have to compute a traversal path to match the key with
534 -folderWithTraversal:traversalandClassName:className]): new method
535 that returns an instance of the specified SOGoMailFolder subclass,
536 based on the traversal path passed as parameter.
537 ([SOGoMailAccount -inboxFolderInContext:_ctx])
538 ([SOGoMailAccount -draftsFolderInContext:_ctx])
539 ([-sentFolderInContext:_ctx])
540 ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
541 -folderWithTraversal:andClassName: method described above.
543 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
544 -primaryFetchProfile]): make use of -[NSPropertyListSerialization
545 propertyListFromData:mutabilityOption:format:errorDescription:] to
546 deserialize the plist. Removed variant for libFoundation since it
547 should support the above.
548 ([AgenorUserDefaults -generateSQLForInsert])
549 ([AgenorUserDefaults -generateSQLForUpdate]): make use of
550 -[NSPropertyListSerialization
551 dataFromPropertyList:format:errorDescription:] to serialize the
552 plist. Removed variant for libFoundation since it should support
553 the above. Escape the backslashes from the resulting string.
555 2007-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
557 * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
558 SOGoMailFolder: SOGoMailSpecialFolder.
560 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
561 -traversalFromMailAccount]): overridden method that returns the
562 initialized mutable string.
563 ([SOGoMailAccount -allFolderPaths]): take the special folder paths
564 with -traversalFromMailAccount and reposition them at the
565 beginning of the list. By creating the special folders during that
566 request, we also make sure that the folder exists thanks to the
567 new initialisation method of the new "SOGoSpecialMailFolder"
569 ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
571 ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
573 ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
574 longer use lookupImap4Folder.
575 ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
578 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
579 -traversalFromMailAccount]): new method that returns the full
580 IMAP4 path to the object.
582 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
583 "superUsernames" after fetching it from the ud.
585 2007-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
587 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
588 -eventsListAction]): substitude the start and end date with their
589 UTC counterpart, taking into account the offset from UTC related
590 to those dates instead of the current one. This renders
591 -[UIxCalMainView -userUTCOffset] obsolete because the computings
592 that occured in javascript are now done server-side.
594 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
595 removed obsolete method.
597 * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
598 method converting html content to plain text.
600 * SoObjects/Mailer/NSString+Mail.[hm]: new category module
601 enhancing NSString with utility methods pertaining to mail handling.
603 * SoObjects/Mailer/SOGoMailObject.m
604 ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
606 -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
607 modified method to be always recursive and to take an array of the
608 accepted mime-types as parameter. The returned array now contains
609 the mime-type as well as the part keys.
611 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
612 -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
613 ([SOGoMailObject -contentForEditing]): rewrote method to take into
614 account the first text/plain part or the first text/html part
615 converted to text/plain with our new -[NSString htmlToText]
618 * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
619 "replyToAll:" with YES as parameter instead of NO.
621 2007-10-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
623 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
624 -davContentType]): ignore any possible parameter taken from the
625 mime-info of the body part.
627 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
628 -lastFirstMessageNumber]): new accessor that returns the first
629 message number of the last series of messages.
630 ([UIxMailListView -fetchKeys]): request the bodystructure for each
632 ([UIxMailListView -hasMessageAttachment]): extract the attachment
633 information from the message bodystructure.
635 2007-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
637 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
638 -GETAction:]): use the "application/octet-stream" mime type for
639 elements of type "application/x-xpinstall" to avoid confusing
642 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
643 ([UIxPreferences -itemMessageCheckText])
644 ([UIxPreferences -userMessageCheck])
645 ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
646 methods for handling the retrieval of new messages automatically.
648 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
649 that returns the interval of time between automatic message
652 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
653 -defaultAction]): now expunges the last folder marked for expunge.
655 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
656 -trashInContext:_ctx]): now marks the container folder for
659 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
660 -markForExpunge]): new method that marks the folder for the next
661 automatic expunge operation in the user settings.
662 ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
663 takes the last folder marked for expunge, expunges it and removes
664 it from the user settings, if it exists.
666 2007-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
668 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
669 -messageSubjectCellStyleClass]): added support for replied,
670 forwarded, forwarded and replied mails.
672 * SoObjects/Mailer/NSData+Mail.m ([NSData
673 -bodyDataFromEncoding:encoding]): new utility method that decodes
674 the NSData instance properly depending on the encoding string
677 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
678 -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
680 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
681 -stringForData:_datapartInfo:_info]): simplified by invoking
682 -bodyDataFromEncoding: from our new NSData category methods.
684 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
685 -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
686 where only the body part of the first of the keys fetched was
687 returned. Also decodes the body parts properly following their
690 * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
691 extends the NSData class with utility methods useful for handling
694 2007-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
696 * SoObjects/SOGo/NSArray+Utilities.m
697 ([NSArray -stringsWithFormat:format]): replace instances of NSNull
700 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
701 -keysWithFormat:keyFormat]): replace instances of NSNull with
704 * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
705 empty, use "c_cn" instead.
707 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
708 ([SOGoMailAccount -draftsFolderInContext:_ctx])
709 ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
710 of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
711 no always be specified from the root instead of sometimes from the
714 2007-10-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
716 * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
717 ([UIxPageFrame -productLocalizableStrings]): invoke the new
718 +[SOGoUser language] method if the user is nil.
720 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
721 that returns any generically-found language.
722 ([SoUser -language]): modified to call the above.
723 ([SOGoUser -language]): modified to call the above if the user
724 language has a null length.
726 * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
727 -davEntityTag]): modified to return the "hash" of the vCard string.
729 * UI/MailerUI/UIxMailActions.m ([UIxMailActions
730 -removeAllLabelsAction]): new method that removes all label flags
731 from the associated message.
732 ([UIxMailActions -addLabel1Action]
733 [UIxMailActions -addLabel2Action]
734 [UIxMailActions -addLabel3Action
735 [UIxMailActions -addLabel4Action]
736 [UIxMailActions -addLabel5Action]): new methods that adds label
737 flags to the associated message.
738 ([UIxMailActions -removeLabel1Action]
739 [UIxMailActions -removeLabel2Action]
740 [UIxMailActions -removeLabel3Action
741 [UIxMailActions -removeLabel4Action]
742 [UIxMailActions -removeLabel5Action]): new methods that removes
743 label flags from the associated message.
745 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
746 new accessor that returns the labels associated with the message.
748 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
749 -allFolderPaths]): new method that returns all the paths of all
750 the subfolders of the folder object.
751 ([SOGoMailFolder -allFolderURLs]): new method replacing
754 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
755 -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
756 role from its parent folder.
758 2007-10-19 Francis Lachapelle <flachapelle@inverse.ca>
760 * SoObjects/SOGo/SOGoUser.m
761 ([SOGoUser -rolesForObject:objectinContext:context]): allow
762 multiple super usernames to be defined. The user default
763 SOGoSuperUsername is renamed SOGoSuperUsernames and must be
766 2007-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
768 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
769 -userInContext:]): override the super method by returning
770 anonymous if the super returns nil.
772 * UI/Common/UIxPageFrame.m ([UIxPageFrame
773 -productLocalizableStrings]): new method that returns the
774 product-specific translation dictionary as a JSON hash.
775 ([UIxPageFrame -commonLocalizableStrings]): same as above but for
776 the "Common" framework.
777 ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
778 the requestor components to require additional Javascript files.
779 This is useful now that all the scripts are loaded at the end of
781 ([UIxPageFrame -additionalJSFiles]): new getter related to the
784 2007-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
786 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
787 implemented new web method.
789 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
790 -copyToFolderNamed:folderNameinContext:]): new method with the
791 code cut/pasted from -moveToFolderNamed:inContext:.
792 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
793 modified to use the code from -copyToFolderNamed:inContext:, which
794 is common between the two actions.
796 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
797 ([SOGoMailAccount -sentFolderNameInContext:])
798 ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
799 the user settings into account.
801 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
802 ([UIxMailFolderActions -setAsSentFolderAction])
803 ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
804 that change the purpose of the active folder to "Sent", "Drafts"
807 * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
808 returns the subject as quoted-printable.
810 * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
811 SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
812 the "aclMethod" method for the subsequent language-dependent
815 * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
816 returns the subject as quoted-printable.
818 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
819 -dealloc]): release item, aptStartDate and aptEndDate.
821 2007-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
823 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
824 -initWithName:newNameinContainer:newContainer]): the owner of a
825 shared folder is set to "nobody" by default.
827 * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
828 that returns whether the object has an owner or not.
830 2007-10-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
832 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
833 the folder even if the current user is not its owner.
835 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
837 * We now send advisory emails when folders
838 are created / deleted.
840 * Fixed the sending of advisory emails upon
841 ACL changes on folders.
843 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
845 * UI/Scheduler/UIxComponentEditor.m
846 Implemented event/task priority support.
848 * SoObjects/Contacts/SOGoContactGCSFolder.m
849 Added CardDAV support.
851 * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
852 Implemented From: based on LDAP results based on
853 the MailFieldNames attribute (an array) specified
854 in every LDAP-based authentication sources.
856 * UI/MailPartViewers/UIxMailPartTextViewer.m and
857 UI/WebServerResources/MailerUI.css
858 We avoid replacing "\r\n" and "\n" with <br /> and
859 rather use CSS capabilities for proper formatting.
860 This is _WAY_ faster on very large mails.
862 2007-10-10 Francis Lachapelle <flachapelle@inverse.ca>
864 * UI/Scheduler/UIxComponentEditor.m
865 ([UIxComponentEditor -componentCalendar]): returns the calendar
866 object of the current event.
868 2007-10-05 Ludovic Marcotte <ludovic@inverse.ca>
870 * UI/WebServerResources/MailerUI.js
871 We check if at least one message is selected
872 before performing a Reply/Reply All/Forward
874 * SoObjects/Appointments/SOGoAppointmentFolder.m
875 and others - implemented support for recurring
876 events (with some known limitations right now,
877 all soon to be fixed).
879 2007-10-04 Francis Lachapelle <flachapelle@inverse.ca>
881 * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
882 the constraint that a username can't start with a digit.
884 2007-10-02 Francis Lachapelle <flachapelle@inverse.ca>
886 * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
887 repository to Inverse's branch.
889 2007-09-28 Francis Lachapelle <flachapelle@inverse.ca>
891 * SoObjects/Mailer/SOGoDraftObject.m
892 ([SOGoDraftObject -isValidAttachmentName:_name]): removed
893 constraint on space in file name.
894 ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
895 now removes from file name all characters preceding a backslash.
896 This happens with IE7 because the complete attachment file path
899 2007-09-25 Francis Lachapelle <flachapelle@inverse.ca>
901 * SoObjects/Appointments/SOGoAptMailNotification.m
902 ([SOGoAptMailNotification -appointmentURL]): set personal as the
903 default calendar where to add the event.
905 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
906 activate the SOGoUIxDefaultModule user defaults.
908 2007-09-21 Francis Lachapelle <flachapelle@inverse.ca>
910 * UI/SOGoUI/UIxComponent.m
911 ([UIxComponent -shortUserNameForDisplay]): returns the string
912 "wrongusernamepassword" when authentication failed.
914 2007-09-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
916 * UI/MailPartViewers/UIxMailPartICalViewer.m
917 ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
918 entry of the Calendars parent folder.
920 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
921 -messageSubject]): new accessor method to work-around a problem
922 within SOPE where a subject could be returned as an NSData.
924 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
925 -appendPersonalSources]): make sure the value of the "c_path4" of
926 the returned rows are not NSNull, otherwise, discard them.
928 2007-09-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
930 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
931 -compare:otherFolder]): new overriden method that compares two
932 contact foldes based on their class and then transfer the control
933 to the super method in SOGoFolder.
935 * SoObjects/Contacts/SOGoContactLDAPFolder.m
936 ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
937 compare two contact folders based on their class and then their
940 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
941 new method for sorting folders. The folders are compared based on
942 their ownership, whether they are a main folder and finally
943 depending on their display name.
945 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
946 -pathArrayToSOGoObject]): do not reorder the paths if the third
947 element is an instance of NSNull.
949 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
950 -subFolders]): returns a sorted array using the "compare:"
953 2007-09-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
955 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
956 -calendars]): also returns the owner of the listed folders.
958 * SoObjects/Appointments/SOGoAppointmentFolder.m
959 ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
961 * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
962 method into UIxFolderActions.
964 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
965 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
966 freebusy info from the "personal" calendar.
968 * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
969 -createFolderAction]): new standardized method for requesting
970 folder creations among gcs-based modules.
972 * UI/Common/UIxParentFolderActions.[hm]: new action class module.
974 * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
975 module, equivalent to the SOGoParentFolder's child
976 SOGoContactFolders, but for calendars.
978 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
979 method that returns translated strings for controller bundles
980 (same as what UIxComponent does for view bundles).
981 ([SOGoObject -pathArrayToSOGoObject]): new method that returns
982 the real path to a subscribed folder (if subscribed).
983 ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
984 ([SOGoObject -globallyUniqueObjectId]): new instance method
985 calling its class equivalent.
987 2007-09-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
989 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
990 whether the user is logged in and if so, redirect to his/her
992 ([SOGoRootPage -appendToResponse:inContext:]): removed useless
995 2007-09-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
997 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
998 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1000 ([SOGoFolder -displayName]): new method.
1001 ([SOGoFolder -delete]): accept to proceed only if nameInContainer
1004 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1005 ([SOGoContactLDAPFolder
1006 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1007 renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
1009 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1010 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1011 removed method, reimplemented in SOGoFolder.
1012 ([SOGoContactGCSFolder -displayName]): removed method,
1013 reimplemented in SOGoFolder.
1014 ([-delete]): removed method, modified in SOGoFolder.
1016 * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
1017 a subclass of SOGoParentFolder.
1019 * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
1020 from SOGoContactFolders and modified to be more content-independent.
1022 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
1023 ([UIxMailActions -markMessageReadAction]): new methods moved from
1024 UIxMailListView and adapted to invoke the client object directly,
1025 since the previous versions had to to a lookup from the parent
1028 * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
1029 method into UIxMailActions.
1030 ([-markMessageReadAction]): same as above.
1031 ([-viewAction]): removed useless method.
1032 ([-javaScriptOK]): removed useless method.
1033 ([-isJavaScriptRequest]): removed useless method.
1034 ([-lookupActiveMessage]): removed useless method.
1036 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1037 -responseWithStatus:status]): new method that returns a WOResponse
1038 initialized with the specified status code.
1039 ([WODirectAction -responseWith204]): new method that invokes the
1040 above one with "204" as parameter.
1041 ([WODirectAction -redirectToLocation:newLocation]): rewrote method
1042 to make use of -responseWithStatus:.
1044 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
1045 method that returns a WOResponse initialized with the 204 status
1048 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
1049 always use a "not deleted" search qualifier along with the user
1050 qualifier (if present).
1052 2007-09-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1054 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1055 -contactSearchAction]): only return the records which have an
1058 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1059 -trashInContext:_ctx]): no longer expunge the mailbox after
1060 marking a message deleted.
1061 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
1064 * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
1065 ([-trashAction]): moved method into UIxMailActions.
1066 ([-moveAction]): moved method into UIxMailActions.
1068 2007-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1070 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1071 ([_UIxHTMLMailContentHandler
1072 -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
1073 comments from the CSS code, do not add the CSS code to the body
1074 content and remove references of body from the CSS declarations.
1075 ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
1076 ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
1077 common with cssContent in a different method and invoke it only
1080 * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
1081 instead of UIxPageFrame.
1083 2007-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1085 * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
1086 ([-appendToResponse:responseinContext:ctx]): commented out.
1087 ([SOGoRootPage -connectURL]): new accessor that returns the full
1088 url the the "connect" method.
1089 ([-connectAction]): rewrote method to return a properly formatted
1090 auth. cookie based on the username and password passed as
1093 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1094 set the value of the cookie to "discard" and set its expiration
1097 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1098 -preprocessCredentialsInContext:context]): consider the user
1099 anonymous if the cookie value is "discard".
1100 ([SOGoWebAuthenticator
1101 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1102 set the expiration date of the cookie to yesterday.
1104 * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
1105 returns the path to the application if the clientObject is not a
1108 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
1109 moved the requirement of authentication from the SOGo application
1112 * SoObjects/Appointments/SOGoAppointmentObject.m
1113 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
1114 check whether the new appointment object is still relevant before
1115 sending a notification.
1117 2007-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1119 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1120 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1121 render the login page through the SoDefaultRenderer.
1123 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
1124 -isPublicInContext:localContext]): new overriden method that
1127 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1128 -currentCalendarLogin]): replace css-unsafe characters with _.
1130 * UI/SOGoUI/UIxComponent.m ([UIxComponent
1131 -shortUserNameForDisplay]): simplified method.
1132 ([-user]): removed method since [context activeUser] is as useful.
1134 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1136 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1137 set the cookie path to "/".
1139 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
1140 authenticator based on the request handler key. "dav" returns the
1141 SOGoDAVAuthenticator, anything else returns the Web authenticator.
1143 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
1144 "SOGoAuthenticator".
1146 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
1147 implementing a subclass of SoCookieAuthenticator, designed for
1148 web-based cookie authentication of users.m
1150 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1151 new method that resets the authentification cookie.
1153 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1155 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
1156 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
1157 didBind to NO to make sure no false authentication is returned if
1158 the bind operation is not executed.
1160 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1162 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
1163 "In-Reply-To" header field when replying.
1165 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
1166 table field names that are queried.
1168 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1169 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
1170 add the "c_" prefix to the quick table field names that are
1173 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1175 * SoObjects/Appointments/SOGoAppointmentFolder.m
1176 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
1177 "personal" to the ocs path of the appointment folder.
1179 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1180 -flatContentAsString]): use latin1 when the encoding is not
1181 specified, and to reencode data chunk which were not correctly
1182 decoded with the original charset.
1184 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
1185 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
1186 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
1187 ([SOGoAppointmentFolder
1188 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
1189 override those methods to use the "personal" additional directory.
1191 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
1192 append "/personal" to the calendar path to simulate a single
1193 calendar in a choice of many.
1195 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1196 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
1197 methods back here. Moved the folder existence check here, and do
1198 it on self only when the lookup happens for a non-folder object.
1199 This permits to accept entries for folders with parents who
1202 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1204 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1205 -shouldTakeValuesFromRequest:requestinContext:context]): same as
1208 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1209 -shouldTakeValuesFromRequest:requestinContext:context]):
1210 redesigned method since any method called can be received from a
1211 POST or a GET. Instead we check the method call itself and we
1212 accept only if it has the "save" prefix.
1214 * SoObjects/Appointments/SOGoAptMailNotification.m
1215 ([SOGoAptMailNotification -getSubject]): returns the subject an a
1216 quoted-printable encoded string, if needed.
1218 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1219 -asQPSubjectString:encoding]): moved method into
1220 NSString+Utilities.m.
1222 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1224 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1225 -messageForwardingList])
1226 ([UIxPreferences -itemMessageForwardingText])D
1227 ([UIxPreferences -userMessageForwarding])
1228 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
1229 new template methods for manage the user preference regarding
1232 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
1233 algorithm to return, in order, the user's defined language or the
1234 first browser language or, finally, the default language.
1235 ([SOGoUser -messageForwarding]): new method that returns the user
1236 preference for message forwarding: "inline" or "attached",
1237 defaulting to "attached".
1239 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1240 -contentForInlineForward]): new method that returns the content of
1241 the message for inline forwarding based on the SOGoMailForward
1244 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1245 -fetchMailForForwarding:sourceMail]): check the user preference
1246 for message forwarding and compose inline forwarded messages if required.
1248 * SoObjects/Appointments/SOGoCalendarComponent.m
1249 ([SOGoCalendarComponent
1250 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1251 now use a template based on the language returned from the
1254 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
1255 a subclass of SOGoMailForward for English locale.
1257 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
1258 a subclass of SOGoMailForward for French locale.
1260 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
1261 helps build template for inline forwarded messages.
1263 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1265 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
1266 to handle "<var:if-ie>" template tags.
1268 * UI/SOGoElements: new extension bundle containing sogo-specific
1271 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1272 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
1273 selected in the dialog.
1274 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
1275 first category, if ever, of the calendar entity.
1277 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1278 -composeAction]): restored method since it is needed by the
1281 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1282 -composeAction]): the address fields should be arrays and not
1285 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
1286 that returns the build date of SOGo in the template.
1288 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1290 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1291 -_flattenedRecords:records]): when the c_cn field is empty,
1292 returns set a formatted string with the concatenation of
1293 c_givenname and c_sn as the displayName.
1295 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1296 -isValidMailAccountName:_key]): prevent unknown accounts from
1299 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1300 -pathToAttachmentObject]): we no longer need the filename
1301 extension for SoLookup...
1303 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1304 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
1305 filename to have an extension, and thus accept any filename.
1307 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1308 -currentCName]): new method that returns the c_name of the
1309 contact, correctly escaped to be passed by url afterwards.
1311 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1312 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
1313 instance of [self decodedFlatContent] instead of the buggy
1314 NSString from [super flatContentAsString] to the parser.
1316 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1318 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
1319 new category method to reponds to the "delete" web command on
1321 ([UIxMailActions -deleteAttachmentAction]): new category method to
1322 reponds to the "deleteAttachment" web command on drafts, taking
1323 the "filename" url parameter into account.
1325 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1326 -contentForEditing]): new method that retrieve the editable mail
1328 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
1329 returns the body keys for attached files (parts with a "filename"
1332 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1333 -asQPSubjectString:encoding]): do not change the string if the
1334 encoded string has the same length (which means it is already
1336 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
1337 that retrieve a draft along with its attachments for editing.
1338 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
1339 choke if the "to" header field is empty.
1340 ([SOGoDraftObject -delete]): new method to delete the draft folder
1341 whenever operations are done.
1343 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1345 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
1346 useless stub method, of which the intention was implemented in
1348 ([-lookupSentFolderUsingAccount]): removed obsolete method.
1349 ([-selectedMailIdentity]): removed obsolete method.
1350 ([-lookupSentFolderUsingFrom]): removed obsolete method.
1351 ([-storeMailInSentFolder:_path]): removed obsolete method, of
1352 which the mechanism has been put in -[SOGoDraftObject sendMail]
1354 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
1355 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
1356 adapted algorithms to the new SOGoDraftObject methods.
1357 ([-deleteAction]): removed method since local draft objects cannot
1358 be removed by the user.
1360 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1361 -expungeAction]): new method replacing the one previously found in
1363 ([UIxMailFolderActions -createFolderAction])
1364 ([UIxMailFolderActions -renameFolderAction])
1365 ([UIxMailFolderActions -deleteFolderAction])
1366 ([UIxMailFolderActions -emptyTrashAction])
1367 ([UIxMailFolderActions -subscribeAction])
1368 ([UIxMailFolderActions -unsubscribeAction]): error situations
1369 should have http return code 500 instead of 403.
1371 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1372 -composeAction]): new method replacing the one previously in
1375 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1376 -imap4URLString]): removed overriden method (see below).
1378 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
1379 cache the mailbox acl.
1380 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
1381 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
1383 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
1384 the new method of determining the users mail accounts.
1386 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
1387 longer adds a "/" at the end of the string (the default for
1388 folders), therefore this will be overriden in SOGoMailFolder
1389 rather than in SOGoMailObject.
1391 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
1392 method, moved into the new UIxMailActions module class.
1394 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
1395 -newDraft]): new method that returns a new SOGoDraftObject
1396 instance with a unique filename based on the current timestamp and
1397 the "newDraft" prefix.
1399 -lookupName:nameinContext:localContextacquire:acquire]): overriden
1400 method by detecting local drafts with their "newDraft" prefix.
1401 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
1403 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
1404 from scratch by making it a subclass of SOGoMailFolder.
1406 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
1409 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
1412 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
1415 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
1416 new method, initializing the new ivars: IMAP4ID, headers, text,
1417 sourceURL and sourceFlag.
1418 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
1419 ([-_ensureUserSpoolFolderPath])
1420 ([-saveMimeMessageToTemporaryFileWithHeaders:])
1421 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
1422 ([-deleteTemporaryMessageFile:], [-delete], [-content])
1423 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
1424 ([-uid], [-flags], [-size], [-envelope]): removed methods.
1425 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
1427 ([SOGoDraftObject -setSourceURL:newSourceURL])
1428 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
1429 methods to store the url of the original message between accesses
1430 so that, depending on the action taken (forward or reply), the
1431 correct flag can be given.
1432 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
1433 the imap4 id that is returned for the message whenever it is saved
1434 into the drafts folder.
1435 ([SOGoDraftObject -save]): new method that takes in charge the
1436 saving of the message in the IMAP drafts folder.
1437 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
1438 new method that fills the original data of the new message with
1439 the reply content of the original message.
1440 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
1441 above for message forwarding.
1442 ([-spoolFileManager]): removed useless method (only returned the
1443 default filemanager...)
1444 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
1445 the resulting message as an NSData chunk.
1447 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
1448 containing a rewrite of the mail action methods found in
1449 UI/Mailer/, that needed to be put in the SOGoMailObject class.
1450 ([SOGoMailObject -subjectForReply]): new method that returns a
1451 subject suitable for replies.
1452 ([SOGoMailObject -contentForReply]): new method that returns the
1453 textual content of an email, quoted for replying.
1454 ([SOGoMailObject -filenameForForward]): new method that returns
1455 the name of the filename that should contain the forwarded
1456 message, based on its subject.
1457 ([SOGoMailObject -subjectForForward]): explicit.
1459 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1461 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1462 -mailAccounts]): rewrote method to return the name of the mail
1463 accounts now available with the -[SOGoUser mailAccounts] method.
1464 ([UIxMailMainFrame -showLinkBanner]): removed method.
1465 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
1466 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
1467 ([UIxMailMainFrame -rootURL]): removed method.
1468 ([UIxMailMainFrame -userRootURL]): removed method.
1469 ([UIxMailMainFrame -calendarRootURL]): removed method.
1470 ([UIxMailMainFrame -contactsRootURL]): removed method.
1471 ([UIxMailMainFrame -hasErrorText])
1472 ([UIxMailMainFrame -errorText])
1473 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
1474 ([-composeAction]): removed method. Now provided by
1475 UIxMailAccountActions.
1476 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
1477 ([UIxMailMainFrame -hideFolderTree]): removed method.
1478 ([UIxMailMainFrame -treeRootClassName]): removed method.
1479 ([UIxMailMainFrame +initialize]): removed method.
1480 SOGoMailTreeRootClass userdefaults will no longer have any effect.
1482 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1483 -redirectToLocation:newLocation]): new method that implements the
1484 same functionality as WOComponent.
1486 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
1488 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
1489 method that returns whether the current mail is store in the
1490 drafts folder hierarchy.
1492 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
1493 ([-primaryEmail]): removed method.
1494 ([SOGoUser -primaryIMAP4AccountString]): removed method.
1495 ([SOGoUser -mailAccounts]): new method that returns an array
1496 containing description dictionaries for all the user mail
1497 accounts. Each account also contain the user's identities for that
1499 ([SOGoUser -allIdentities]): new utility method that returns all
1500 the user identities on all accounts.
1501 ([SOGoUser -primaryIdentity]): new method return the first
1502 identity of the first account.
1504 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
1506 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1507 -isInDraftsFolder]): returns NO.
1508 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
1510 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
1512 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1513 -isInDraftsFolder]): new method that detects if self is contained
1514 by the drafts folder by calling itself on the container object.
1516 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
1518 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
1519 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
1520 return the name of the mail accounts now available with the
1521 -[SOGoUser mailAccounts] method.
1523 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
1526 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
1529 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1530 -keysWithFormat:format]): method that forward the method of the
1531 same name to each member of the array, considering they all are
1532 instances of NSDictionary.
1533 ([NSArray -objectsForKey:key]): same principle as above.
1534 ([NSArray -flattenedArray]): new method that transforms an array
1535 of arrays into a single array containing all the elements of the
1538 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1539 -keysWithFormat:keyFormat]): new method inspired by the python
1540 string formatting system and which replaces occurences of "%{key}"
1541 by the corresponding keys.
1543 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1545 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
1546 sql script before the generic one when initializing mandatory
1549 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1551 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1552 -pureEMailAddress]): new utility method inspired by the
1553 "_rawSender" private method in SOGoDraftObject, which it now
1556 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
1557 provides a common API for sending emails, no matter what the
1560 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1562 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1563 -quotasAction]): invoke "relativeImap4Name" instead of
1564 "nameInContainer" since the latter also returns the "folder"
1567 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1568 -listMailboxesAction]): declare the output as text/plain in UTF-8.
1570 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1571 -deleteFolderAction]): fixed the url of the destination folder.
1573 * Main/SOGo.m ([SOGo +initialize]): show the build date and
1574 hostname at startup.
1576 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1578 * SoObjects/Appointments/SOGoCalendarComponent.m
1579 ([SOGoCalendarComponent
1580 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1581 set the mail date to the current date string returned by our
1582 rfc822DateString extension method.
1584 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1585 -_gcsFoldersFromFolder:): ignore the personal folders who are
1586 returned but don't really exist.
1588 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
1590 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
1591 has to return only one element.
1593 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1595 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1596 -content]): new method returning the decoded content of the
1597 corresponding attachment as an NSData instance.
1598 ([UIxMailPartViewer -filename]): if the "filename" parameter of
1599 the metadata parameterList is empty, try to find out the filename
1600 from the "disposition" metadata returned with the BODYSTRUCTURE
1603 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1604 -composeAction]): prefix the INBOX folder with "folder".
1606 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
1607 -relativeImap4Name]): return nameInContainer stripped from its
1608 first 6 characters since all folder names are prefixed with
1611 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1612 -imap4URLString]): invoke -relativeImap4Name instead of
1613 "nameInContainer" since the former will return the fixed IMAP4
1614 foldername and the latter the SoObject name.
1616 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1617 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
1619 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
1620 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1621 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
1622 ([SOGoMailAccount -sentFolderNameInContext:])
1623 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
1624 names with "folder".
1625 ([SOGoMailAccount -inboxFolderInContext:_ctx])
1626 ([SOGoMailAccount -sentFolderInContext:_ctx])
1627 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
1628 the folder names with "folder" since they are prefixed earlier.
1630 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1632 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1633 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
1634 all starts with "folder".
1636 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
1637 longer declare security info from here.
1639 * SoObjects/Mailer/SOGoMailFolder.m
1640 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
1641 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
1642 folder names now always start with "folder".
1644 * SoObjects/Mailer/SOGoMailAccount.m
1645 ([-lookupName:inContext:acquire:]): folder names now always start
1648 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1650 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
1651 -forwardAction]): adapted to the new saveAttachment:withMetadata:
1654 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
1655 code to save the attached filenames with the filename returned by
1656 the web server as well as their mime types.
1658 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
1659 ([UIxMailPartMessageViewer -toAddresses])
1660 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
1661 the corresponding fields separated with a ", " (if needed).
1663 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1664 -saveAttachment:_attachwithMetadata:metadata]): new method
1665 replacing -saveAttachment:withName: and which takes a dictionary
1666 as parameter with the filename and the mime type of the
1668 The mimetype is then saved in a hidden text file.
1669 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
1670 take the mime type from the hidden text file related to the
1673 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
1674 ([SOGoContactGCSFolder
1675 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1676 return records if the db records are > 0 and not just > 1...
1678 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1680 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
1682 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
1684 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1685 ([SOGoContactLDAPFolder
1686 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1687 translate the returned records to a normalized form.
1689 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1690 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1691 translate the returned records to a normalized form.
1693 * UI/Scheduler/UIxCalListingActions.m,
1694 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
1695 SoObjects/SOGo/AgenorUserDefaults.m,
1696 SoObjects/Contacts/SOGoContactGCSFolder.m,
1697 SoObjects/Appointments/SOGoAppointmentFolder.m,
1698 OGoContentStore/OCSiCalFieldExtractor.m,
1699 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
1700 table fields with "c_".
1702 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1704 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
1705 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
1706 the application settings. If set, both limit will influence the
1707 maximum size of the resultsets and the time taken to solve them.
1708 ([LDAPSource -_initLDAPConnection]): initialize the limits.
1710 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1712 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
1713 method that declares the DAV namespace related to CardDAV.
1714 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
1715 method that declares the "access-control" and "addressbook-access"
1716 classes to the list.
1718 * SoObjects/Appointments/SOGoAppointmentFolder.m
1719 ([-lookupActionForCalDAVMethod:]): removed method.
1720 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
1721 method that declares the DAV namespace related to CalDAV.
1723 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
1724 optional method for subclasses which handle specific extensions to
1725 the DAV protocol: CardDAV or CalDAV.
1727 -lookupName:lookupNameinContext:localContextacquire:acquire]):
1728 new overriden method that handles dav invocations for extensions
1729 to DAV by returning an appropriate SoSelectorInvocation.
1731 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1732 -asDavInvocation]): new method returning a dictionary with a "ns"
1733 key representing the dav namespace and a "method" key representing
1734 the dav method name of the request.
1736 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1737 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
1739 ([UIxPreferences -shouldDisplayPasswordChange]): new template
1740 method that returns the value of SOGoUIxUserCanChangePassword.
1742 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1743 scan the value of SOGoUIxDefaultModule. If not set, the default
1744 module defaults to "Calendar".
1745 ([SOGoUserHomePage -defaultAction]): redirect the user to the
1746 value of "SOGoUIxDefaultModule".
1748 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1750 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1751 -contactInfos]): cache the results to avoid multiple invocations.
1753 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1754 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
1755 really should return something or if we fake to return nil...
1757 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1759 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
1760 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
1761 default is set to "bypass".
1763 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1764 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
1765 when authMethod is set to "bypass" from now on. This would avoid a
1766 security concern with a default installation of SOGo.
1767 AuthentificationMethod is now prefixed with "SOGo" for better
1770 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1772 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1773 -quotasAction]): new method that returns a json representation of
1776 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1778 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1779 -imap4URL]): rewrote method to support accented mailbox names.
1780 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
1781 SOGoAuthenticator's passwordInContext:.
1783 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1784 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
1785 start and due dates to nil if hasStartDate and hasDueDate are
1788 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1789 -passwordInContext:context]): made method public.
1791 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1792 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
1793 to false to avoid a null violation.
1795 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1797 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1798 -contentAsString]): returns the message encoded in ISO Latin 1
1801 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
1802 SOGoSuperUsername user defaults.
1803 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
1805 ([SOGoUser -rolesForObject:objectinContext:context]): if the
1806 current user is the superuser, grant him/her the "owner" role.
1808 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1809 the folder only if the current user is the owner of the future
1812 * SoObjects/Appointments/SOGoCalendarComponent.m
1813 ([SOGoCalendarComponent -contentAsString]): we return the content
1814 based on the permissions returned by the security manager instead
1815 of by looking at the user roles.
1817 * SoObjects/Appointments/SOGoAppointmentFolder.m
1818 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
1819 folders of the user to whom this folder belongs instead of the
1820 active user. This way, a delegate user will be able to have the
1821 same view that the original user has if he connects from his user
1824 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
1825 user exists before creating the SOGoUserFolder instance. If not,
1828 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
1829 return the message source code in plain text.
1831 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1832 -contentAsString]): returns the message encoded in UTF8.
1834 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1836 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
1837 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
1838 leading tagname into account when serializing the element values.
1840 * Main/SOGoProductLoader.m: only load bundle directories ending
1841 with the "SOGo" extension.
1843 * Main/SOGo.m ([SOGo
1844 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
1845 result set if the query has caused no exception. Otherwise we get
1846 an "evaluation is in progress exception".
1848 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1850 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1851 -generateSQLForInsert]): initialize error to nil before the
1852 serialization. Otherwise the method can get confused if it ever is
1853 initialized to something else.
1855 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
1856 -folderIsMandatory]): returns NO unconditionnally.
1858 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1859 -appendPersonalSources]): add the "personal" folder to the list of
1860 user folders even if it doesn't exist, so that it is created when
1861 the user accesses it.
1863 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1864 -folderIsMandatory]): returns YES if nameInContainer is set to
1865 "personal", which is the default address book.
1867 * SoObjects/Appointments/SOGoAppointmentFolder.m
1868 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
1869 users must have one Calendar folder (one and only one).
1870 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
1871 escaping '\' so make the carriage return a real one. This way,
1872 PgSQL 8 won't complain about escaping the string.
1874 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
1875 method that create the folder if considered mandatory.
1876 ([SOGoFolder -folderIsMandatory]): new method that determines
1877 whether the folder should be created automatically or not. To be
1878 overriden by subclasses.
1880 * Main/SOGo.m ([SOGo -run]): override method and create the
1881 missing system tables if needed.
1883 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1885 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
1886 -mailDateFormatter]): returns the user's date formatter.
1888 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
1889 applies the user timezone to the date object before returning it.
1891 * UI/Common/UIxSortButton.m: removed useless class module.
1893 * UI/Common/UIxSortableTableHeader.m: removed useless class
1896 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1897 -contactInfos]): use the "asc" url parameter instead of "desc" to
1898 determine the ordering.
1899 ([-sortOrdering]): removed method.
1900 ([UIxContactsListView -init]): removed the "searchText" ivar.
1901 (general): the template no longer use the UIxSortableTableHeader
1904 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1905 -defaultSortKey]): default sort following the messages arrival
1906 instead of their date.
1907 ([-isSortedDescending]): removed method.
1908 ([-imap4SortOrdering]): use the "asc" url parameter instead of
1909 "desc" to determine the ordering.
1910 (general): the template no longer use the UIxSortableTableHeader
1913 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1915 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
1917 ([-setQualifier:_msg], [-qualifier]): removed methods.
1918 ([UIxMailListView -defaultAction]): added code to handle the
1919 search criteria and value passed as url parameters. Also, we now
1920 handle the same search criterias as Thunderbird/Icedove.
1922 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1924 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
1925 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
1926 the string instead of the string itself.
1927 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
1929 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
1930 bool var "acceptAnyUser" that is set when the AuthenticationMethod
1931 user default is nil.
1932 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
1933 unconditionnally returns an instance whenever acceptAnyUser is set.
1935 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1937 * Main/sogod.m (main): prevent SOGo from running as root.
1939 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1941 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
1942 -setCurrentPassword:newPassword]): new stub method.
1943 ([SOGoUser -dateFormatterInContext:context]): new method that
1944 returns an instance of SOGoDateFormatter configured based on the
1947 * UI/Common/UIxPageFrame.m ([UIxPageFrame
1948 -relativePreferencesPath]): new method.
1950 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
1951 removed useless method.
1953 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
1954 different configurable formats (long and short date + time).
1956 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
1958 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1959 -isInternetRequest]): removed method.
1961 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1962 -jsonRepresentation]): new method with an explicit name.
1964 * UI/PreferencesUI/product.plist: new bundle that provides a web
1965 ui for handling user defaults.
1967 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
1969 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
1971 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
1973 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1975 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
1977 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1979 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
1980 -compareEventsAscending:otherEvent]): no longer use compare: on
1981 the time objects since one of them could be an NSNull, which
1982 crashes when comparing with anything.
1984 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1985 -eventsListAction]): sort events from here.
1986 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
1988 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
1989 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
1991 * SoObjects/Appointments/SOGoAppointmentFolder.m
1992 ([SOGoAppointmentFolder
1993 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
1994 no longer sort elements from here.
1996 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1998 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1999 -aclsForUser:uid]): implemented method by forwarding the request
2000 to the container. This fixes a bug where users could no longer
2001 read emails from shared folders.
2003 * SoObjects/Appointments/SOGoCalendarComponent.m
2004 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
2005 here, but rather in its parent class.
2007 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
2008 -stringForSecondsSinceThe70s:seconds]): new utility method.
2010 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2011 -eventsListAction]): no longer reduce the end day of one day for
2012 all day events since everything has been fixed in
2013 OCSiCalFieldExtractor.
2015 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2016 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
2017 the end date of all day events of 1 so that they stay on their
2020 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2022 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
2024 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
2026 ([-fetchCoreTasksInfos]): removed method.
2028 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2029 -init]): initialize an instance of SOGoDateFormatter.
2030 ([UIxCalListingActions -eventsListAction]): the display start and
2031 end dates are added to the listing for each event.
2033 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
2035 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2036 -isAllDay]): returns YES if the "hm" url parameter is set to
2038 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
2039 is displayed one day earlier.
2041 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2043 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2044 -_setupContext]): take the range of dates specified by the popup
2047 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
2048 WODirectAction that returns WOResponse objects with the events or
2049 todos satisfying the parameters passed in the url.
2051 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2052 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
2053 "isAllDay" into account and compute the amount of days to pass to
2056 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
2058 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
2059 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
2060 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
2061 new method that returns a json-formatted array of the visible tasks
2062 for the current user.
2064 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2066 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
2067 object must be present in the list of UIDs we delete the object
2068 from. Otherwise Calendar objects having no organizer and no
2069 attendees will remain in their owner's Calendar.
2071 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2072 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
2073 first 3 elements of the path array if the url returned by
2074 baseURLInContext: returns a hostname.
2076 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2077 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
2078 nil, in which case a crash happens when calling hasPrefix:.
2079 ([SOGoMailFolder -_sharesACLs]): same as above.
2080 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
2081 otherUsersFolderName is nil, we return nil.
2082 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
2083 nil from [self otherUsersPathToFolder], we return nil too.
2085 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2087 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2088 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
2089 the result of [self baseURLInContext:] to avoid a double escaping
2090 in the resulting string.
2092 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
2093 the user has the "ObjectReader" role on the parent container, then
2094 he is granted the "ObjectViewer" role on this object. Same for
2095 "ObjectEraser", although this might change later.
2097 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2098 -toolbar]): determine the toolbar filename based on the
2099 permissions declared by the securitymanager. The role mechanism
2100 has been adjusted on a lowerlevel so we can simplify the code.
2102 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2103 -initWithName:newNameinContainer:newContainer]): read the content
2104 directly from here. That way we can determine whether the object
2106 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
2107 the ObjectCreator role is enabled, we also grant the ObjectEditor
2108 role to the current user.
2110 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
2111 changed the method paradigm to only return HTTP code 204. Not test
2112 is done whatsoever since the security manager does it for us.
2114 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
2115 removed method because the same exists in UIxFolderActions.m
2117 * UI/Contacts/UIxContactsUserRightsEditor.m
2118 ([UIxContactsUserRightsEditor
2119 -setUserCanReadObjects:userCanReadObjects]): new method.
2121 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
2122 "FolderEraser" and special permission "Access Object". Removed
2123 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
2124 can be used instead. Removed "FolderReader" since it is useless.
2126 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2127 -vCard]): directly use the "content" ivar since it is initialized
2128 during object creation.
2130 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2131 ([SOGoContactLDAPFolder -init]): no longer handle the
2132 nameInContainer no the container ivars. They were removed because
2133 this class is a descendant of SOGoObject which already has them.
2134 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
2135 returning "displayName".
2136 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
2139 * SoObjects/Appointments/SOGoCalendarComponent.m
2140 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
2141 ([SOGoCalendarComponent -findParticipant:user]): new name for
2142 method "participant:".
2143 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
2144 findparticipant but taking a uid string as parameter.
2145 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
2146 iCalendar automatically. Instead, this is done only when the user
2147 is a "date and time viewer".
2148 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
2149 (modifier and responder) into account by compiling them with the
2152 * SoObjects/Contacts/SOGoContactFolder.h: removed
2153 "nameInContainer" from the list of required methods.
2155 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
2156 -davContentType]): returns "text/calendar".
2158 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2159 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
2160 groupdav resource-type.
2162 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2163 -davContentType]): same as below.
2165 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2166 -initWithName:newNameinContainer:newContainer]): new overriden
2167 method setting the custom owner directly.
2169 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2170 -davContentType]): same as below.
2172 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2173 -davContentType]): same as below.
2175 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
2176 declare "httpd/unix-directory".
2178 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
2179 "UTC" as fallback timezone instead of "Canada/Eastern".
2180 ([-hasEmail:email]): make use of the new NSArray's
2181 containsCaseInsensitiveString: method.
2183 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2184 -davContentType]): declare "message/rfc822" as content type.
2186 * SoObjects/Appointments/SOGoAppointmentFolder.m
2187 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
2189 ([SOGoAppointmentFolder
2190 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
2191 ([-fetchContentObjectNames]): commented out method since it was
2192 usefull only for testing Funambol.
2194 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
2195 -containsCaseInsensitiveString:match]): an enhanced version of
2198 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
2200 ([-showMarkDeletedButton]): removed useless method.
2201 ([-showTrashButton]): removed useless method.
2203 * SoObjects/Appointments/iCalEntityObject+SOGo.m
2204 ([iCalEntityObject -userIsParticipant:user]): new proxy method
2205 that invoked isParticipant on self for each possible email
2206 addresses of the user passed as parameter.
2207 ([iCalEntityObject -userIsOrganizer:user]): same as above.
2209 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
2212 * SoObjects/Appointments/SOGoAppointmentObject.m
2213 ([SOGoAppointmentObject
2214 -saveContentString:contentStringbaseVersion:baseVersion]): remove
2215 method since an event may not have an organizer.
2217 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2218 -GETAction:localContext]): clarified method. Added support for
2219 content-type (thanks to Helge Hess).
2220 ([SOGoObject -initWithName:_nameinContainer:_container]):
2221 initialize and retain the owner.
2222 ([SOGoObject -davContentType]): returns "text/plain".
2224 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2226 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2227 -addUserInAclsAction]): send an acl addition mail.
2228 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
2231 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2232 -_realActionWithFolderName:folderDict]): handle the possible
2233 presence of the "mail-invitation" url parameter. If present, the
2234 user will be redirected to the relevant folder.
2236 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
2237 ([SOGoUser -language]): new method that returns the user's
2238 preferred language, or the system's if none has been set yet.
2240 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
2241 that returns the full dav url to self.
2242 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
2243 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
2244 returns the full so url to the base of the SOGo module to which
2245 self belongs, and for the specified user.
2246 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
2247 but for the current user.
2248 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
2249 required by the acl advisory templates and which returns a link
2250 the target user can click to activate its new subscription.
2251 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
2252 but for inclusion of the application/x-sogo-notification part,
2253 which will be handled by the Lightning enhancer plugin.
2255 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
2256 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
2257 do nothing yet since imap folder subscription is not handled yet.
2259 * SoObjects/SOGo/SOGoContentObject.m
2260 ([-hasSupportForDefaultRoles]): removed method.
2262 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2263 -getFullEmailForUID:uid]): new method that returns the username +
2266 * SoObjects/Appointments/SOGoCalendarComponent.m
2267 ([SOGoCalendarComponent +initialize]): the default language for
2268 mail templates is now set to English.
2270 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
2271 SOGoACLAdvisory implementing the french template for user removal
2274 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
2275 SOGoACLAdvisory implementing the french template for user
2278 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
2279 SOGoACLAdvisory implementing the english template for user removal
2282 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
2283 SOGoACLAdvisory implementing the english template for user
2286 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
2287 supercall of all the acl advistory templates. The model is based
2288 on SOGoAptMailNotification except that the template encapsulates
2289 the message to be sent. Later, we might create a superclass common
2290 to all template-based emails.
2292 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2293 -addRange:newRange]): new method that store a string
2294 representation of the NSRange passed as parameter.
2295 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
2296 any range contained in self intersect with the one passed as parameter.
2298 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
2299 store ranges in an array to prevent them from intersecting with
2300 each other during the passes.
2302 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2304 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2305 -primaryFetchMailboxInfo]): useless method. Removed.
2307 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2309 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2310 -toManyRelationshipKeys]): invoke [self subfolders].
2311 ([SOGoMailFolder -subfolders]): new method containing what used to
2312 be in toManyRelationshipKeys.
2313 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
2316 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2317 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
2318 named and at the beginning of which we put the predefined folders.
2320 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2321 -emptyTrashAction]): new method inspired by a similar one from
2322 UIxMailListView, to which we added the ability to remove
2325 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
2326 method. Replaced with a similar one in UIxMailFolderActions.
2328 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2329 -renameFolderAction]): implemented method.
2330 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
2331 specified folder. Instead, we put it in the trash folder.
2333 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
2334 method, replaced with a similar method in the new
2335 UIxMailFolderAction class module.
2336 ([-deleteFolderAction]): idem.
2338 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2339 -createFolderAction]): new method implementing subfolder creation.
2340 ([UIxMailFolderActions -renameFolderAction]): new method
2341 implementing subfolder renaming (basic implementation to be
2343 ([UIxMailFolderActions -deleteFolderAction]): new method
2344 implementing folder deletion.
2346 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
2347 web actions related to the handling of imap folder.
2349 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2351 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2352 -ownerInContext:localContext]): overriden method because we are an
2353 IMAP4 client and we need a bit more intelligence to deduce the
2354 owner of the current folder.
2355 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
2356 return an NSException so we need to be careful here to avoid a
2358 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
2359 NSException so we need to be careful here to avoid a crash.
2361 * SoObjects/Mailer/SOGoMailAccounts.m
2362 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
2363 there is no longer any concept of Intranet or Internet connection
2366 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2367 -sharedFolderName]): new method.
2368 ([SOGoMailAccount -otherUsersFolderName]): new method.
2370 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
2371 new javascript code and the new UIxMailAccountActions class.
2373 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
2374 javascript code and the new UIxMailAccountActions class.
2376 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
2377 new javascript code and the new UIxMailAccountActions class.
2379 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2380 -listMailboxesAction]): new method that returns a json-formatted
2381 tree of all the mailboxes available to the current user.
2383 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
2384 web actions related to the handling of mail accounts.
2386 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
2389 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
2390 -jsonRepresentation]): new interface method meant to be overriden
2391 by the primitive classes.
2393 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2395 * UI/MailerUI/UIxMailSplashView.m: removed.
2397 * SoObjects/Appointments/SOGoCalendarComponent.m
2398 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
2399 the uid to the list only when the user email is recognized by the
2402 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2404 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2405 -isDeletionAllowed]): completed method with the new imap acl api.
2407 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
2410 * SoObjects/SOGo/SOGoPermissions.m: added the new role
2411 "SOGoMailRole_MessageEraser".
2413 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
2414 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
2415 "defaultUserID" method into account.
2417 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
2418 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
2419 "defaultUserID" method into account.
2421 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
2422 methods to support the IMAP acls mentionned in the RFC 4314,
2423 removed the ones specific to Cyrus.
2425 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
2426 mandatory method for subclasses. Removed the SOGoDefaultUserID
2429 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
2430 overriden method to return @"<default>".
2432 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2433 -defaultUserID]): overriden method to return @"<default>".
2435 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2436 -aclsForUser:uid]): overriden method.
2437 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
2438 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
2439 ([SOGoMailFolder -defaultUserID]): overriden method.
2440 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
2442 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2444 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2445 -aclUsersForObjectAtPath:objectPathArray]): new method that being
2446 forwarded the calles to aclUsers for the GCS-based subclasses of
2449 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
2450 methods that would have been used to support IMAP acls. Replaced
2451 them with the new protocol for them that has been implemented in
2452 SOGo during the last few weeks.
2454 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2455 -hasSupportForDefaultRoles]): override method by returning "YES".
2457 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2458 -addObjectUniquely:object]): new method with an explicit name.
2460 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
2461 "acl" to "aclUsers". Now designed to return only the uid of the
2462 users involved in an ACL.
2463 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
2464 "NO" by default. To indicate to the acl editor that we don't want
2465 to handle a default user.
2467 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
2468 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
2471 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
2472 provides a view to the IMAP acls.
2474 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
2476 * UI/WebServerResources/MailerUI.js: replaced all invocations of
2477 addEventListener to the use of prototype's Event object. Also,
2478 configured all menus programmatically following descriptions lists
2479 containing their callbacks, or nulls, submenus id or separators.
2481 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2483 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2484 -addUserInAclsAction]): save the previous roles of the user
2485 (unlikely) or the default roles, or None instead of saving the
2486 roles that should appear the first time in the role editor when no
2487 default has been set...
2489 * SoObjects/SOGo/SOGoObject.m: defined a new constant
2490 "SOGoDefaultUserID".
2492 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2493 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
2494 ignore the "AuthorizedSubscriber" role and add the "None" role
2495 when no other role is found.
2497 * UI/Common/UIxAclEditor.m: added a button for the new default
2500 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2501 -_initRights]): don't take the "None" role into account when
2502 initializing the list of current roles.
2504 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
2507 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2509 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2510 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
2511 There is no need to subscract the start from the length if a space
2512 is not found since the range has not changed either. Finally, the
2513 first character before the url might also be a tab or a cr, so we
2514 match it against the "urlAfterEndingChars" custom NSCharacterSet.
2515 ([NSString -stringByDetectingURLs]): modified to handle email
2516 addresses and add a correct "mailto:" link.
2518 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2520 * SoObjects/Appointments/SOGoAppointmentFolder.m
2521 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
2522 method to return the events in the range of 2 weeks ago up to 4
2525 * UI/MailPartViewers/UIxMailPartTextViewer.m
2526 ([UIxMailPartTextViewer -flatContentAsString]): use the new
2527 "stringByDetectingURLs" method to offer clickable urls.
2529 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2530 -stringByDetectingURLs]): this new method replaces passive URLS
2531 with active ones for HTML resolution of the text.
2533 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2535 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2536 -asQPSubjectString:encoding]): simplified method.
2537 The headers indicates "utf-8" again thank to our fix in
2540 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
2543 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2545 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2546 -removeUserFromAclsAction]): implemented this method which was
2547 missing and is required to remove users from ACLs.
2549 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2550 -subscribeAction]): folderDict was not autoreleased, resulting in
2553 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2554 -primaryFetchProfile]): when building with libFoundation, don't
2555 use the "propertyList" method from NSString. Rather, we convert
2556 the string to an NSData instance and passit as parameter to
2557 NSDeserializer. This way, we obtain a mutable dictionary rather
2558 than an immutable one.
2560 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
2561 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
2562 constant string "contentTypeValue".
2563 contentTypeValue is now set back to iso-8859-1 since NGMime
2564 converts extracts the data in that encoding.
2566 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2568 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2569 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
2570 "bindFields" value is present in the user defaults, use the
2571 specified fields to find the dn of the user to bind.
2572 ([LDAPSource -allEntryIDs])
2573 ([LDAPSource -fetchContactsMatching:match])
2574 ([LDAPSource -lookupContactEntry:entryID])
2575 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
2576 bind and unbind the connection on each request.
2578 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
2580 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2581 -contactSearchAction]): simplified method to use the facilities
2582 provided by the LDAPUserManager. No longer takes care of the
2583 "ldap-only" url parameter since all requests are handled by the
2586 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2587 -primaryFetchProfile]): check that the value returned is not null
2588 before interpreting it.
2590 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2591 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
2592 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
2593 system email is already present, remove it before adding it.
2595 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2596 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
2597 loginToCheck is not empty.
2598 ([LDAPSource -fetchContactsMatching:match]): check that match is
2600 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
2602 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
2605 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2607 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
2609 ([SOGoUser -systemEmail]): returns the email formed from the
2610 username and the default mail domain.
2611 ([SOGoUser -hasEmail:email]): test whether the user has the
2612 specified email, in a case-insensitive way.
2614 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2615 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
2616 check login information.
2618 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2619 ([SOGoContactLDAPFolder
2620 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
2621 no longer manage LDAP connections. The requests are forwarded to
2622 the relevant LDAPSource instead.
2624 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2625 -appendSystemSources]): pass LDAPSource objects to
2626 SOGoContactLDAPFolder instances.
2628 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
2629 address of the "from" field before sending the message. Otherwise,
2630 sending the mail won't work.
2632 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
2633 rewrote this method to request all the available email identities
2634 for the current user. Also, the from field also contains the full
2635 name of the user, not just his/her email address.
2637 * SoObjects/Appointments/SOGoCalendarComponent.m
2638 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
2639 from the previous module iCalEntityObject+Agenor.
2640 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
2641 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
2644 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
2645 replacing the SOGoContactLDAPEntry module. It was renamed as such
2646 because it now receives a dictionary instead of an NGLdapEntry.
2647 It thus can now handle data from any source of LDIF data, not
2648 only coming from LDAP.
2650 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
2651 implementing most of what used to be the AgenorUserManager class.
2652 The difference is that users are cached in the forme of
2653 dictionaries and many sources are used. Also, it can be used to
2654 search LDAP contacts.
2656 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
2657 the concept of "ldap source", to be used by all the classes
2658 needing access to LDAP-provided information: addressbooks and the
2659 user manager. Most the method thereing are transcriptions of
2660 methods previously found in SOGoContactLDAPFolder. It also contain
2661 utility methods for user matching and authentification.
2663 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
2664 module, rendered useless by code refactoring.
2666 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
2667 with the freshly written "LDAPUserManager".
2669 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2671 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
2672 SOGOContactLDIFEntry.
2674 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
2675 module, obsoleted by code in SOGo/LDAPSource.[hm].
2677 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2679 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
2680 new method with an explicit name.
2682 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2684 * SoObjects/Appointments/SOGoCalendarComponent.m
2685 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
2686 replacing "isOrganizer:orOwner:" by taking only one instance of
2687 SOGoUser as parameter.
2688 ([SOGoCalendarComponent -participant:user]): new method replacing
2689 the previous "isParticipant" boolean method by returning the first
2690 participant matching the user passed as parameter. This method is
2691 used so that both the regular email address and the "system email
2692 address" of the user are matched against the participants emails.
2694 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2695 -getSystemEMailForUID:uid]): new method that returns the email
2696 formed with the user's uid and the default mail domain.
2698 * SoObjects/Appointments/SOGoCalendarComponent.m
2699 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
2700 was previously commented out.
2702 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
2703 forwared to [AgenorUserManager getSystemEmailForUID:].
2705 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2706 -toolbar]): method replacing the one with the same name in the
2707 task and appointment editor classes. This method makes also use of
2708 the new method "isOrganizerOrOwner:" and "participant:" in
2709 SOGoCalendarComponent.
2711 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2712 -toolbar]): removed method, replaced with a method with the same
2713 name in UIxComponentEditor.
2715 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
2716 method, replaced with a method with the same name in
2719 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2720 -primaryFetchProfile]): the values returned from the database are
2721 converted to a put dictionary first, since the dictionary returned
2722 is actually an immutable one, which can cause a crash afterwards.
2724 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2726 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
2727 and "SOGoRole_ObjectEditor".
2729 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2730 -prepareRightsForm]): this method is no longer mandatory.
2732 * UI/Contacts/UIxContactsUserRightsEditor.m
2733 ([UIxContactsUserRightsEditor
2734 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
2735 module to handle acls related to the address books. Partial
2738 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2739 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
2742 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
2743 specified roles from cache.
2744 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2745 put resulting roles in cache.
2747 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
2748 initWithName:inContainer:. Instead, directly initialize the ivars
2749 as it is supposed to be to avoid an infinite loop whenever one of
2750 those two methods are overriden.
2752 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
2755 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2756 -aclsForUser:uid]): override method so that SOGo won't crash when
2757 loading the contact card.
2759 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2761 * SoObjects/Appointments/SOGoAppointmentFolder.m
2762 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
2763 "freebusy" special user should only require opaque elements.
2765 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2767 * SoObjects/Appointments/SOGoAppointmentFolder.m
2768 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
2769 our double declaration where the resulting XML would be screwed.
2770 There is only one collection per namespace.
2772 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
2773 rfc822DateString]): new method that returns a string conform to
2774 rfc 822 and suitable for email headers.
2776 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
2777 "rfc822DateString" category method on the date we put in the
2780 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2782 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
2783 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
2784 which should never be overriden.
2785 ([UIxUserRightsEditor -appendRight:newRight])
2786 ([UIxUserRightsEditor -removeRight:right])
2787 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
2788 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
2789 methods that can be used by the subclasses.
2790 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
2791 mandatorily be overriden to prepare the elements of the subclassed
2793 ([UIxUserRightsEditor -updateRights]): new method that should
2794 mandatorily be overriden to update the user rights from the
2795 elements of the subclassed form.
2797 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
2798 check if the uid is already listed before adding it to our array.
2799 This is because the acl table can contain more than one record per
2800 user/object relationship.
2802 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2803 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
2804 "roles" parameter is now an NSArray instead of a string. Therefore
2805 we loop throughout the array to populate the table. All the
2806 relevant records are removed prior to the addition of the new
2809 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2810 -aclsForUser:uid]): new override that returns nil until we add
2811 support for IMAP acls.
2813 * SoObjects/Mailer/SOGoMailAccounts.m
2814 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
2816 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2817 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
2819 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2820 -aclsForUser:uid]): override this method which will always return
2823 * SoObjects/SOGo/SOGoPermissions.[hm]: added
2824 [Public,Private,Confidential]
2825 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
2826 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
2827 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
2829 * SoObjects/Appointments/SOGoAppointmentFolder.m
2830 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
2831 that defines default roles for new elements in the acl.
2833 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
2834 module and subclass of UIxUserRightsEditor specific to the
2835 handling of user rights on calendar folders.
2837 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2839 * SoObjects/Appointments/SOGoAppointmentFolder.m
2840 ([SOGoAppointmentFolder -groupDavResourceType]): return both
2841 "vevent-collection" and "vtodo-collection".
2843 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
2844 that implements the detailed editor of user rights per-object.
2846 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2848 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2849 -rolesForObject:objectinContext:context]): no longer query objects
2850 for "roleForUser:". Instead, all objects should implement
2853 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
2854 new method to comply with the new acl "protocol" in SOGoObject.
2855 Uses SOGoFolder's new facilities for ACLS.
2856 ([SOGoContentObject -aclsForUser:uid]): idem.
2857 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
2858 ([SOGoContentObject -removeAclsForUsers:users]): idem.
2860 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2861 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
2862 based folders. This method is derived from the code that was in
2863 UIxAclFolder before its removal.
2864 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2867 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
2869 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
2870 ([SOGoFolder -setRoleForUsers:uidsto:role])
2871 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
2873 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
2874 that requires overriding by subclasses.
2875 ([SOGoObject -aclsForUser:uid]): idem.
2876 ([SOGoObject -defaultAclRoles]): idem.
2877 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
2878 ([SOGoObject -removeAclsForUsers:users]): idem.
2880 * UI/Common/UIxObjectActions.m: new module implementing the web
2881 actions common to SOGoObject and all its subclasses.
2882 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
2883 user with the clientObject defaults user rights to the object's
2886 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
2887 to the point where it will only list the users (and their name)
2888 associated with an object acl.
2890 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
2891 methods have been moved into SOGoObject and SOGoFolder during a
2894 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2895 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
2896 method made useless by the programmatic handling of iCalendar
2898 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
2899 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
2900 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
2902 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
2903 drop on all folder nodes, not just on leaves.
2905 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2906 ([SOGoContactLDAPFolder
2907 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
2909 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2911 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
2912 debugging facilities when the SOGoDebugObjectAllocation user
2915 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2917 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
2918 method that SOGo will need with non-gnustep Foundation
2920 ([NSString -stringByAppendingPathComponent:component]): new method
2921 that SOGo will need when building with libFoundation. Method
2922 removed later since it is available from
2923 Foundation/NSPathUtilities.h.
2925 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
2928 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
2929 every subclass to access [WOApplication context] without having to
2930 invoke it more than once.
2932 * SoObjects/Appointments/SOGoCalendarComponent.m
2933 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
2934 moved method from SOGoTaskObject and SOGoAppointmentObject up to
2937 * UI/Scheduler/UIxCalSelectTab.m: removed module.
2939 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2941 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2942 -vCard]): test the prefix of the card in a case-independent way.
2944 * OGoContentStore/OCSContactFieldExtractor.m
2945 ([OCSContactFieldExtractor
2946 -extractQuickFieldsFromContent:content]): we no longer accept
2947 records in a format other than versit vCard so we can get rid of a
2950 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2952 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2953 -selectorComponentClass]): restored method.
2955 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2957 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
2958 -shouldDisplayCurrentTask]): the current task is not displayed if
2959 it is NOT completed or if the "showCompletedTasks" flag is set.
2960 The logic was inverted in Lightning and is now in SOGo too.
2962 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2964 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
2965 want the "work" url instead of the "home".
2967 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
2968 -_saveSnapshot]): save url values from snapshot.
2969 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
2971 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2972 -calendarList]): new method replacing "availableCalendars".
2974 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
2975 -calendarFolders]): we now take the list of subscribed calendar
2978 * SoObjects/Appointments/SOGoAppointmentFolder.m
2979 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
2980 method derived from and replacing [UIxCalView calendarFolders].
2982 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2984 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2985 -toManyRelationshipKeys]): don't put the predefined folders in the
2986 list if they are returned by the server.
2988 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
2989 longer store the "flattenedBlocks" in a dictionary since the
2990 object will be deleted anyway and we don't need to put the folders
2993 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
2994 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
2995 attachment path into account when computing the part urls.
2997 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2999 * UI/Contacts/UIxContactsListViewContainer.m
3000 ([UIxContactsListViewContainer -additionalFolders]): take the list
3001 of subscribed folders from the new property list used for the user
3002 settings. The value of its key is SubscribedFolders for the
3003 dictionary entry named "Contacts".
3005 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3006 -canAccessContentAction]): new method to override the one from
3007 UIxFoldersActions by taking into account the fact that, this time,
3008 the clientObject is an ldap folder. Removed many method that used
3009 to be related to the handling of the user selector.
3011 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
3012 to make sure they can be removed.
3014 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
3015 populate the calendar entries based on the user settings plist.
3017 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3018 -selectForMailerAction]): restored method.
3020 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
3021 from a simplified version of the old UIxContactEditor (removed).
3023 * UI/Contacts/UIxContactsUserFolders.m: new template module for
3024 selecting users or user folders through an LDAP search of which
3025 the results are displayed as a tree.
3027 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
3028 method "onContactAdd" here since the Mailer is now the only module
3029 to use it when composing emails.
3031 * UI/WebServerResources/generic.js: added code for handling the
3032 new scheme used for describing SOGo folders, common code to handle
3033 folder addition or removal.
3035 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3036 -activateFolderAction]): new method that change the "active"
3037 settings in the folder-related fields in the user settings.
3038 ([UIxFolderActions -deactivateFolderAction]): see above.
3040 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3041 -checkRightsAction]): removed method.
3043 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3044 -updateAdditionalAddressBooksAction]): removed method.
3046 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3047 -updateCalendarsAction]): removed method.
3049 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3051 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3052 -checkRightsAction]): removed method.
3054 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3055 -canAccessContentAction]): new method designed to replace
3056 [UIxCalMainView checkRightsAction] in a more universal way.
3058 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3060 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3061 -roleOfUser:uidinContext:context]): take all the subkeys into
3062 account, not only the "personal" folder.
3064 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3065 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
3066 to the new components.
3068 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
3071 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3072 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
3073 field of the sogo_user_profile table, where the user-customizable
3074 changes will be saved.
3075 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
3076 similar to the one above, using the "settings" field where the
3077 automatic settings will be saved.
3079 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
3080 module to bind the userdefaults to a property list contained in a
3081 specified field of the sogo_user_profile table.
3082 ([AgenorUserDefaults
3083 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
3084 added a "fieldName" parameter.
3086 * UI/Common/UIxFolderActions.m: new module implementing web
3087 actions common to all GCS-based folders.
3089 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3091 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
3092 put a carriage return after the day name.
3094 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3095 -readFreeBusyAction]): restored method.
3097 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3099 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3100 -defaultAction]): remade module to redirect automatically to the
3103 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
3105 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3107 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3108 -deleteAction]): new web method to delete personal addressbook
3111 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3112 -delete]): override method to refuse the deletion of the folder if
3113 its nameInContainer is "personal".
3115 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
3116 that forwards the deletion request to the folder manager.
3118 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3120 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
3121 -zoomList]): new method that returns the list of available zoom factors.
3123 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3124 -changeStatusAction]): rewrote method.
3126 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3127 -_handleAttendeesEdition]): make sure "attendeesNames" has a
3128 length > 0 before computing the attendees. Otherwise there will be
3129 an invalid empty entry.
3130 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
3131 organizer when there are attendees and remove it when the
3132 attendees are removed.
3134 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3136 * UI/Scheduler/UIxAttendeesEditor.m): new component.
3138 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
3139 the task and appointment editors. Now a container component
3140 handling the common elements of tasks and events.
3142 * UI/Scheduler/UIxTaskEditor.m: same as below.
3144 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
3145 a subclass of UIxComponentEditor but a subcomponent of it.
3147 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
3148 toolbar can have the special value "none" to indicate there is
3149 none attached to the window.
3151 * SoObjects/Appointments/SOGoCalendarComponent.m
3152 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
3154 ([SOGoCalendarComponent -isParticipant:email]): new method.
3155 ([SOGoCalendarComponent -calendar:create]): takes one parameter
3156 "create" which is a boolean indicating whether we want to create
3157 the calendar if it does not exist.
3159 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3161 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
3162 of a table, the same way the dayly and weekly views have been for
3165 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
3167 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
3170 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
3171 property to point at the user folder
3173 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3175 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3176 -userInContext:]): returns "SOGoUser".
3178 * SoObjects/Appointments/SOGoCalendarComponent.m
3179 ([SOGoCalendarComponent -contentAsString]): overriden method that
3180 takes the privacy into account and discard the relevant fields if
3181 needed by generating a new content string and caching it.
3182 ([SOGoCalendarComponent
3183 -saveContentString:contentStringbaseVersion:baseVersion]): if the
3184 new method above has cached a content string, release it and set
3185 it to nil so that it will have to be regenerated in the case it is
3187 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
3188 discard the fields that have to be hidden when the card is
3191 * SoObjects/Appointments/SOGoAppointmentFolder.m
3192 ([SOGoAppointmentFolder
3193 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
3194 sure the cards are now handled as instances of
3195 SOGoCalendarComponent instead of SOGoContentObject so that their
3196 content string is taking the privacy classifiction into account.
3197 ([SOGoAppointmentFolder -_privacySqlString]): new method that
3198 generates a query to determine what information can be given and
3199 if the card itself has to be shown.
3201 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3202 -getICalPersonsFromValue:selectorValue]): removed useless
3203 "isAccessRestricted" method.
3205 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3206 -setStyle:_style]): test whether the values of orgmail and
3207 partmails are null before manipulating them, otherwise SOGo sends
3208 a "rangeOfString:" message to an NSNull, which makes it crashes.
3210 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3211 -extractQuickFieldsFromEvent:_event]): we now use the new
3212 "symbolicAccessClass" method from iCalEntity to determine the
3213 value of the "classifiction" field.
3214 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
3217 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3219 * SoObjects/Appointments/SOGoAppointmentFolder.m
3220 ([SOGoAppointmentFolder
3221 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
3222 see below, the query is adapted consequently.
3224 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3225 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
3226 renamed to "classification" and can any integer as value.
3227 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
3230 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3232 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3233 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
3234 don't prepend anything to the class and id named. Instead, we
3235 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
3238 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3240 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
3241 -rolesOfUser:logininContext:context]): if object does not exists
3242 (for example when it's being created), the current user has the
3243 same rights on it than he/she has on its parent container.
3245 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3246 -nameExistsInFolder:objectName]): methods that tests if a c_name
3247 corresponding to the name passed as parameter is present in the db
3250 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3252 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3253 -rolesForObject:objectinContext:context]): test for
3254 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
3256 * SoObjects/Appointments/SOGoCalendarComponent.m
3257 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
3258 returns the roles of the user on the container object if the event
3261 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3263 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
3264 alternativeViewer a multipart/related message is being handled.
3266 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
3269 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
3270 text/html component before text/plain.
3272 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3273 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
3274 fetching of HTML parts.
3276 * SoObjects/Appointments/SOGoCalendarComponent.m
3277 ([SOGoCalendarComponent -componentTag]): new template method that
3278 returns the vcalendar tag of the current object.
3279 ([SOGoCalendarComponent -component]): new method that returns the
3280 first object matching [self componentTag] within the current
3281 calendar object. This method replaces 'firstEventInCalendar:' as
3282 well as "firstTaskInCalendar:".
3283 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
3284 moved method from SOGoAppointmentObject.m.
3286 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3288 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
3289 module which shows each selected user's calendar in a different
3290 column instead of mixing their events together.
3292 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
3293 replaced use of [NSString stringByTrimmingWhiteSpaces] with
3294 [NSString stringByTrimmingSpaces].
3296 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
3297 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
3300 * UI/Scheduler/UIxCalDayOverview.m,
3301 UI/Scheduler/UIxCalDayChartview.m,
3302 UI/Scheduler/UIxCalDayListview.m,
3303 UI/Scheduler/UIxCalWeekOverview.m,
3304 UI/Scheduler/UIxCalWeekChartview.m,
3305 UI/Scheduler/UIxCalWeekListview.m,
3306 UI/Scheduler/UIxCalInlineMonthOverview.m,
3307 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
3309 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3311 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3312 -appendPersonalSourcesInContext:context]): release connectoin
3313 channel when everything is done.
3315 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3316 -newAbAction]): new action method to crate a new contact folder
3319 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
3320 that requests the folder manager to create a folder table with the
3321 specified type at the specified path. The type is taken from [self
3324 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3325 -folderType]): implemented.
3327 * SoObjects/Appointments/SOGoAppointmentFolder.m
3328 ([SOGoAppointmentFolder -folderType]): implemented.
3330 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3331 -appendPersonalSourcesInContext:context]): we now fetch all
3332 folders with type "Contact" that belong to the current user.
3333 ([SOGoContactFolders -newFolderWithName:name]): new method to
3334 create a new contact folder.
3336 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
3337 resulting url with [NSString+Utilities hostlessURL] instead of
3338 using NSURL. This is because the url in question sometimes has a
3339 hostname and sometimes not. "hostlessURL" ensure the hostname is
3341 ([UIxComponent -applicationPath]): same as above.
3343 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
3345 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
3346 folders before doing the one on messages.
3348 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3350 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
3351 makeObjectsPerform:withObject:withObject: for GNUstep
3354 * OGoContentStore/GNUmakefile, Protocols/common.make,
3355 SoObjects/common.make, UI/common.make: install in
3356 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
3358 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
3360 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
3363 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3365 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
3366 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
3369 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3370 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
3371 password would be accepted anyway as long as its length was > 0.
3372 This can be the case ONLY when LDAP is disabled otherwise we have
3373 a serious security issue...
3375 * SoObjects/Appointments/SOGoAppointmentObject.m
3376 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
3377 user is not an organizer nor a participant, he is declared as
3378 "Owner" if he owns the calendar the entry where the entry is
3379 contained. Other cases should not be possible.
3381 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3383 * UI/Contacts/UIxContactEditor.m: display and handle the new
3386 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3387 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
3390 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3391 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
3394 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3396 * SoObjects/Appointments/SOGoCalendarComponent.m
3397 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
3398 returns the value of ud "SOGoAppointmentSendEMailNotifications"
3400 ([SOGoCalendarComponent
3401 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
3403 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3405 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3406 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
3407 so that the mailbox cache is refreshed everytime the user presses
3408 on "get mail". I doubt a mailbox cache really is useful in general
3411 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3413 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3414 -userInContext:]): if the lookup is on "freebusy.ifb" and the
3415 username is "anonymous" the user is automatically set to
3418 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3420 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3421 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
3422 user with password "freebusy".
3424 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
3425 -contentAsString]): the default timerange is now 14 days before
3426 currentday and 1 month after.
3428 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3430 * SoObjects/Appointments/SOGoAppointmentFolder.m
3431 ([SOGoAppointmentFolder
3432 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
3433 escape the record string in a way suitable with XML encoding.
3435 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3437 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
3438 calendar view would not be updated properly.
3440 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3442 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3443 -newStartDate]): fix the handling of the component start date
3444 depending on the "hm" and the "day" parameters.
3446 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3447 -roleOfUser:uidinContext:context]): set role of current user to
3448 "Assistant" if the object that is accessed is "freebusy.ifb".
3450 * SoObjects/Appointments/SOGoAppointmentFolder.m
3451 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
3452 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
3453 ([SOGoAppointmentFolder
3454 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
3455 lookupCalendarFolderForUID: method, which doesn't do security
3458 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3460 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
3461 accessor that returns the comma-separated list of users with role
3463 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
3464 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
3465 "checkedUsers". Instead, each user is either classified in the
3466 list of assistants or the list of delegates.
3468 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3470 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
3471 -composeAction]): method imported from removed container modules.
3472 ([UIxMailMainFrame -mailFolderName]): method imported from removed
3475 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
3476 for wrapping UIxMailView with the "popupview" action.
3478 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
3479 since its the component that displays the same splash screen than
3480 the one in Thunderbird/Icedove.
3482 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
3483 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
3484 UI/MailerUI/UIxMailListViewContainer.[hm],
3485 UI/MailerUI/UIxMailViewContainer.[hm]: removed
3487 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3489 * UI/WebServerResources/HTMLElement.js: replaced the functional
3490 selectNode() and deselectNode() functions with select() and
3491 deselect() methods of HTMLElement.
3493 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
3494 events are initialized from here now instead of in the HTML code.
3496 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3497 -checkRightsAction]): new method similar to the one with the same
3498 name in UIxCalMainView.m.
3500 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
3501 code to handle the publishing of freebusy information.
3503 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3505 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3506 -checkRightsAction]): new action method that returns a
3507 comma-separated list of boolean values matching the right of the
3508 current user to "view" (as a permission) each foreign calendar
3509 stored in his preferences.
3511 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
3512 new method that sets a customOwner, which can be returned with
3513 ownerInContext it set.
3515 * SoObjects/Appointments/SOGoAppointmentFolder.m
3516 ([SOGoAppointmentFolder
3517 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
3519 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3521 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
3522 below, but for the Contacts and Calendar collections.
3524 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
3525 new acl facilities method from sope-gdl/GCSFolder.m.
3527 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3528 -roleOfUser:uidinContext:context]): new method that returns
3529 SOGoRole_Assistant when the user is an assistant or a delegate on
3530 the "personal" ab object. This is so that setting roles on the
3531 SOGoContactFolders object is not required.
3533 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3535 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
3537 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
3538 to the handling of the user selection for the acls.
3540 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
3541 values from SoPermissions with ones specific to SOGo.
3543 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
3544 handles the storage for the acls.
3546 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
3547 class for SOGoAppointmentObject and SOGoTaskObject.
3549 * UI/Common/UIxAclEditor.[hm]: new component that provides a
3550 general editor for folder acls.
3552 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
3554 ([NSString -davMethodToObjC]): method that returns the method name
3555 for a DAV property implementation.
3557 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
3559 ([NSArray -stringsWithFormat:format]): new method that returns
3560 formatted occurences of the strings stored in the array.
3562 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
3563 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
3564 subclass module of SoWebDAVValue that supports collections of
3565 properties of the same type.
3567 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3569 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3570 -lookupFolder:ofClassNamed:inContext:]): added the ability to
3571 configure the name of the SOGoDraftFolders with the ud var
3572 "SOGoDraftsFolderName".
3574 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3576 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
3577 -userTimeZone:username]): new method that returns the timezone for
3578 the specified user depending on his preferences and the server
3581 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3582 -stringForData:partInfo:]): take the encoding into account and
3583 translate the text to "normal" before processing the charset data.
3585 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3587 * UI/WebServerResources/generic.js: the progress indicator is on
3588 when loading the page so we turn it off, and we turn it back on
3589 whenever we switch to another module...
3591 * UI/WebServerResources/SchedulerUI.js: make sure the day view
3592 synchronization mechanism works everywhere.
3594 * UI/WebServerResources/generic.js: the log window is not only
3595 visible when UIxDebugEnabled is set.
3597 * UI/WebServerResources/SchedulerUI.js: the month overview's day
3598 cells are now initialized with the DOM event interface methods
3599 instead of with html attributes.
3601 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
3602 headers (should be made configurable at some point)...
3604 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
3605 "not null" constraint on startdate, enddate, isopaque,
3606 participants and partmails.
3608 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3610 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3611 -hoursToDisplay]): prevent a crash by retaining the
3612 "hoursToDisplay" array after it's created.
3613 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
3614 clickable hours DIV.
3616 * UI/WebServerResources/SchedulerUI.js: made the event
3617 participation status modification asynchronous, which also fixes a
3618 bug where the window would sometimes close before the accept or
3619 decline action was completed. Also, adapted the event handling
3620 related to the days or weeks view with the new DIV-based layout.
3622 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
3624 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
3625 DIV-based presentation of the days and weeks.
3627 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
3629 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
3630 might return an exception so we have to handle it if we don't
3633 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3635 * UI/WebServerResources/SchedulerUI.js: updated the list
3636 initialization code to use the new event management scheme, adding
3637 what was missing to be able to delete events and tasks again.
3639 * UI/WebServerResources/MailerUI.js: added code to activate the
3640 "Get mails" button. Fixed a bug which prevented messages to be
3643 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
3644 navigation and focus handling of INPUTs.
3646 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3648 * UI/WebServerResources/MailerUI.js: added code to handle the
3649 possible drag and drop events to manager in the mail module.
3650 Moving messages, opening parent folders, ...
3652 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
3653 the drag and drop manager as well as the interface to HTMLElement
3654 to trigger drag and drop events.
3656 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
3657 action to move the current message to the mailbox named after the
3658 value of parameter "tofolder".
3660 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3661 -moveToFolderNamed:folderNameinContext:]): new method base on
3664 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3666 * UI/WebServerResources/generic.js: added and activated many
3667 "load" handlers to configure generic widgets used across the
3668 modules. More events are now handled in a DOM-fashion way instead
3669 of by setting the relative attributes in the templates.
3671 * UI/Templates/UIxSortableTableHeader.wox: all the events are
3672 declared from the javascript DOM onload handlers.
3674 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
3677 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
3678 declared from the javascript DOM onload handlers.
3680 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
3681 we want everything to be separated from each other, as much as
3684 * UI/WebServerResources/SOGoDragHandles.js: new module containing
3685 the "SOGoDragHandlesInterface", implementing methods that can be
3686 attributed to DIV so that they can be used as drag handles.
3688 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3689 -asQPSubjectString]): initialize the tmp strings with '0' to make
3690 sure they don't contain garbage.
3692 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3694 * UI/WebServerResources/MailerUI.js: register the messageList
3695 table as a dragging source and the leaf of the navigation tree as
3696 dnd destinations to the DNDManager.
3698 * UI/WebServerResources/generic.js: initialize tabs from the
3699 "unload" event listener that is added programmatically instead of
3700 from the template... Also, added the new DNDManager object.
3702 * UI/WebServerResources/HTMLTableElement.js: added code to
3703 simulate XUL drag n drop events. This code will possibly be moved
3704 to HTMLElement.js instead later...
3706 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3707 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
3710 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3711 -_qualifierForFilter:filter]): only search records which starts
3712 with the specified pattern.
3714 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3716 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3717 -asQPSubjectString]): new method that returns the special QP
3718 string with its qp declaration for email subjects.
3719 ([SOGoDraftObject -bodyPartForText])
3720 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
3721 double-encode data in UTF-8.
3723 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3724 -newStartDate]): new method to determine the start date depending
3725 on the URL parameters, the current day and the current time.
3726 ([UIxComponentEditor -toolbar]): new method to determine the
3727 filename of the toolbar that should be drawn depending on the
3728 ownership and the list of attendees of the task/event wrt to the
3731 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3732 -setDayStartHour:aStartHour]): adjust the minutes to the next
3733 quarter of hour, if not already set to a quarter.
3735 * UI/WebServerResources/UIxAppointmentEditor.js,
3736 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
3739 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3741 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3742 -loadValuesFromComponent:component]): handles access class
3743 (privacy) and status.
3745 * UI/Contacts/UIxContactsListViewContainer.m
3746 ([UIxContactsListViewContainer -additionalFolders]): return nil if
3747 [self additionalAddressBooks] returns an empty string.
3749 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3751 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
3752 rangesOf7Days]): enhanced and debugged algorithm to feed the array
3753 with slices where the first day is still in the requested month.
3755 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
3758 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
3759 of events in the day boxes of the calendar's monthly view.
3761 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
3762 -davContentType]): declare "text/calendar".
3764 * SoObjects/Appointments/SOGoAppointmentObject.m
3765 ([SOGoAppointmentObject -davContentType]): declare
3768 * SoObjects/Appointments/SOGoAppointmentFolder.m
3769 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
3770 HTTP methods are handled by SOPE and requires nil to be returned,
3771 this method now invokes the new
3772 "requestNamedIsHandledLater:inContext:" method to check that.
3773 ([SOGoAppointmentFolder
3774 -requestNamedIsHandledLater:nameinContext:context]): new methods
3775 that returns "YES" only for the "OPTIONS" http method (for now...).
3776 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
3777 overloaded method to append the "access-control" and
3778 "calendar-access" DAV abilities to the initial declaration.
3780 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
3781 imitate the look of Sunbird/Lightning's monthly view.
3783 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
3784 UIxCalMonthViewOld.[hm].
3786 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3788 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
3789 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
3791 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
3792 returns an image name based on the participation status of the
3795 * UI/WebServerResources/SchedulerUI.js: same strip down as for
3798 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
3799 ([UIxContactsListViewContainer -additionalFolders])
3800 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
3801 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
3802 methods to handle the external addressbooks a user has subscribed
3803 too, by retriving them from his preferences.
3805 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3806 -updateAdditionalAddressBooksAction]): new method that updates the
3807 user settings with the list of addressbook he has subscribed to.
3809 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
3810 module for the address book selector.
3812 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
3813 a toolbar with two buttons ("add" and "remove") to manage the
3814 additional addressbooks a user might subscribe to.
3816 * UI/WebServerResources/ContactsUI.js: added code to handle
3817 "external addressbooks" from the Javascript point-of-view, by
3818 extending existing methods and adding code for the "add ab" and
3819 "remove ab" buttons.
3821 * UI/WebServerResources/generic.js: moved extensions methods to
3822 DOM elements to separate files for better clarity.
3824 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
3825 new method that returns "pageContent" as class, but also "popup"
3826 for the DIV where the page content lies, so that we can manipulate
3827 the content of popup's with CSS identifiers.
3829 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3831 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3832 -displayStyle]): new method that returns a string containing the
3833 css style relative to the current appointment cell. This code is
3834 currently inactive but might be reused later.
3836 * UI/WebServerResources/SchedulerUI.js: added code to handle the
3837 display of the selected day (the day pointed by the mouse, or the
3838 current day when changing the view).
3840 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3841 -dayCellClasses]): new method that returns a string containing the
3842 css classes applicable to the current cell, depending on the
3843 position of the day in the week, the day of today and the
3846 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
3847 -currentContactAptBorder]): new method that returns the
3848 appropriate border color for the specified user.
3850 * SoObjects/Appointments/SOGoAppointmentObject.m
3851 ([SOGoAppointmentObject
3852 -saveContentString:contentStringbaseVersion:baseVersion]):
3853 overloaded method that parse new events and detects if they have
3854 an organizer or not. If they are new and have no organizer set
3855 (Sunbird/Lightning...), the owner of the event is set as
3858 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
3859 category that provides facility methods and interfaces to the
3862 * SoObjects/Contacts/product.plist: give full access to ANY
3863 authenticated user, not just the owner (to every objects...).
3865 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3867 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
3868 every replica widgets are declared as such to their master
3869 counterpart. Take the days into account when displaying the time
3870 range taken by the appointment.
3872 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3873 -getICalPersonsFromValue:selectorValue]): method taken from
3874 UIxFreeBusyUserSelector, that is shared both by
3875 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
3877 * SoObjects/Appointments/SOGoAppointmentFolder.m
3878 ([SOGoAppointmentFolder
3879 -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.
3881 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
3882 derived and taken as a subset of UIxFreeBusyUserSelector that
3883 implements the table part of the FreeBusy view. Most of the
3884 methods of UIxFreeBusyUserSelector relative to that table were
3885 moved into UIxFreeBusyUserSelectorTable, which can also be used as
3886 a standalone view for AJAX operations.
3888 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3890 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3891 -vCard]): change reverted.
3893 * UI/Contacts/UIxContactEditor.m: check whether the client contact
3894 folder has selector "globallyUniqueObjectId" before calling that
3897 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3898 -vCard]): the "setVClass" NGVCard method really is "setClass"
3901 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3902 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
3903 request the "streetAddress" instead of the "streetaddress".
3904 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
3905 mails that *contain*, and not just *start with* the search
3908 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3909 -vCard]): mark address returned from LDAP as the work address.
3911 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
3912 span covered with the anchor, not only the textual information
3915 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
3916 argument (event or task) to newEvent in the appointmentListMenu.
3917 Make the appointmentsListView display the appointmentsListMenu.
3919 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
3920 12 to 50 before displaying "...".
3921 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
3922 if its length > 0, whether location itself is nil or not...
3923 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
3924 of which the length > 0.
3926 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3928 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
3929 french and ISO dates.
3931 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
3932 from UIxContactSelector to handle contact lists (current and
3933 additional contacts).
3935 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3936 -_freeBusyAsText]): added handling of an "additional"-named query
3937 parameter that describe the number of additional days after
3938 enddate that should be returned.
3940 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3941 -_responseForResults:results]): give priority to results with
3942 "c_uid" fields. If none returned, use the first contact received.
3944 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3945 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
3946 2 and "CANCELLED" to 0.
3948 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3950 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
3951 of start and end dates to short string dates.
3953 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3954 -readFreeBusyAction]): new method that returns an array of numbers
3955 corresponding to the state in the freebusy of each "quarter of an
3956 hour" between the "sday" and "eday" date parameters passed in the
3957 url. This permits to handle the display of the freebusy with Ajax
3959 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
3960 since the free busy displays 2 days ahead.
3962 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3963 -contactSearchAction]): new action that returns the uid and the
3964 username + email of the user whose name contain the value of the
3965 "search" url parameter.
3967 * SoObjects/Appointments/SOGoAppointmentFolder.m
3968 ([SOGoAppointmentFolder
3969 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
3970 useful for the computing of the status of the freebusy.
3972 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
3973 -init]): new component that incarnates a user selector for events
3974 inspired by the new one found in Thunderbird Lightning.
3976 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3978 * UI/WebServerResources/generic.js: added code to enable or
3979 disable anchor visually (following our internal algorithm).
3981 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
3982 added new "url" ivar with its classic accessors.
3983 ([UIxComponentEditor -urlButtonClasses]): new method that returns
3984 the class strings for the url button on the appointment/task
3985 editor (depending on the validity of the url).
3987 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
3988 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
3989 the template to match the Lightning's new task/appointment editor.
3991 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
3993 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
3995 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3997 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3998 ([SOGoContactLDAPFolder
3999 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
4001 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
4002 iCalEntityObject instances instead of just iCalEvent's.
4004 * SoObjects/Appointments/SOGoAppointmentFolder.m
4005 ([SOGoAppointmentFolder
4006 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
4008 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
4009 bad way of handling ownership that way.
4011 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4012 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
4013 on "cn", just like Mozilla.
4015 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4017 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
4018 "to" should be retained, otherwise it will be autoreleased and a
4021 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4022 -writeAction]): updated method to fetch the card before initing
4025 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4026 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
4029 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
4030 -iCalStringTemplate]): start and due date are now optional.
4032 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4033 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
4034 appropriate accessors to be settable through the templates.
4036 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
4037 new "isDisabled" ivar with appropriate accessors to be
4038 settable through the templates.
4040 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4041 -availableCalendars]): new method that list the calendars to which
4042 the user has subscribed.
4043 ([UIxComponentEditor -componentOwner]): returns the owner of the
4046 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4047 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
4048 quickentries to null whenever each or all of them are null, by
4049 providing an impossible timestamp from with NSNotFound as value.
4051 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4053 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
4054 that handles the creation of new fields with the new APIs and the
4055 new node structure on the page.
4057 * UI/Scheduler/UIxAppointmentEditor.m,
4058 UI/Scheduler/UIxTaskEditor.m:
4059 refactored to user UIxComponentEditor as parent class.
4061 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
4062 containing the methods common to the UIxTaskEditor and the
4063 UIxAppointmentEditor.
4065 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4067 * SoObjects/Appointments/SOGoAppointmentFolder.m
4068 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
4069 the handling of time-ranges.
4071 * UI/WebServerResources/ContactsUI.js: specify a notification type as
4072 parameters when onConfirmContactSelection in invoked.
4074 * UI/WebServerResources/generic.js: specify a notification type as
4075 parameters when onContactRemove in invoked.
4077 * UI/WebServerResources/SchedulerUI.js: when the user deselects
4078 all calendars, select his entry.
4080 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4082 * UI/WebServerResources/SchedulerUI.js: edit and delete events
4083 with their owner-relative urls. Generate a correct entry in the
4084 css color table when a user is added to the calendars list. Put
4085 the same color next to the user id.
4087 * UI/WebServerResources/generic.js: implemented some new helper
4090 * SoObjects/Appointments/SOGoAppointmentFolder.m
4091 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
4092 entries if their owner is not the current user.
4094 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4095 -displayClasses]): return the correct class for the current event
4096 representation depending on its owner.
4098 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
4099 and associate a color for each user login depending on its
4100 position in the list.
4102 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
4103 -currentRowCSSClass]): return the correct class for the current
4104 row depending on the owner of the event.
4106 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4107 -setColors:colors]): new method to associate a color table with
4108 each user in the list.
4110 * SoObjects/Appointments/SOGoAppointmentFolder.m
4111 ([SOGoAppointmentFolder
4112 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
4114 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
4115 NSObject to associate an instance with a user.
4117 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4119 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
4122 * UI/WebServerResources/ContactsUI.js: added handling of
4123 notification of changes to contact selectors.
4125 * UI/WebServerResources/generic.js: added handling of notification
4126 of changes to contact selectors.
4128 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4129 -updateCalendarsAction]): proxy method to update the user
4130 preference table with the new selected calendar uids.
4132 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
4133 -calendarsContactsAction]): new method.
4135 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
4136 ([UIxContactSelector -setHasCheckBoxes:aBool])
4137 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
4138 permit the drawing of checkboxes instead of card icons.
4140 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
4141 wrap a selector the the "Calendars" tab.
4143 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
4144 new user calendar selector.
4146 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4148 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
4149 may cover hour 0 to hour 23.
4151 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4152 -iCalStringFromQueryParameter:format:]): dates explicitly set to
4155 * UI/WebServerResources/SchedulerUI.js: manage both lists of
4156 objects wrt to the toolbar actions.
4158 * UI/WebServerResources/generic.js: added code to the "String"
4159 class to decode number-encoded char entities.
4161 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4162 -batchDeleteAction]): new method to delete selected entries in the
4165 * SoObjects/Appointments/SOGoAppointmentFolder.m
4166 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
4167 that delete identified entries in batch.
4169 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4170 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
4172 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
4173 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4174 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
4175 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4177 return a UIxJSClose component if everything went fine.
4179 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
4182 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
4183 UIxAppointmentEditor.m.
4185 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
4186 a very light page with javascript code to close a window, by
4187 calling a method on the opener if specified. This component is
4188 designed to work as a response to form postings.
4190 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4192 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
4193 SOGoAppointmentObject adapted for the handling of tasks.
4195 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
4196 extracted from SOGoAppointmentObject.
4198 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4199 -saveUrl]): returns the url needed to POST the new form to.
4200 redirect the user to <aptid>/editAsAppointment instead of /edit,
4201 so that SOGoAppointmentFolder can return the correct object type.
4203 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
4204 -compareAptsAscending:_other]): accept empty start or end dates.
4206 * SoObjects/Appointments/SOGoAppointmentFolder.m
4207 ([SOGoAppointmentFolder
4208 -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.
4209 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
4210 components of type "vtodo" as well as "vevent".
4211 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
4212 url specified ends with AsTask or AsAppointment, returns the
4213 an object of the appropriate class, otherwise deduce it from its
4214 content if the HTTP method is "PUT", otherwise read its type from
4217 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4218 -extractQuickFieldsFromTodo:_task]): extract quick fields from
4221 * UI/Scheduler/UIxCalView.m ([UIxCalView
4222 -fetchCoreAppointmentsInfos]): replacement methods for
4223 fetchCoreInfos but by retrieving object with component "vevent".
4224 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
4227 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
4228 UIxCalAptListView adapted for the handling of tasks.
4230 * UI/Scheduler/UIxTaskProposal.[hm],
4231 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
4232 clones of the UIxAppointment* classes for the handling of tasks.
4234 * UI/WebServerResources/UIxTaskEditor.js: clone of
4235 UIxAppointmentEditor adapted for the handling of tasks.
4237 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
4238 Scroll the daily view to the appropriate hour when an appointment
4239 is selected in the appointments list.
4241 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4243 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4244 -setDayStartHour:aStartHour]): specifies the user timezone on the
4247 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
4250 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
4251 ([NSCalendarDate -driftedDate]): methods made useless by a better
4252 comprehension of the NSTimeZone API...
4254 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4256 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
4257 new methods from the NSCalendarDate methods.
4259 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
4260 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
4262 +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).
4263 ([NSCalendarDate -adjustedDate]): this method returns another
4264 instance set to the correct hour after the original date was set
4265 from a non-GMT timezone. This date can be used for storage.
4266 ([NSCalendarDate -driftedDate]): this method does exactly the
4267 opposite of -adjutedDate, that is, it enables the method
4268 hourOfDay, minuteOfHour etc... to return the values according to
4269 the original date's timezone. This date CANNOT be used for storage.
4271 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
4272 -shortDateString]): new method that will return a "short date
4273 string" (yyyymmdd) from a calendar date object.
4275 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4276 -_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.
4278 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
4279 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
4281 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4283 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
4284 view of the day at the height of hour 8:00.
4286 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
4287 ([UIxCalView -dayEndHour]): returns 24.
4289 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
4290 ([UIxContactFoldersView -newAction]): invoke
4291 _selectActionForApplication: on self with the proper attribute too.
4293 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
4294 we now use the action mechanism in UIxContactsListView to keep the
4295 same view for the contact selectors and the regular contact view.
4297 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
4298 UIxContactsListViewContainerBase.[hm]
4300 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
4302 * UI/WebServerResources/generic.js: generalized emailstring
4303 handling functions. Generalized address book access functions.
4305 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4306 -isPopup]): return YES if the "popup" query parameter is set.
4308 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4309 -defaultAction]): keep the url parameters when redirecting.
4310 ([UIxContactFoldersView -selectForSchedulerAction])
4311 ([UIxContactFoldersView -selectForMailerAction]): new action
4312 methods for the /scheduler-contacts and /mailer-contacts invocations.
4314 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
4315 newly available NSString+URL category.
4317 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
4318 -asURLParameters]): handle dictionary entries which could be
4319 instances of NSArray rather than NSString.
4321 * SoObjects/SOGo/NSString+URL.m ([NSString
4322 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
4323 ([NSString -urlWithoutParameters]): new method that returns the
4324 url without its parameters.
4326 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
4328 * SoObjects/SOGo/NSDictionary+URL.[hm],
4329 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
4331 * UI/WebServerResources/UIxMailEditor.js: add support for
4332 additions of different types (to, cc, bcc) of recipients from the
4335 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
4338 * UI/Contacts/UIxContactsMailerSelection.m,
4339 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
4340 UI/Contacts/UIxContactsSelectionView.m to provide a different set
4341 of widgets depending on the application invoking the contact list.
4343 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4345 * UI/WebServerResources/ContactsUI.js: hide the current contact
4346 whenever the user changes of contact folder.
4348 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
4349 now provided by the template when loading the page.
4351 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4352 -iCalPersonWithUid:uid]): new method taken from removed module
4355 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4357 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
4358 -categoriesAsString]): same as below.
4360 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
4361 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
4363 * SoObjects/Appointments/SOGoAppointmentObject.m
4364 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
4365 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
4368 * SoObjects/Appointments/SOGoAppointmentFolder.m
4369 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
4370 hackish test to detect whether the request concernes VEVENT's or
4371 anything else. Return events only in the former case.
4372 ([SOGoAppointmentFolder
4373 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
4374 c_name quickfield so that the calendar list can identify the
4375 appointments with their complete "filename".
4377 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
4378 groupsOfClass:fromSource: to parse the given vcalendar.
4380 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
4382 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
4384 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
4387 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
4389 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4391 * SoObjects/Appointments/SOGoAppointmentFolder.m
4392 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
4393 sensitive to the CalDAV method names.
4394 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
4395 "calendar-query" CalDAV method name.
4397 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
4398 code coming originally from MailerUI.js.
4400 * UI/WebServerResources/UIxContactEditor.js: imitate the
4401 Thunderbird address book by completing the display name with the
4402 content of the first and last name fields, until the display name
4403 is modified manually.
4405 * UI/WebServerResources/generic.js: added a "trim" method to the
4408 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4409 -displayName]): new method that returns the display name from "cn"
4410 or from the "displayName" key if found.
4412 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4413 -initSnapshot]): check if "[card n]" returns anything to avoid a
4416 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
4417 that returns an unparsed doctype definition for the pages.
4419 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4420 -vCard]): set the card's fn to attribute "displayName" if found
4423 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4425 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4426 -vCard]): handle the "streetAddress" and "l" fields.
4428 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
4429 header fields by converting the tables to DIVs and SPANs.
4431 * UI/WebServerResources/generic.css: attempted unification of font
4432 families and size across all the elements. changed the
4433 logConsole's "position" from "fixed" to "absolute" to avoid
4436 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4438 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
4439 empty the contact view when the current contact is being deleted.
4441 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
4442 parse the email field and provide the address full name if found
4443 as the "contactFN" parameter.
4445 * UI/WebServerResources/generic.js (openMailTo): do not give a
4446 name to the opened window so that serveral ones can be opened at
4449 * UI/MailPartViewers/UIxMailPartTextViewer.m
4450 ([UIxMailPartTextViewer -flatContentAsString]): override method by
4451 replacing carriage returns with "<br />" in the result string from
4452 super's implementation.
4454 * UI/Contacts/UIxContactView.m ([UIxContactView
4455 -_urlOfType:aType]): don't manage non-mailto urls through
4456 javascript, let the user decide what's best for him.
4458 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4459 -newAction]): transfer all the query parameters by using the
4460 "asURLParameters"'s result string from [self queryParameters].
4462 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4463 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
4464 query parameters and put their values (if any) into the snapshot.
4466 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
4467 carriage-returns to "<br />".
4468 ([UIxContactView -workCompany]): explicitly initialize company to
4469 nil if org is nil or empty.
4471 * UI/WebServerResources/UIxContactEditor.js: updated validation
4472 code after we added and renamed some fields.
4474 * UI/WebServerResources/ContactsUI.js: added code to cache contact
4475 cards and to handle card updates.
4477 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4479 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
4480 test the length of the returned string since they will never be
4483 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
4484 return self if the process went successful, returns an exception
4485 otherwise (and only otherwise...).
4487 * OGoContentStore/OCSContactFieldExtractor.m
4488 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
4489 adapted method to the new VCard api. Since the cards are stored in
4490 vcard format, we no longer deal with a dictionary but with a
4493 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4495 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
4496 return a string with a "mailto" url.
4497 ([UIxContactView -_urlOfType:aType]): generic method to return a
4498 url string with a html anchor pointing to it.
4500 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
4501 since subclass "UIxContactEditor" did nothing. Implemented code to
4502 display and modify the values parsed from the vcards, displayed in
4503 a way similar to the Thunderbird addressbook.
4505 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4506 -save]): new dummy method.
4508 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4509 -save]): made method void.
4511 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4513 * UI/Contacts/UIxContactView.m: added many wrapper methods to
4514 display blocks of data à la Thunderbird Addressbook. If data is
4515 available, those wrappers (around the NGVCard methods) will
4516 enclose the results in a proper HTML output with the correct label
4517 (if present), otherwise it will return an empty string.
4518 ([UIxContactView -vcardAction]): new action to return the contact
4519 as text/vcard (for exporting).
4521 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4522 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
4524 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4525 -vCard]): create a new NGVCard instance when no data is available
4527 ([SOGoContactGCSEntry -save]): save the vCard using the new
4528 "versitString" API method/message.
4530 * UI/Contacts/UIxContactView.h: separated interface from
4533 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
4534 views and display them beneath the list.
4536 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4538 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
4539 the timezone even when it's the server timezone.
4541 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4542 -privateContacts:inContext:]): no long configure the calendar
4543 object with the user's timezone since it's now accessible
4544 application-wide throught the SOGoObject methods.
4546 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
4547 method. Removed the "backendTimeZone" method.
4549 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
4550 instead of SoComponent.
4552 * SoObjects/Appointments/SOGoAppointmentObject.m:
4553 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
4554 [self serverTimeZone] instead of "EST" (which was removed).
4556 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
4557 "timeZone" ivar and its accessors.
4559 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
4560 centralized method returing the timezone configured in the
4561 userdefaults db or "Canada/Eastern" if missing.
4562 ([SOGoObject -userTimeZone]): new centralized method returing the
4563 timezone of the current user or the server timezone if missing
4564 from the user configuration table.
4566 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4568 * UI/WebServerResources/SchedulerUI.js: implemented caching of
4571 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
4572 return a path based on the object's context instead of the first
4573 level in SOGo's object hierarchy...
4575 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4577 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
4580 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
4581 timezone ([self viewTimeZone]) to the WEMonthOverview component to
4582 avoid a confusion with the days.
4584 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
4587 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
4588 imitate Sunbird's synchronization between the 3 visible views.
4590 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
4591 sure the numbers in dateString are formatted so as to take 4 chars
4592 for the year and 2 for the day and the month, otherwise
4593 NSCalendarDate will return a nil date.
4594 ([UIxComponent -applicationPath]): return a path based on the
4595 object's context instead of the second level in SOGo's object
4598 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4600 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
4601 user's timezone abbreviation to the date string passed as parameter to
4602 NSCalendarDate to generate an accurate date instance. Do the same
4603 when no date is specified and today is chosen.
4605 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
4606 form's time values to integers before comparing them.
4608 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
4609 ([UIxCalAptListView -currentEndTime]): initialize the resulting
4610 dates timezone with [self viewTimeZone].
4612 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
4613 "viewTimeZone" ivar destined to hold an instance of the user's
4615 ([UIxComponent -viewTimeZone]): take the timezone from the user's
4618 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4620 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
4621 rearranged the layout.
4623 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
4624 manage showing and hiding appointment details.
4626 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4627 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
4628 timezone by taking the current user's timezone setting.
4630 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
4632 * SoObjects/Appointments/SOGoAppointmentObject.m
4633 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
4634 set default timezone to EST, although this code should be
4635 rewritten to handle a system and a user default value.
4637 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4638 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
4639 take the values from the hour and minute INPUTs when data is
4640 POSTed since we no longer use the UIxTimeSelector component.
4641 ([UIxTimeDateControl -selectableHours])
4642 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
4643 template SELECTs to display reasonable and acceptable values
4644 instead of all the possibilities.
4646 * UI/WebServerResources/generic.js: adapted code for the new
4647 implementation of the UIxContactSelector component (added a
4648 "remove" button, removed the previous INPUT and replaced them with
4649 links of class "button").
4651 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
4652 UIxTimeDateControl.m.
4654 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
4655 ([UIxCalDayTable -currentAppointmentHour]): new methods that
4656 returns correctly formatted values used as attributes for JS code.
4658 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4659 -initialContactsAsString]): renamed implementation of
4660 initialParticipants.
4661 ([UIxContactSelector -currentContactId])
4662 ([UIxContactSelector -currentContactName]): new methods used when
4663 listing the initial contacts in the widget. Currently, both return
4664 the person's cn but the latter should ultimately return a user
4667 * UI/Contacts/UIxContactSelector.h: separated interface from
4668 UIxContactSelector.m.
4670 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
4671 all javascript code is now put in Scheduler.js/generic.js.
4673 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
4674 moved into NSCalendarDate+Scheduler instead.
4676 * SoObjects/Appointments/SOGoAppointmentFolder.m
4677 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
4678 configure the timezone from SOGoUserFolder when the instance is
4680 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
4681 the value of the new "timezone" ivar.
4683 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4685 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
4686 the date selector in the first page and the container of the
4687 future calendar selector in the second page.
4689 * UI/WebServerResources/generic.js: added code for handling tabbed
4692 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
4693 returns the bundle name associated to the current running product.
4695 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4697 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
4698 exception by invoking a timeout on the opener rather than invoking
4699 the list refresh method.
4701 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
4704 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
4705 ([UIxCalWeekView -prevWeekQueryParameters])
4706 ([UIxCalWeekView -nextWeekQueryParameters])
4707 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
4708 that return the dates relatively to the current day.
4709 ([UIxCalWeekView -lastWeekName])
4710 ([UIxCalWeekView -currentWeekName])
4711 ([UIxCalWeekView -nextWeekName])
4712 ([UIxCalWeekView -weekAfterNextWeekName])
4713 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
4714 methods that returns the label for the corresponding weeks.
4716 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
4717 used by UIxCalDayView and UIxCalWeekView to display the events
4718 occuring in one or more days.
4720 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4722 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
4723 entries in the new "monthMenu" and "yearMenu".
4725 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
4726 method to return the current day as a string formatted depending
4727 on the current locale.
4729 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4730 ([UIxCalAptListView -endDate]): "today" is now the default filter
4731 for displayed events.
4732 ([UIxCalAptListView -currentSerialDay]): new method returning the
4733 date of the current enumerated appointment in serial form
4736 * UI/WebServerResources/SchedulerUI.js: added code to select the
4737 relevant day when an appointment is selected. Added code to popup
4738 a month and a year menu whenever the header entries are clicked in
4739 the calendar widget.
4741 * UI/WebServerResources/generic.js: made addClassName and
4742 removeClassName methods of HTMLElement.
4744 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4746 * UI/WebServerResources/MailerUI.js: fixed the contact creation
4747 from email addresses.
4749 * UI/WebServerResources/generic.js: centralized the search-related
4750 functions here since the same code was used across the 3
4753 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4754 ([UIxCalAptListView -endDate]): return the required dates needed
4755 depending on the value given to the "filterpopup" url parameter.
4757 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
4758 code by invoking UIxComponent's labelForKey:.
4760 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
4761 [self pageResourceManager] instead of [self resourceManager].
4763 * UI/Contacts/UIxContactEditorBase.m: invokes
4764 globallyUniqueObjectId on the clientobject's class instead of the
4765 hardcoded "SOGoFolder".
4767 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4768 -newAction]): redirect the "new" action to the personal (default)
4771 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
4772 +objectWithName:inContainer:]): new constructor.
4774 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4775 -lookupContactWithId:recordId]): always create a contact object,
4776 even if it does not exist.
4778 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4780 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
4781 component that lays out the different components of SOGoCalendar.
4782 Only serves as an Objective-C counterpart to its xml template.
4784 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
4787 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
4788 display a widget to handle the information displayed in the
4789 appointments list. Not currently used, lacks implementation.
4791 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
4792 display a calendar as a dynamic widget from where one can select
4793 the current visible day.
4795 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
4796 extracted from UIxCalInlineMonthOverview.m.
4798 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
4799 calendarPageURL methods. The javascript code is handled by .js
4800 files as much as possible...
4802 * UI/WebServerResources/ContactsUI.js,
4803 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
4806 * UI/WebServerResources/SchedulerUI.js: implemented functions to
4807 handle the new widgets. XmlHTTPRequest code taken from
4810 * UI/WebServerResources/generic.js: put some functions related to
4811 element selections as methods to HTMLElement and HTMLTableElement.
4813 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
4814 display the list of appointments (embodies the code-size of
4815 UIxCalAptListView; answers to the "aptlist" method).
4817 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4819 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
4820 -correctURLAction]): new short action method replacing the method
4821 below by taking far less code.
4823 * SoObjects/Appointments/SOGoAppointmentFolder.m
4824 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
4825 with an action in the view-related code.
4827 * UI/Scheduler/UIxAppointmentEditor.m: invoke
4828 "stringByEscapingHTMLString" on the resulting value to avoid
4829 issues with accented characters.
4830 ([-jsCode]): removed method since the javascript code was merged
4831 into SchedulerUI.js.
4833 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4835 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
4836 new class method that returns an iCalPerson based on the UID given
4839 * UI/Contacts/UIxContactsListViewContainerBase.m:
4840 UIxContactsListViewContainer renamed to serve as a base class for
4841 the contact lists in both the contact editor and the contact
4844 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4845 ([SOGoContactLDAPFolder
4846 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
4847 setUserIdentifier:setRootDN:]): an LDAP field specifying the
4848 loginname of the users can now be specified.
4850 * UI/WebServerResources/generic.js: added code to manage contact
4851 lists through the new implementation of the UIxContactSelector.
4853 * UI/Templates: put the templates related to SchedulerUI in its
4856 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4857 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
4858 entry for "uid" with the field name representing the login name of
4859 the user in the corresponding LDAP branch.
4861 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4863 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4864 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
4865 request is a PUT, always create an entry, even if we're not sure
4868 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4870 * UI/WebServerResources/ContactsUI.js: implemented live-search.
4872 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
4873 -appendSystemSourcesInContext:context]): populated method with
4874 code that creates entries mapped to instances SOGoContactFolder,
4875 based on the configuration found in the NSUserDefaults under the
4876 key "SOGoLDAPAddressBooks".
4877 ([SOGoContactFolders
4878 -lookupName:nameinContext:contextacquire:acquire]):
4879 "contactsources" do not exist anymore, SOGoContactFolder was split
4880 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
4881 and one protocol: SOGOContactFolder, instead.
4882 ([SOGoContactFolders -contactFolders]): new accessor used by the
4883 views of SOGoContactXXXFolder to list the possible sources.
4885 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
4886 defines the methods that UIxContactsView, ..Editor and so on...
4889 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
4890 defines the methods that UIxContactsListViewBase expects as well
4891 as the data fields returned in the contact lists.
4893 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
4894 returns entries an LDAP server. Conforms to the new
4895 SOGOContactFolder protocol.
4897 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
4898 returns a vCard based on contact entries from an LDAP server.
4899 Conforms to the new SOGOContactObject protocol.
4901 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
4902 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
4903 entry for the textual representation of the vCard.
4905 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
4908 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
4909 "SOGoContactObject".
4911 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
4912 method that generates a textual representation of the vcard.
4914 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
4916 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
4917 "SOGoContactFolder".
4919 * SoObjects/Contacts/SOGoContactSource.h,
4920 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
4923 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4924 -singleAttributeWithName:key]): new method that returns the first
4925 object associated with an ldap key (where generally one value is
4928 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
4929 map the entry into an NSDictionary for processing by
4930 UIxContactsListViewBase.m with the least possible overhead.
4932 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
4935 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4937 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4938 -privateContacts:inContext:]): now returns an instance of
4941 * UI/Contacts/UIxContactsListViewContainer.m
4942 ([UIxContactsListViewContainer -contactFolderName]): new method to
4943 return the absolute path to the current contact folder, called
4944 from within the template.
4946 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
4947 JS code to initialize the 'currentContactFolder' generic var.
4949 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
4950 +contactFolderWithSource:inContainer:andName:]): new class
4951 method meant to return an instance connected to the specified
4952 source. Currently useless but won't be anymore in the next few
4955 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
4956 the "lookupFreeBusyObject" method since it does not exist.
4958 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
4959 as a "view" for the SOGoContactFolders object. Does nothing but
4960 redirect the browser to the URL of the personal address book of
4961 the user. It does not even have a template.
4963 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
4964 implementing the SOGoContactSource protocol. Does nothing
4965 currently but will be used to implement access to the personal
4966 address book of the user stored in the SOGo database.
4968 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
4969 protocol defining an API common to all possible types of contact
4972 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
4973 serving as the root of the contact folders available to the
4974 current user. Correctly lists the contact sources in webdav.
4976 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4978 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
4979 -composeAction]): new action method that permits external object
4980 to write a message from the default (primary) account.
4982 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4983 -initSnapshot]): new method with code taken from "defaultAction"
4984 but needed for others.
4985 ([UIxContactEditorBase -writeAction]): new action designed to
4986 compose the correct URL needed to obtain the MailerUI's email
4987 editor with the correct "mailto" parameter.
4989 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
4990 Common so that other modules can use it.
4992 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
4993 easier to manage both ajax and non-ajax requests.
4995 * UI/Contacts/UIxContactsFilterPanel.m: clone of
4996 UIxMailFilterPanel, but applicable to contact lists.
4998 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
4999 -vcardContentFromSOGoContactRecord]): use the new standard methods
5000 created for each type of entry. If a line is determined to not
5001 contain information, it will be skipped.
5003 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
5004 +initialize]): init defaultMailDomain with the user default
5005 "SOGoDefaultMailDomain".
5007 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5009 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5010 -saveAction]): reorganized methods to only have ONE return point.
5011 Invoke saveRecord: directly on the clientObject instead of
5012 saveContentString, which does the same thing anyway.
5014 * SoObjects/Contacts/NSDictionary+Contact.m
5015 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
5016 method to convert the dictionary returned with the user submission
5017 to a record in VCARD format to be stored in the database.
5019 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5021 * UI/WebServerResources/MailerUI.js: when opening the context menu
5022 of the message list, select the message below the mouse cursor and
5023 deselect the other selected messages temporarily. This mimics the
5024 behaviour of Thunderbird for that matter and was already
5025 implemented for the entries of the folder tree.
5027 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
5028 -iconForMenuItem]): new method that returns the fully qualified
5029 relative URL to the icon representing the mailbox, or the default
5030 mailbox icon if needed.
5032 * UI/SOGoUI/UIxComponent.m ([UIxComponent
5033 -urlForResourceFilename:filename]): automatically return an empty
5034 string whenever the filename passed as argument is nil.
5036 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
5037 "desc" parameter set to 1 so that they are sorted in descending
5038 order by default. Also, added "onHeaderClick()", triggered by
5039 clicking on the message list header elements.
5041 * UI/MailerUI/UIxMailSortableTableHeader.m
5042 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
5044 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5045 -isSortedDescending]): defaults to "YES" when the sort order is
5048 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5050 * UI/WebServerResources/MailerUI.js:
5051 - message cache: set the max num of cached messages to 20. Limit
5052 the cached message size to 30000 bytes.
5053 - ajax: when a message request is called while one is already
5054 being performed, the latter will be cancelled. Idem when
5055 retrieving the content of a mailbox.
5056 - folder tree: when a mailbox is selected because of the URL
5057 requested (initMailboxSelection), the dtree is expanded throughout
5058 the mailbox entry's parent hierarchy to ensure it is made visible
5059 when the page is being displayed. (new function: expandUpperTree).
5060 - mailbox loading: when loading a mailbox where a message was
5061 previously selected, we invoke its url with the "pageforuid"
5062 parameter correctly specified. During callback processing, we scan
5063 the table for the related row and reselect it.
5064 Also, the message area is set blank before loading any mailbox.
5066 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5067 -defaultAction]): if the "pageforuid" parameter is passed in the
5068 url, take its value and invoke [self firstMessageOfPageFor:]
5069 consequently to deduce the first message to display. Otherwise,
5070 set it to "idx", otherwise set it to 0.
5071 ([UIxMailListView -firstMessageOfPageFor:]): new method
5072 that determines the first message of the page where the message
5073 passed as parameter is contained.
5075 * UI/WebServerResources/UIxMailListView.js: removed this module,
5076 its code was put in MailerUI.js instead.
5078 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5080 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
5081 which returns the nodes for the parent specified in "parentMenu".
5082 Used to generate the javascript code for the folder dtree.
5084 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
5085 using that container-template are now using UIxMailMainFrame
5086 since UIxMailPanelFrame had no real interest. File removed.
5088 * UI/WebServerResources/dtree.{css,js}: new files to handle
5089 javascript-generated mailbox tree. Modified from original version
5090 by integrating the previous code with the one we are using for
5091 selections and mailbox handling. Minor visual enhancements too...
5093 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5095 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
5096 returned, put it in an NSArray before returning it (fixes
5099 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5101 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
5102 that returns a url string stripped from its "http://hostname"
5105 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
5107 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
5109 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5111 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
5112 -mailDateFormatter]): retrieve the timezone from the user settings
5113 and pass it to the returned dateFormatter. Also, the dateFormatter
5114 is kept in a static variable to avoid useless
5115 creations/destructions.
5117 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
5118 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
5120 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
5121 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
5122 s/Criteria/Text/ to handle the "criteria" form parameter.
5124 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5126 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
5127 to integrate better with the firefox look&feel. Added entries for
5128 the new "menu" DIV class (popup menus).
5130 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
5131 takes any chunk of text as param, detects the user email and the
5132 optional first and last names and return them in a well-formatted
5133 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
5134 namespace conflict. Added "onMenuClick(node, event, menuId)" to
5135 handle popup menus through "onclick" element attributes (node =
5136 this, event = event and menuId = name of the menu DIV id to
5139 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5140 -snapshot]): add an entry for "email" into the snapshot
5141 dictionary if a "contactEmail" URL parameter was detected and if
5142 the entry for "email" is empty.
5144 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
5145 button now invokes the newContact() js function in ContactsUI.js
5146 instead of opening "new" directly. newContact() pops up a window
5147 stripped from its navigation bar.
5149 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
5150 bundle (AddressBook).
5152 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
5153 "menu" and id "addressMenu" have the header email addresses
5154 display it with the new menu code in generic.js.
5156 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
5157 replaced the body tables with a div of class "pageContent"
5158 (standardization across the page templates).
5160 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
5161 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
5162 those are now inherited from UIxPageFrame.
5164 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
5166 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
5167 a "mailto" URL parameter is detected and the "to" array is empty,
5168 initialize "to" with the value of "mailto" before returning it.
5170 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
5171 -composeAction]): rewrote method in a cleaner way and with usage
5172 of the URL extensions to NSString and NSDictionary (see below).
5173 Also, if a "mailto" url parameter is detected, pass it to the
5176 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
5179 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
5180 returns a parameter string to add to a base URL.
5182 * UI/Common/NSString+URL.m ([NSString
5183 -composeURLWithAction:parameters:andHash:useHash]): new method to
5184 compose a complete URL from an object URL with parameters and an
5185 optional '#' character.
5187 * UI/Common/UIxPageFrame.h: separated interface from
5190 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
5192 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
5194 * UI/WebServerResources/generic.js: added code to manage
5195 selections within HTML containers.
5197 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
5198 added method to determine the possible URL for a product-specific
5199 javascript filename of the forme <productname>.js.
5200 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
5201 ([UIxPageFrame -isPopup]): new method to determine whether the
5202 application navigator bar should be displayed (main page) or not
5205 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
5206 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
5207 the user through LDAP.
5209 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5211 * The toolbar code from the MailerUI product was taken, renamed as
5212 "UIxToolBar" and put into UI/Common. Toolbar plists were created
5213 for the Contacts and Scheduler products and put in their respectir
5214 Toolbars/ subdirectories. Finally,
5215 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
5216 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
5217 and an invocation to the UIxToolbar component was put at the top
5218 of UI/Templaces/UIxPageFrame.wox.
5220 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
5221 within the templates whether a separator should be displayed.
5223 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
5224 that returns NO if the toolbar is empty.
5226 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5228 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
5230 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
5231 new toolbar objects.
5233 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
5235 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
5236 linkbanner as a DIV instead of a TABLE.
5238 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
5240 returns 'YES' to request the display of the navigation bar between
5243 2006-06-15 ludovic@inverse.ca
5245 * It's now possible to set the default
5246 domain using for email using the
5247 SOGoDefaultMailDomain preference key.
5249 2006-06-15 ludovic@inverse.ca
5251 * Initial import of SOGo from trunk.