1 2007-11-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -signature]):
4 returns the signature for the default identity of the default
6 ([UIxPreferences -setSignature:newSignature]): accessor that sets
9 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
10 -composeAction]): append the message signature to the new draft.
12 * SoObjects/Mailer/SOGoMailReply.m ([SOGoMailReply -signature]):
15 * SoObjects/Mailer/SOGoMailForward.m ([SOGoMailForward
16 -signature]): new method that takes the user's signature and put
17 it at the end of the message, if exists.
19 * UI/Common/UIxPageFrame.m ([UIxPageFrame -isSuperUser]): new
20 accessor that forwards the call to the active user.
22 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -signature]): returns the
23 user default signature.
24 ([SOGoUser -isSuperUser]): declares whether the user is listed
25 among the super users.
27 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
28 -setComponent:newComponent]): retain the component object.
29 ([UIxComponentEditor -organizerIdentity]): new accessor method to
30 handle list of possible organizers.
32 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
33 -event]): retain the returned event object.
35 * SoObjects/Appointments/SOGoAppointmentObject.m
36 ([SOGoAppointmentObject -saveComponent:newEvent]): reset the
37 organizer only if there are no attendees AND the owner of the
38 component is not the organizer him-/herself.
40 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
41 -toolbar]): rewrote in a way that ensures that each case is
44 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -isEqual:otherUser]): new
47 * UI/Scheduler/UIxTaskEditor.m ([-acceptAction])
48 ([-declineAction]): commented out unused methods.
50 * UI/MailPartViewers/UIxMailPartICalActions.m
51 ([UIxMailPartICalActions -deleteFromCalendarAction]): actually
52 delete the found object.
54 2007-11-18 Ludovic Marcotte <ludovic@inverse.ca>
56 * SoObjects/Mailer/SOGoMailBodyPart.m
57 SoObjects/Mailer/SOGoMailObject.m
58 UI/MailPartViewers/UIxMailPartViewer.m
59 Added support of messages containing non-textual
62 * UI/MailerUI/UIxMailView.m
63 SoObjects/Mailer/SOGoMailObject.m
64 UI/Templates/MailerUI/UIxMailView.wox
65 Added support for the Reply-To header upon
68 2007-11-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
70 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]):
71 invoke saveComponent:.
73 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -hasOrganizer])
74 ([UIxComponentEditor -organizerName]): new template accessor
75 related to displaying the event's organizer.
76 ([-containsConflict:_component]): removed method.
77 ([UIxComponentEditor -takeValuesFromRequest:_rqinContext:_ctx]):
78 set RSVP to "TRUE" on each attendee.
80 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
81 -saveAction]): invoke saveComponent:.
83 * UI/MailPartViewers/UIxMailPartICalViewer.m
84 ([UIxMailPartICalViewer -isLoggedInUserTheOrganizer]): make use of
85 the -userIsOrganizer: category method.
86 ([-isLoggedInUserAnAttendee]): make use of -userIsParticipant:.
87 ([UIxMailPartICalViewer -hasSenderStatusChanged]): new template
88 accessor that determines whether the "Update" button should be
91 * UI/MailPartViewers/UIxMailPartICalActions.m
92 ([UIxMailPartICalActions -deleteFromCalendarAction]): implemented
94 ([UIxMailPartICalActions -updateUserStatusAction]): implemented
97 * UI/Common/UIxPageFrame.m ([UIxPageFrame
98 -setCssFiles:newCSSFiles]): new accessor that enables the
99 sub-templates to specify extra CSS files to load.
101 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
102 -homeFolderInContext:context]): cache the home folder of the user
103 object instead of the current user.
105 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
106 -deleteEntriesWithIds:ids]): invokes the "prepareDelete" optional
107 method if the child object implements it.
109 * SoObjects/SOGo/SOGoContentObject.m ([-setContentString:])
112 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
113 -setBaseDN:newBaseDNIDField:newIDFieldCNField:newCNFieldUIDField:newUIDFieldmailFields:newMailFieldsandBindFields:newBindFields]):
114 take a new "mailFields" parameter defining an array of fields
115 where to look at when searching the user's emails. It defaults to
116 the standard "mail" LDAP field.
118 * SoObjects/Appointments/SOGoAptMailICalReply.[hm]: new
119 SoComponent implementing a template for ITIP replies.
121 * SoObjects/Appointments/iCalPerson+SOGo.m ([iCalPerson
122 -mailAddress]): new method that returns a properly formatted email
123 address for the specified person entry.
124 ([iCalPerson -uid]): new method that tests whether the user is
125 known to the system and if so, returns its user id.
127 * SoObjects/Appointments/iCalPerson+SOGo.[hm]: new category module.
129 * SoObjects/Appointments/iCalEventChanges+SOGo.m
130 ([iCalEventChanges -sequenceShouldBeIncreased]): determine whether
131 the changes involved need a sequence inscrease, based on the
134 * SoObjects/Appointments/iCalEventChanges+SOGo.[hm]: new category
137 * SoObjects/Appointments/iCalEvent+SOGo.m ([iCalEvent
138 -isStillRelevant]): new overriden method determining the relevance
139 of the current event based on its end date.
141 * SoObjects/Appointments/iCalEvent+SOGo.[hm]: new category module.
143 * SoObjects/Appointments/iCalEntityObject+SOGo.m
144 ([iCalEntityObject -attendeeUIDs]): new category methods that
145 returns an array containing the uids of the system-know attendees.
146 ([iCalEntityObject -isStillRelevant]): new template method.
147 ([iCalEntityObject -itipEntryWithMethod:method]): clone the
148 current entry calendar with the specified ITIP method.
149 ([iCalEntityObject -attendeesWithoutUser:user]): returns an array
150 of attendees while making sure the specified user is not listed.
152 * SoObjects/Appointments/SOGoCalendarComponent.m
153 ([SOGoCalendarComponent -calendar:create:secure]): new name for
154 -calendar:. Added a "secure" parameter that specifies whether a
155 stripped calendar instance is needed or not. Also, we no longer
156 cache the content to simplify handling of new data.
157 ([SOGoCalendarComponent -component:create:secure]): same as above.
158 ([SOGoCalendarComponent
159 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
160 test whether the component is "still relevant" before sending an
162 ([SOGoCalendarComponent -sendResponseToOrganizer]): new method for
163 sending ITIP replies.
164 ([SOGoCalendarComponent -getUIDsForICalPerson:iCalPerson]):
165 removed method. Replaced with -[iCalPerson uid] category method.
167 * SoObjects/Appointments/SOGoAppointmentObject.[hm]: rewrote
168 class. No longer override saveContentString:,
169 saveContentString:baseSequence:, .... Implemented the
170 saveComponent: and the prepareDelete methods instead. Those
171 methods are called only from the web methods. This avoids the
172 risks related to email sending and changes propagation.
174 * UI/Common/UIxTabItem.m: removed useless class module.
176 * UI/Common/UIxTabView.[hm]: removed useless class module.
178 * UI/Common/UIxPrintPageFrame.m: removed useless class module.
180 * UI/Common/UIxAppNavView.m: removed useless class module.
182 2007-11-16 Ludovic Marcotte <ludovic@inverse.ca>
184 * SoObjects/Mailer/SOGoMailBaseObject.m
187 * SoObjects/Mailer/SOGoMailBodyPart.m
188 We also grok image/jpeg and return the SOGoMailBodyPart
189 for attachments fetching.
191 * SoObjects/Mailer/SOGoMailObject+Draft.m
192 Prevent a crash in case body decoding failed during
195 * SoObjects/Mailer/SOGoMailObject.m
196 Improved body decoding during a reply to also try
197 latin1 as an encoding.
199 * UI/MailPartViewers/UIxMailRenderingContext.m
200 Greatly improved the display mechanisms for emails.
201 Also properly consider the content disposition for
204 * UI/MailerUI/UIxMailToSelection.m
205 Removed worthless code.
207 * UI/WebServerResources/MailerUI.css
208 CSS fix for table views.
210 2007-11-15 Ludovic Marcotte <ludovic@inverse.ca>
212 * UI/WebServerResources/MailerUI.js
213 We now check for empty selection and warn the
214 user about it when deleting messages
216 * SoObjects/Mailer/SOGoDraftObject.m
217 Correctly check for the presence of a subject
218 before attempting to forward a message from
221 * SoObjects/Mailer/SOGoMailObject+Draft.m
222 We no longer use "[Fwd: ]" but simply "Fwd:"
223 when forwarding email messages.
225 * SoObjects/SOGo/SOGoUser.m
226 Modified the default forwarding format to be
227 inline instead of "attachment".
229 * SoObjects/Mailer/SOGoDraftObject.m
230 We now create and use a NGMimeContentDispositionHeaderField
231 in order to avoid encoding the whole Content-Disposition
232 header in case a non-ASCII char is present!
234 2007-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
236 * SoObjects/SOGo/iCalEntityObject+Utilities.m ([iCalEntityObject
237 -findParticipant:user]): new method based on the one removed from
238 SOGoCalendarComponent below.
240 * SoObjects/SOGo/iCalEntityObject+Utilities.[hm]: new category
241 module for iCalEntityObject.
243 * SoObjects/Appointments/SOGoCalendarComponent.m
244 ([-findParticipant:user]): removed method.
246 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
247 -setContentString:newContent]): new accessor method.
249 -saveContentString:newContentbaseVersion:newBaseVersion]): invoke
250 -[self setContentString:].
252 * UI/MailPartViewers/UIxMailPartICalViewer.m
253 ([UIxMailPartICalViewer -authorativeEvent]): returns the most
255 ([-isLoggedInUserTheOrganizer]): make use of -[SOGoUser
258 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
259 -stringByConvertingCRLNToHTML]): fixed crashes due to overflows in
260 temporary buffer we are handing.
262 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
263 -setComponent:newComponent]): check that newComponent is non-nil
264 before replacing the default values.
265 ([UIxComponentEditor -calendarList]): privacy is already an ivar.
266 We don't need to refetch it.
268 2007-11-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
270 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
271 -fetchMailForReplying:sourceMailtoAll:toAll]): remove the current
272 user from the list of recipients and make sure no other address is
275 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
276 -stringByConvertingCRLNToHTML]): build the returned NSString
277 without the ending \0.
279 2007-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
281 * UI/MailPartViewers/UIxMailPartICalViewer.m
282 ([UIxMailPartICalViewer -acceptLink])
283 ([UIxMailPartICalViewer -declineLink])
284 ([UIxMailPartICalViewer -tentativeLink]): removed useless methods.
286 * UI/MailPartViewers/UIxMailPartICalAction.m
287 ([UIxMailPartICalAction -addToCalendarAction])
288 ([UIxMailPartICalAction -deleteFromCalendarAction]): new stub
291 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
292 -lookupImap4BodyPartKey:]): make use of the new method below.
294 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
295 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): new method
296 that returns an appropriate Class depending on a given mime type.
298 * UI/SOGoUI/UIxComponent.m ([UIxComponent -canCreateOrModify]):
299 new boolean accessor that determines whether someone can create
300 (i.e. modify a new entry) or modify an existing entry.
302 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
303 -lookupName:lookupNameinContext:localContextacquire:acquire]):
304 overriden method to bind looked up keys to So methods but by
305 avoiding a call to toOneRelationshipKeys. This will be the top
306 method of the chain, meant to override SoObject's behaviour.
308 * SoObjects/Contacts/SOGoContactLDAPFolder.m
309 ([SOGoContactLDAPFolder
310 -lookupName:objectNameinContext:lookupContextacquire:acquire]):
311 removed hack to prevent [super lookupName...] to read the entire
312 LDAP directory when looking up a record.
314 2007-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
316 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
317 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
320 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
321 ([UIxMailPartHTMLViewer -_attachmentIds]): the reference was one
322 character too short, which cause the images not to be displayed
323 sometimes and crashes to happen whenever the references on a
324 message were wrong (due to bugs in SOPE).
326 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
327 -hasMessageAttachment]): consider an attachment any content that
328 has a non-nil disposition.
330 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
331 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
332 fixed method to make use of the parameters instead of the useless
333 remains that weren't even initialized.
335 * SoObjects/Appointments/SOGoAppointmentObject.m
336 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
337 don't propagate the event among the attendees if this is not an
339 ([SOGoAppointmentObject -deleteWithBaseSequence:]): same as above.
341 * Main/SOGo.m ([SOGo -authenticatorInContext:context]): make use
342 of the new category method below.
344 * SoObjects/SOGo/WORequest+SOGo.m ([WORequest
345 -handledByDefaultHandler]): new method that returns whether this
346 is an "so" or alike request.
348 * SoObjects/SOGo/WORequest+SOGo.[hm]: new category module.
350 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
351 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
352 write the new folder's name in the folder cache.
354 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
355 -calendars]): same as below.
357 * UI/Contacts/UIxContactsListViewContainer.m
358 ([UIxContactsListViewContainer -currentContactFolderName]):
359 translate the display name if its the default one.
361 * SoObjects/Appointments/SOGoAppointmentFolder.m
362 ([SOGoAppointmentFolder -create]): overriden method that invokes
363 its ancestor and then activate itself within the user settings.
365 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
366 -appendPersonalSources]): when the user is the owner of the
367 current folder, we create the "personal" folder if it doesn't
368 exist by invoking "create".
370 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
371 -primaryFetchProfile]): when no row is returned, we initialize
372 "values" to a new dictionary. This solves a bug where the defaults
373 would not be initialized properly.
375 2007-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
377 * SoObjects/SOGo/SOGoGCSFolder.m ([-compare:otherFolder]): method
378 moved into the SOGoFolder class.
380 * SoObjects/Appointments/SOGoAppointmentObject.m
381 ([SOGoAppointmentObject -saveContentString:_iCalinUIDs:_uids]):
382 simplified method by directly building a similar appointment
383 object with the current folder as container.
385 * SoObjects/Contacts/SOGoContactLDAPFolder.m
386 ([SOGoContactLDAPFolder
387 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
388 take the content of an object returned by
389 lookupName:inContext:acquire: instead of the dictionary passed as
390 parameter since it represents a flattened entry return by
391 lookupContactsWithFilter...
393 * SoObjects/Contacts/SOGoFolder+CardDAV.m: NSObject+CardDAV
394 category renamed to SOGoFolder+CardDAV.
396 * SoObjects/SOGo/SOGoParentFolder.m: no longer a subclass of
397 SOGoObject, but of SOGoFolder instead.
399 * SoObjects/SOGo/SOGoUserFolder.m: no longer a subclass of
400 SOGoGCSFolder, but of SOGoFolder instead.
402 * SoObjects/Appointments/SOGoAppointmentFolder.m
403 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): fixed
404 to take the new SOGoParentFolder class into account. Also, create
405 the personal folder if it doesn't exist.
407 * SoObjects/SOGo/SOGoFolder.[hm]: new class module implementing
408 the parent of all SOGo containers.
410 * SoObjects/SOGo/SOGoGCSFolder.[hm]: SOGoFolder class renamed to
413 2007-11-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
415 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection
416 -getAddressesFromFormValues:_dict]): take NSString and NSArray
417 values. Ignore addresses with a length of 0.
419 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -mailAccounts]): we now
420 fetch the accounts from the user defaults and create default
423 2007-11-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
425 * UI/MailPartViewers/UIxMailPartTextViewer.m
426 ([UIxMailPartTextViewer -flatContentAsString]): re-added
427 conversion of line-break to sequences of HTML "BR", with a fast
430 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
431 -flatContentAsString]): simplified method now that we know
432 -[NSString stringWithData:usingEncodingNamed:] has a more robust
435 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
436 -showToAddress]): the answer is cached.
438 * UI/Common/UIxObjectActions.m ([UIxObjectActions +initialize]):
439 read "SOGoACLsSendEMailNotifications" from the user defaults to
440 determiner whether to send an email when a user is added or
441 removed from an object's acl.
443 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
444 -contentForEditing]): make sure the htmlContent flag is set to NO
445 when we select the textual part. Also we select only the relevant
448 * UI/MailerUI/WOContext+UIxMailer.m ([-mailSubjectFormatter]):
451 * UI/MailerUI/UIxMailView.m ([UIxMailView -messageSubject]): new
452 method replacing -objectTitle, written like the ones below.
454 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
455 -messageSubject]): rewrote method to act the one below.
457 * UI/MailPartViewers/UIxMailPartMessageViewer.m
458 ([UIxMailPartMessageViewer -messageSubject]): new method that
459 returns the decoded mail subject or "Untitled" if the subject is
462 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
463 -decodedSubject]): new method that invoke -decodedSubject from the
464 NSString and NSData class, depending on the identity of the
465 subject obtained from the envelope.
467 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
468 -subjectForReply]): take the value of -[SOGoMail decodedSubject]
469 instead of the subject of the envelope.
470 ([SOGoMailObject -filenameForForward]): same as above.
471 ([SOGoMailObject -subjectForForward]): same as above.
473 * SoObjects/Mailer/NSString+Mail.m ([NSString -decodedSubject]):
474 same as below for NSString.
476 * SoObjects/Mailer/NSData+Mail.m ([NSData -decodedSubject]): new
477 method that decodes the subject of a mail taken as an NSData
478 instance. Handling the exceptions and the badly formatted headers.
480 * UI/MailerUI/UIxSubjectFormatter.[hm]: dropped class module.
482 2007-11-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
484 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
485 -deleteEntriesWithIds:ids]): make sure the objects returned by
486 lookupName:... are not instances of NSException.
488 2007-11-03 Ludovic Marcotte <ludovic@inverse.ca>
490 * UI/Scheduler/UIxAppointmentEditor.m
491 Fixed monthly recurrences support.
493 2007-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
495 * SoObjects/Appointments/SOGoAppointmentObject.m
496 ([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
497 sent when modifying an event, when the event was considered
498 relevant. The same thing is now implemented for event deletion.
500 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
501 -primaryFetchProfile]): make sure that the deserialized "values"
502 is an instance of NSMutableDictionary, otherwise we override it
505 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
506 -contentForReply]): make use of the SOGoMailReply WO page.
508 * SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
509 from SOGoMailForward to handle mail replies instead. Only three
510 methods remaining: date, from and messageBody. The latter is
513 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
514 -fetchMailForForwarding:sourceMail]): fetch attachments for
517 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
518 -hasMessageAttachment]): initialize hasAttachment with "NO" to
519 avoid false positives.
521 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
522 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
523 set title to an empty string where the event/task summary is null.
525 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
526 -setHeaders:newHeaders]): make sure there is a message id in the
527 headers dictionary, if not, generate one.
528 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
529 message id from the existing draft.
530 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
531 message id in the header map.
533 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
534 -deleteFolderAction]): no longer prefix the target folder with
537 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
538 -listMailboxesAction]): base the folder type on the folder
541 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
542 -lookupName:_keyinContext:acquire:_acquire]): compare the full
543 traversal to the potential looked up folder with the special
544 folder names and return an object with the appropriate
545 SOGoMailFolder subclass.
547 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
548 -traversalFromMailAccount]): don't prepend the whole string with
551 * SoObjects/Mailer/SOGoMailAccount.m
552 ([-lookupSentFolder:_keyinContext:_ctx])
553 ([-lookupDraftsFolder:_keyinContext:_ctx])
554 ([-lookupTrashFolder:_keyinContext:_ctx])
555 ([-lookupFiltersFolder:_key:_ctx]): removed methods.
556 ([SOGoMailAccount -inboxFolderNameInContext:])
557 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
558 ([SOGoMailAccount -sentFolderNameInContext:])
559 ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
560 the resulting name with "prefix" since we might return a nested
562 ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
563 names with "/". Sorts the resulting folder list with
564 localizedCaseInsensitiveCompare: instead of
565 caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
566 that were removed, instead, we choose the appropriate class
567 depending on the folder name. And since we are in SOGoMailAccount,
568 we don't have to compute a traversal path to match the key with
571 -folderWithTraversal:traversalandClassName:className]): new method
572 that returns an instance of the specified SOGoMailFolder subclass,
573 based on the traversal path passed as parameter.
574 ([SOGoMailAccount -inboxFolderInContext:_ctx])
575 ([SOGoMailAccount -draftsFolderInContext:_ctx])
576 ([-sentFolderInContext:_ctx])
577 ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
578 -folderWithTraversal:andClassName: method described above.
580 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
581 -primaryFetchProfile]): make use of -[NSPropertyListSerialization
582 propertyListFromData:mutabilityOption:format:errorDescription:] to
583 deserialize the plist. Removed variant for libFoundation since it
584 should support the above.
585 ([AgenorUserDefaults -generateSQLForInsert])
586 ([AgenorUserDefaults -generateSQLForUpdate]): make use of
587 -[NSPropertyListSerialization
588 dataFromPropertyList:format:errorDescription:] to serialize the
589 plist. Removed variant for libFoundation since it should support
590 the above. Escape the backslashes from the resulting string.
592 2007-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
594 * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
595 SOGoMailFolder: SOGoMailSpecialFolder.
597 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
598 -traversalFromMailAccount]): overridden method that returns the
599 initialized mutable string.
600 ([SOGoMailAccount -allFolderPaths]): take the special folder paths
601 with -traversalFromMailAccount and reposition them at the
602 beginning of the list. By creating the special folders during that
603 request, we also make sure that the folder exists thanks to the
604 new initialisation method of the new "SOGoSpecialMailFolder"
606 ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
608 ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
610 ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
611 longer use lookupImap4Folder.
612 ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
615 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
616 -traversalFromMailAccount]): new method that returns the full
617 IMAP4 path to the object.
619 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
620 "superUsernames" after fetching it from the ud.
622 2007-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
624 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
625 -eventsListAction]): substitude the start and end date with their
626 UTC counterpart, taking into account the offset from UTC related
627 to those dates instead of the current one. This renders
628 -[UIxCalMainView -userUTCOffset] obsolete because the computings
629 that occured in javascript are now done server-side.
631 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
632 removed obsolete method.
634 * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
635 method converting html content to plain text.
637 * SoObjects/Mailer/NSString+Mail.[hm]: new category module
638 enhancing NSString with utility methods pertaining to mail handling.
640 * SoObjects/Mailer/SOGoMailObject.m
641 ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
643 -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
644 modified method to be always recursive and to take an array of the
645 accepted mime-types as parameter. The returned array now contains
646 the mime-type as well as the part keys.
648 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
649 -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
650 ([SOGoMailObject -contentForEditing]): rewrote method to take into
651 account the first text/plain part or the first text/html part
652 converted to text/plain with our new -[NSString htmlToText]
655 * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
656 "replyToAll:" with YES as parameter instead of NO.
658 2007-10-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
660 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
661 -davContentType]): ignore any possible parameter taken from the
662 mime-info of the body part.
664 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
665 -lastFirstMessageNumber]): new accessor that returns the first
666 message number of the last series of messages.
667 ([UIxMailListView -fetchKeys]): request the bodystructure for each
669 ([UIxMailListView -hasMessageAttachment]): extract the attachment
670 information from the message bodystructure.
672 2007-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
674 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
675 -GETAction:]): use the "application/octet-stream" mime type for
676 elements of type "application/x-xpinstall" to avoid confusing
679 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
680 ([UIxPreferences -itemMessageCheckText])
681 ([UIxPreferences -userMessageCheck])
682 ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
683 methods for handling the retrieval of new messages automatically.
685 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
686 that returns the interval of time between automatic message
689 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
690 -defaultAction]): now expunges the last folder marked for expunge.
692 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
693 -trashInContext:_ctx]): now marks the container folder for
696 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
697 -markForExpunge]): new method that marks the folder for the next
698 automatic expunge operation in the user settings.
699 ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
700 takes the last folder marked for expunge, expunges it and removes
701 it from the user settings, if it exists.
703 2007-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
705 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
706 -messageSubjectCellStyleClass]): added support for replied,
707 forwarded, forwarded and replied mails.
709 * SoObjects/Mailer/NSData+Mail.m ([NSData
710 -bodyDataFromEncoding:encoding]): new utility method that decodes
711 the NSData instance properly depending on the encoding string
714 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
715 -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
717 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
718 -stringForData:_datapartInfo:_info]): simplified by invoking
719 -bodyDataFromEncoding: from our new NSData category methods.
721 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
722 -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
723 where only the body part of the first of the keys fetched was
724 returned. Also decodes the body parts properly following their
727 * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
728 extends the NSData class with utility methods useful for handling
731 2007-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
733 * SoObjects/SOGo/NSArray+Utilities.m
734 ([NSArray -stringsWithFormat:format]): replace instances of NSNull
737 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
738 -keysWithFormat:keyFormat]): replace instances of NSNull with
741 * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
742 empty, use "c_cn" instead.
744 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
745 ([SOGoMailAccount -draftsFolderInContext:_ctx])
746 ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
747 of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
748 no always be specified from the root instead of sometimes from the
751 2007-10-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
753 * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
754 ([UIxPageFrame -productLocalizableStrings]): invoke the new
755 +[SOGoUser language] method if the user is nil.
757 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
758 that returns any generically-found language.
759 ([SoUser -language]): modified to call the above.
760 ([SOGoUser -language]): modified to call the above if the user
761 language has a null length.
763 * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
764 -davEntityTag]): modified to return the "hash" of the vCard string.
766 * UI/MailerUI/UIxMailActions.m ([UIxMailActions
767 -removeAllLabelsAction]): new method that removes all label flags
768 from the associated message.
769 ([UIxMailActions -addLabel1Action]
770 [UIxMailActions -addLabel2Action]
771 [UIxMailActions -addLabel3Action
772 [UIxMailActions -addLabel4Action]
773 [UIxMailActions -addLabel5Action]): new methods that adds label
774 flags to the associated message.
775 ([UIxMailActions -removeLabel1Action]
776 [UIxMailActions -removeLabel2Action]
777 [UIxMailActions -removeLabel3Action
778 [UIxMailActions -removeLabel4Action]
779 [UIxMailActions -removeLabel5Action]): new methods that removes
780 label flags from the associated message.
782 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
783 new accessor that returns the labels associated with the message.
785 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
786 -allFolderPaths]): new method that returns all the paths of all
787 the subfolders of the folder object.
788 ([SOGoMailFolder -allFolderURLs]): new method replacing
791 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
792 -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
793 role from its parent folder.
795 2007-10-19 Francis Lachapelle <flachapelle@inverse.ca>
797 * SoObjects/SOGo/SOGoUser.m
798 ([SOGoUser -rolesForObject:objectinContext:context]): allow
799 multiple super usernames to be defined. The user default
800 SOGoSuperUsername is renamed SOGoSuperUsernames and must be
803 2007-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
805 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
806 -userInContext:]): override the super method by returning
807 anonymous if the super returns nil.
809 * UI/Common/UIxPageFrame.m ([UIxPageFrame
810 -productLocalizableStrings]): new method that returns the
811 product-specific translation dictionary as a JSON hash.
812 ([UIxPageFrame -commonLocalizableStrings]): same as above but for
813 the "Common" framework.
814 ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
815 the requestor components to require additional Javascript files.
816 This is useful now that all the scripts are loaded at the end of
818 ([UIxPageFrame -additionalJSFiles]): new getter related to the
821 2007-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
823 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
824 implemented new web method.
826 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
827 -copyToFolderNamed:folderNameinContext:]): new method with the
828 code cut/pasted from -moveToFolderNamed:inContext:.
829 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
830 modified to use the code from -copyToFolderNamed:inContext:, which
831 is common between the two actions.
833 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
834 ([SOGoMailAccount -sentFolderNameInContext:])
835 ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
836 the user settings into account.
838 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
839 ([UIxMailFolderActions -setAsSentFolderAction])
840 ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
841 that change the purpose of the active folder to "Sent", "Drafts"
844 * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
845 returns the subject as quoted-printable.
847 * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
848 SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
849 the "aclMethod" method for the subsequent language-dependent
852 * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
853 returns the subject as quoted-printable.
855 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
856 -dealloc]): release item, aptStartDate and aptEndDate.
858 2007-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
860 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
861 -initWithName:newNameinContainer:newContainer]): the owner of a
862 shared folder is set to "nobody" by default.
864 * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
865 that returns whether the object has an owner or not.
867 2007-10-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
869 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
870 the folder even if the current user is not its owner.
872 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
874 * We now send advisory emails when folders
875 are created / deleted.
877 * Fixed the sending of advisory emails upon
878 ACL changes on folders.
880 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
882 * UI/Scheduler/UIxComponentEditor.m
883 Implemented event/task priority support.
885 * SoObjects/Contacts/SOGoContactGCSFolder.m
886 Added CardDAV support.
888 * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
889 Implemented From: based on LDAP results based on
890 the MailFieldNames attribute (an array) specified
891 in every LDAP-based authentication sources.
893 * UI/MailPartViewers/UIxMailPartTextViewer.m and
894 UI/WebServerResources/MailerUI.css
895 We avoid replacing "\r\n" and "\n" with <br /> and
896 rather use CSS capabilities for proper formatting.
897 This is _WAY_ faster on very large mails.
899 2007-10-10 Francis Lachapelle <flachapelle@inverse.ca>
901 * UI/Scheduler/UIxComponentEditor.m
902 ([UIxComponentEditor -componentCalendar]): returns the calendar
903 object of the current event.
905 2007-10-05 Ludovic Marcotte <ludovic@inverse.ca>
907 * UI/WebServerResources/MailerUI.js
908 We check if at least one message is selected
909 before performing a Reply/Reply All/Forward
911 * SoObjects/Appointments/SOGoAppointmentFolder.m
912 and others - implemented support for recurring
913 events (with some known limitations right now,
914 all soon to be fixed).
916 2007-10-04 Francis Lachapelle <flachapelle@inverse.ca>
918 * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
919 the constraint that a username can't start with a digit.
921 2007-10-02 Francis Lachapelle <flachapelle@inverse.ca>
923 * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
924 repository to Inverse's branch.
926 2007-09-28 Francis Lachapelle <flachapelle@inverse.ca>
928 * SoObjects/Mailer/SOGoDraftObject.m
929 ([SOGoDraftObject -isValidAttachmentName:_name]): removed
930 constraint on space in file name.
931 ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
932 now removes from file name all characters preceding a backslash.
933 This happens with IE7 because the complete attachment file path
936 2007-09-25 Francis Lachapelle <flachapelle@inverse.ca>
938 * SoObjects/Appointments/SOGoAptMailNotification.m
939 ([SOGoAptMailNotification -appointmentURL]): set personal as the
940 default calendar where to add the event.
942 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
943 activate the SOGoUIxDefaultModule user defaults.
945 2007-09-21 Francis Lachapelle <flachapelle@inverse.ca>
947 * UI/SOGoUI/UIxComponent.m
948 ([UIxComponent -shortUserNameForDisplay]): returns the string
949 "wrongusernamepassword" when authentication failed.
951 2007-09-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
953 * UI/MailPartViewers/UIxMailPartICalViewer.m
954 ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
955 entry of the Calendars parent folder.
957 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
958 -messageSubject]): new accessor method to work-around a problem
959 within SOPE where a subject could be returned as an NSData.
961 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
962 -appendPersonalSources]): make sure the value of the "c_path4" of
963 the returned rows are not NSNull, otherwise, discard them.
965 2007-09-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
967 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
968 -compare:otherFolder]): new overriden method that compares two
969 contact foldes based on their class and then transfer the control
970 to the super method in SOGoFolder.
972 * SoObjects/Contacts/SOGoContactLDAPFolder.m
973 ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
974 compare two contact folders based on their class and then their
977 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
978 new method for sorting folders. The folders are compared based on
979 their ownership, whether they are a main folder and finally
980 depending on their display name.
982 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
983 -pathArrayToSOGoObject]): do not reorder the paths if the third
984 element is an instance of NSNull.
986 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
987 -subFolders]): returns a sorted array using the "compare:"
990 2007-09-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
992 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
993 -calendars]): also returns the owner of the listed folders.
995 * SoObjects/Appointments/SOGoAppointmentFolder.m
996 ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
998 * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
999 method into UIxFolderActions.
1001 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1002 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
1003 freebusy info from the "personal" calendar.
1005 * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
1006 -createFolderAction]): new standardized method for requesting
1007 folder creations among gcs-based modules.
1009 * UI/Common/UIxParentFolderActions.[hm]: new action class module.
1011 * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
1012 module, equivalent to the SOGoParentFolder's child
1013 SOGoContactFolders, but for calendars.
1015 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
1016 method that returns translated strings for controller bundles
1017 (same as what UIxComponent does for view bundles).
1018 ([SOGoObject -pathArrayToSOGoObject]): new method that returns
1019 the real path to a subscribed folder (if subscribed).
1020 ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
1021 ([SOGoObject -globallyUniqueObjectId]): new instance method
1022 calling its class equivalent.
1024 2007-09-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1026 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
1027 whether the user is logged in and if so, redirect to his/her
1029 ([SOGoRootPage -appendToResponse:inContext:]): removed useless
1032 2007-09-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1034 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1035 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1037 ([SOGoFolder -displayName]): new method.
1038 ([SOGoFolder -delete]): accept to proceed only if nameInContainer
1041 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1042 ([SOGoContactLDAPFolder
1043 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1044 renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
1046 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1047 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1048 removed method, reimplemented in SOGoFolder.
1049 ([SOGoContactGCSFolder -displayName]): removed method,
1050 reimplemented in SOGoFolder.
1051 ([-delete]): removed method, modified in SOGoFolder.
1053 * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
1054 a subclass of SOGoParentFolder.
1056 * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
1057 from SOGoContactFolders and modified to be more content-independent.
1059 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
1060 ([UIxMailActions -markMessageReadAction]): new methods moved from
1061 UIxMailListView and adapted to invoke the client object directly,
1062 since the previous versions had to to a lookup from the parent
1065 * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
1066 method into UIxMailActions.
1067 ([-markMessageReadAction]): same as above.
1068 ([-viewAction]): removed useless method.
1069 ([-javaScriptOK]): removed useless method.
1070 ([-isJavaScriptRequest]): removed useless method.
1071 ([-lookupActiveMessage]): removed useless method.
1073 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1074 -responseWithStatus:status]): new method that returns a WOResponse
1075 initialized with the specified status code.
1076 ([WODirectAction -responseWith204]): new method that invokes the
1077 above one with "204" as parameter.
1078 ([WODirectAction -redirectToLocation:newLocation]): rewrote method
1079 to make use of -responseWithStatus:.
1081 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
1082 method that returns a WOResponse initialized with the 204 status
1085 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
1086 always use a "not deleted" search qualifier along with the user
1087 qualifier (if present).
1089 2007-09-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1091 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1092 -contactSearchAction]): only return the records which have an
1095 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1096 -trashInContext:_ctx]): no longer expunge the mailbox after
1097 marking a message deleted.
1098 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
1101 * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
1102 ([-trashAction]): moved method into UIxMailActions.
1103 ([-moveAction]): moved method into UIxMailActions.
1105 2007-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1107 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1108 ([_UIxHTMLMailContentHandler
1109 -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
1110 comments from the CSS code, do not add the CSS code to the body
1111 content and remove references of body from the CSS declarations.
1112 ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
1113 ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
1114 common with cssContent in a different method and invoke it only
1117 * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
1118 instead of UIxPageFrame.
1120 2007-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1122 * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
1123 ([-appendToResponse:responseinContext:ctx]): commented out.
1124 ([SOGoRootPage -connectURL]): new accessor that returns the full
1125 url the the "connect" method.
1126 ([-connectAction]): rewrote method to return a properly formatted
1127 auth. cookie based on the username and password passed as
1130 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1131 set the value of the cookie to "discard" and set its expiration
1134 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1135 -preprocessCredentialsInContext:context]): consider the user
1136 anonymous if the cookie value is "discard".
1137 ([SOGoWebAuthenticator
1138 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1139 set the expiration date of the cookie to yesterday.
1141 * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
1142 returns the path to the application if the clientObject is not a
1145 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
1146 moved the requirement of authentication from the SOGo application
1149 * SoObjects/Appointments/SOGoAppointmentObject.m
1150 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
1151 check whether the new appointment object is still relevant before
1152 sending a notification.
1154 2007-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1156 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1157 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1158 render the login page through the SoDefaultRenderer.
1160 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
1161 -isPublicInContext:localContext]): new overriden method that
1164 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1165 -currentCalendarLogin]): replace css-unsafe characters with _.
1167 * UI/SOGoUI/UIxComponent.m ([UIxComponent
1168 -shortUserNameForDisplay]): simplified method.
1169 ([-user]): removed method since [context activeUser] is as useful.
1171 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1173 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1174 set the cookie path to "/".
1176 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
1177 authenticator based on the request handler key. "dav" returns the
1178 SOGoDAVAuthenticator, anything else returns the Web authenticator.
1180 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
1181 "SOGoAuthenticator".
1183 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
1184 implementing a subclass of SoCookieAuthenticator, designed for
1185 web-based cookie authentication of users.m
1187 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1188 new method that resets the authentification cookie.
1190 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1192 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
1193 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
1194 didBind to NO to make sure no false authentication is returned if
1195 the bind operation is not executed.
1197 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1199 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
1200 "In-Reply-To" header field when replying.
1202 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
1203 table field names that are queried.
1205 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1206 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
1207 add the "c_" prefix to the quick table field names that are
1210 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1212 * SoObjects/Appointments/SOGoAppointmentFolder.m
1213 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
1214 "personal" to the ocs path of the appointment folder.
1216 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1217 -flatContentAsString]): use latin1 when the encoding is not
1218 specified, and to reencode data chunk which were not correctly
1219 decoded with the original charset.
1221 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
1222 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
1223 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
1224 ([SOGoAppointmentFolder
1225 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
1226 override those methods to use the "personal" additional directory.
1228 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
1229 append "/personal" to the calendar path to simulate a single
1230 calendar in a choice of many.
1232 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1233 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
1234 methods back here. Moved the folder existence check here, and do
1235 it on self only when the lookup happens for a non-folder object.
1236 This permits to accept entries for folders with parents who
1239 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1241 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1242 -shouldTakeValuesFromRequest:requestinContext:context]): same as
1245 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1246 -shouldTakeValuesFromRequest:requestinContext:context]):
1247 redesigned method since any method called can be received from a
1248 POST or a GET. Instead we check the method call itself and we
1249 accept only if it has the "save" prefix.
1251 * SoObjects/Appointments/SOGoAptMailNotification.m
1252 ([SOGoAptMailNotification -getSubject]): returns the subject an a
1253 quoted-printable encoded string, if needed.
1255 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1256 -asQPSubjectString:encoding]): moved method into
1257 NSString+Utilities.m.
1259 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1261 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1262 -messageForwardingList])
1263 ([UIxPreferences -itemMessageForwardingText])D
1264 ([UIxPreferences -userMessageForwarding])
1265 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
1266 new template methods for manage the user preference regarding
1269 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
1270 algorithm to return, in order, the user's defined language or the
1271 first browser language or, finally, the default language.
1272 ([SOGoUser -messageForwarding]): new method that returns the user
1273 preference for message forwarding: "inline" or "attached",
1274 defaulting to "attached".
1276 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1277 -contentForInlineForward]): new method that returns the content of
1278 the message for inline forwarding based on the SOGoMailForward
1281 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1282 -fetchMailForForwarding:sourceMail]): check the user preference
1283 for message forwarding and compose inline forwarded messages if required.
1285 * SoObjects/Appointments/SOGoCalendarComponent.m
1286 ([SOGoCalendarComponent
1287 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1288 now use a template based on the language returned from the
1291 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
1292 a subclass of SOGoMailForward for English locale.
1294 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
1295 a subclass of SOGoMailForward for French locale.
1297 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
1298 helps build template for inline forwarded messages.
1300 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1302 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
1303 to handle "<var:if-ie>" template tags.
1305 * UI/SOGoElements: new extension bundle containing sogo-specific
1308 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1309 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
1310 selected in the dialog.
1311 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
1312 first category, if ever, of the calendar entity.
1314 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1315 -composeAction]): restored method since it is needed by the
1318 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1319 -composeAction]): the address fields should be arrays and not
1322 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
1323 that returns the build date of SOGo in the template.
1325 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1327 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1328 -_flattenedRecords:records]): when the c_cn field is empty,
1329 returns set a formatted string with the concatenation of
1330 c_givenname and c_sn as the displayName.
1332 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1333 -isValidMailAccountName:_key]): prevent unknown accounts from
1336 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1337 -pathToAttachmentObject]): we no longer need the filename
1338 extension for SoLookup...
1340 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1341 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
1342 filename to have an extension, and thus accept any filename.
1344 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1345 -currentCName]): new method that returns the c_name of the
1346 contact, correctly escaped to be passed by url afterwards.
1348 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1349 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
1350 instance of [self decodedFlatContent] instead of the buggy
1351 NSString from [super flatContentAsString] to the parser.
1353 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1355 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
1356 new category method to reponds to the "delete" web command on
1358 ([UIxMailActions -deleteAttachmentAction]): new category method to
1359 reponds to the "deleteAttachment" web command on drafts, taking
1360 the "filename" url parameter into account.
1362 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1363 -contentForEditing]): new method that retrieve the editable mail
1365 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
1366 returns the body keys for attached files (parts with a "filename"
1369 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1370 -asQPSubjectString:encoding]): do not change the string if the
1371 encoded string has the same length (which means it is already
1373 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
1374 that retrieve a draft along with its attachments for editing.
1375 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
1376 choke if the "to" header field is empty.
1377 ([SOGoDraftObject -delete]): new method to delete the draft folder
1378 whenever operations are done.
1380 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1382 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
1383 useless stub method, of which the intention was implemented in
1385 ([-lookupSentFolderUsingAccount]): removed obsolete method.
1386 ([-selectedMailIdentity]): removed obsolete method.
1387 ([-lookupSentFolderUsingFrom]): removed obsolete method.
1388 ([-storeMailInSentFolder:_path]): removed obsolete method, of
1389 which the mechanism has been put in -[SOGoDraftObject sendMail]
1391 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
1392 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
1393 adapted algorithms to the new SOGoDraftObject methods.
1394 ([-deleteAction]): removed method since local draft objects cannot
1395 be removed by the user.
1397 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1398 -expungeAction]): new method replacing the one previously found in
1400 ([UIxMailFolderActions -createFolderAction])
1401 ([UIxMailFolderActions -renameFolderAction])
1402 ([UIxMailFolderActions -deleteFolderAction])
1403 ([UIxMailFolderActions -emptyTrashAction])
1404 ([UIxMailFolderActions -subscribeAction])
1405 ([UIxMailFolderActions -unsubscribeAction]): error situations
1406 should have http return code 500 instead of 403.
1408 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1409 -composeAction]): new method replacing the one previously in
1412 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1413 -imap4URLString]): removed overriden method (see below).
1415 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
1416 cache the mailbox acl.
1417 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
1418 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
1420 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
1421 the new method of determining the users mail accounts.
1423 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
1424 longer adds a "/" at the end of the string (the default for
1425 folders), therefore this will be overriden in SOGoMailFolder
1426 rather than in SOGoMailObject.
1428 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
1429 method, moved into the new UIxMailActions module class.
1431 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
1432 -newDraft]): new method that returns a new SOGoDraftObject
1433 instance with a unique filename based on the current timestamp and
1434 the "newDraft" prefix.
1436 -lookupName:nameinContext:localContextacquire:acquire]): overriden
1437 method by detecting local drafts with their "newDraft" prefix.
1438 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
1440 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
1441 from scratch by making it a subclass of SOGoMailFolder.
1443 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
1446 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
1449 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
1452 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
1453 new method, initializing the new ivars: IMAP4ID, headers, text,
1454 sourceURL and sourceFlag.
1455 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
1456 ([-_ensureUserSpoolFolderPath])
1457 ([-saveMimeMessageToTemporaryFileWithHeaders:])
1458 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
1459 ([-deleteTemporaryMessageFile:], [-delete], [-content])
1460 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
1461 ([-uid], [-flags], [-size], [-envelope]): removed methods.
1462 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
1464 ([SOGoDraftObject -setSourceURL:newSourceURL])
1465 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
1466 methods to store the url of the original message between accesses
1467 so that, depending on the action taken (forward or reply), the
1468 correct flag can be given.
1469 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
1470 the imap4 id that is returned for the message whenever it is saved
1471 into the drafts folder.
1472 ([SOGoDraftObject -save]): new method that takes in charge the
1473 saving of the message in the IMAP drafts folder.
1474 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
1475 new method that fills the original data of the new message with
1476 the reply content of the original message.
1477 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
1478 above for message forwarding.
1479 ([-spoolFileManager]): removed useless method (only returned the
1480 default filemanager...)
1481 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
1482 the resulting message as an NSData chunk.
1484 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
1485 containing a rewrite of the mail action methods found in
1486 UI/Mailer/, that needed to be put in the SOGoMailObject class.
1487 ([SOGoMailObject -subjectForReply]): new method that returns a
1488 subject suitable for replies.
1489 ([SOGoMailObject -contentForReply]): new method that returns the
1490 textual content of an email, quoted for replying.
1491 ([SOGoMailObject -filenameForForward]): new method that returns
1492 the name of the filename that should contain the forwarded
1493 message, based on its subject.
1494 ([SOGoMailObject -subjectForForward]): explicit.
1496 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1498 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1499 -mailAccounts]): rewrote method to return the name of the mail
1500 accounts now available with the -[SOGoUser mailAccounts] method.
1501 ([UIxMailMainFrame -showLinkBanner]): removed method.
1502 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
1503 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
1504 ([UIxMailMainFrame -rootURL]): removed method.
1505 ([UIxMailMainFrame -userRootURL]): removed method.
1506 ([UIxMailMainFrame -calendarRootURL]): removed method.
1507 ([UIxMailMainFrame -contactsRootURL]): removed method.
1508 ([UIxMailMainFrame -hasErrorText])
1509 ([UIxMailMainFrame -errorText])
1510 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
1511 ([-composeAction]): removed method. Now provided by
1512 UIxMailAccountActions.
1513 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
1514 ([UIxMailMainFrame -hideFolderTree]): removed method.
1515 ([UIxMailMainFrame -treeRootClassName]): removed method.
1516 ([UIxMailMainFrame +initialize]): removed method.
1517 SOGoMailTreeRootClass userdefaults will no longer have any effect.
1519 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1520 -redirectToLocation:newLocation]): new method that implements the
1521 same functionality as WOComponent.
1523 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
1525 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
1526 method that returns whether the current mail is store in the
1527 drafts folder hierarchy.
1529 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
1530 ([-primaryEmail]): removed method.
1531 ([SOGoUser -primaryIMAP4AccountString]): removed method.
1532 ([SOGoUser -mailAccounts]): new method that returns an array
1533 containing description dictionaries for all the user mail
1534 accounts. Each account also contain the user's identities for that
1536 ([SOGoUser -allIdentities]): new utility method that returns all
1537 the user identities on all accounts.
1538 ([SOGoUser -primaryIdentity]): new method return the first
1539 identity of the first account.
1541 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
1543 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1544 -isInDraftsFolder]): returns NO.
1545 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
1547 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
1549 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1550 -isInDraftsFolder]): new method that detects if self is contained
1551 by the drafts folder by calling itself on the container object.
1553 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
1555 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
1556 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
1557 return the name of the mail accounts now available with the
1558 -[SOGoUser mailAccounts] method.
1560 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
1563 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
1566 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1567 -keysWithFormat:format]): method that forward the method of the
1568 same name to each member of the array, considering they all are
1569 instances of NSDictionary.
1570 ([NSArray -objectsForKey:key]): same principle as above.
1571 ([NSArray -flattenedArray]): new method that transforms an array
1572 of arrays into a single array containing all the elements of the
1575 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1576 -keysWithFormat:keyFormat]): new method inspired by the python
1577 string formatting system and which replaces occurences of "%{key}"
1578 by the corresponding keys.
1580 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1582 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
1583 sql script before the generic one when initializing mandatory
1586 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1588 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1589 -pureEMailAddress]): new utility method inspired by the
1590 "_rawSender" private method in SOGoDraftObject, which it now
1593 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
1594 provides a common API for sending emails, no matter what the
1597 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1599 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1600 -quotasAction]): invoke "relativeImap4Name" instead of
1601 "nameInContainer" since the latter also returns the "folder"
1604 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1605 -listMailboxesAction]): declare the output as text/plain in UTF-8.
1607 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1608 -deleteFolderAction]): fixed the url of the destination folder.
1610 * Main/SOGo.m ([SOGo +initialize]): show the build date and
1611 hostname at startup.
1613 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1615 * SoObjects/Appointments/SOGoCalendarComponent.m
1616 ([SOGoCalendarComponent
1617 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1618 set the mail date to the current date string returned by our
1619 rfc822DateString extension method.
1621 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1622 -_gcsFoldersFromFolder:): ignore the personal folders who are
1623 returned but don't really exist.
1625 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
1627 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
1628 has to return only one element.
1630 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1632 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1633 -content]): new method returning the decoded content of the
1634 corresponding attachment as an NSData instance.
1635 ([UIxMailPartViewer -filename]): if the "filename" parameter of
1636 the metadata parameterList is empty, try to find out the filename
1637 from the "disposition" metadata returned with the BODYSTRUCTURE
1640 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1641 -composeAction]): prefix the INBOX folder with "folder".
1643 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
1644 -relativeImap4Name]): return nameInContainer stripped from its
1645 first 6 characters since all folder names are prefixed with
1648 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1649 -imap4URLString]): invoke -relativeImap4Name instead of
1650 "nameInContainer" since the former will return the fixed IMAP4
1651 foldername and the latter the SoObject name.
1653 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1654 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
1656 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
1657 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1658 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
1659 ([SOGoMailAccount -sentFolderNameInContext:])
1660 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
1661 names with "folder".
1662 ([SOGoMailAccount -inboxFolderInContext:_ctx])
1663 ([SOGoMailAccount -sentFolderInContext:_ctx])
1664 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
1665 the folder names with "folder" since they are prefixed earlier.
1667 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1669 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1670 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
1671 all starts with "folder".
1673 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
1674 longer declare security info from here.
1676 * SoObjects/Mailer/SOGoMailFolder.m
1677 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
1678 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
1679 folder names now always start with "folder".
1681 * SoObjects/Mailer/SOGoMailAccount.m
1682 ([-lookupName:inContext:acquire:]): folder names now always start
1685 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1687 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
1688 -forwardAction]): adapted to the new saveAttachment:withMetadata:
1691 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
1692 code to save the attached filenames with the filename returned by
1693 the web server as well as their mime types.
1695 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
1696 ([UIxMailPartMessageViewer -toAddresses])
1697 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
1698 the corresponding fields separated with a ", " (if needed).
1700 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1701 -saveAttachment:_attachwithMetadata:metadata]): new method
1702 replacing -saveAttachment:withName: and which takes a dictionary
1703 as parameter with the filename and the mime type of the
1705 The mimetype is then saved in a hidden text file.
1706 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
1707 take the mime type from the hidden text file related to the
1710 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
1711 ([SOGoContactGCSFolder
1712 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1713 return records if the db records are > 0 and not just > 1...
1715 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1717 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
1719 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
1721 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1722 ([SOGoContactLDAPFolder
1723 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1724 translate the returned records to a normalized form.
1726 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1727 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1728 translate the returned records to a normalized form.
1730 * UI/Scheduler/UIxCalListingActions.m,
1731 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
1732 SoObjects/SOGo/AgenorUserDefaults.m,
1733 SoObjects/Contacts/SOGoContactGCSFolder.m,
1734 SoObjects/Appointments/SOGoAppointmentFolder.m,
1735 OGoContentStore/OCSiCalFieldExtractor.m,
1736 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
1737 table fields with "c_".
1739 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1741 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
1742 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
1743 the application settings. If set, both limit will influence the
1744 maximum size of the resultsets and the time taken to solve them.
1745 ([LDAPSource -_initLDAPConnection]): initialize the limits.
1747 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1749 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
1750 method that declares the DAV namespace related to CardDAV.
1751 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
1752 method that declares the "access-control" and "addressbook-access"
1753 classes to the list.
1755 * SoObjects/Appointments/SOGoAppointmentFolder.m
1756 ([-lookupActionForCalDAVMethod:]): removed method.
1757 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
1758 method that declares the DAV namespace related to CalDAV.
1760 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
1761 optional method for subclasses which handle specific extensions to
1762 the DAV protocol: CardDAV or CalDAV.
1764 -lookupName:lookupNameinContext:localContextacquire:acquire]):
1765 new overriden method that handles dav invocations for extensions
1766 to DAV by returning an appropriate SoSelectorInvocation.
1768 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1769 -asDavInvocation]): new method returning a dictionary with a "ns"
1770 key representing the dav namespace and a "method" key representing
1771 the dav method name of the request.
1773 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1774 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
1776 ([UIxPreferences -shouldDisplayPasswordChange]): new template
1777 method that returns the value of SOGoUIxUserCanChangePassword.
1779 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1780 scan the value of SOGoUIxDefaultModule. If not set, the default
1781 module defaults to "Calendar".
1782 ([SOGoUserHomePage -defaultAction]): redirect the user to the
1783 value of "SOGoUIxDefaultModule".
1785 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1787 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1788 -contactInfos]): cache the results to avoid multiple invocations.
1790 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1791 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
1792 really should return something or if we fake to return nil...
1794 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1796 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
1797 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
1798 default is set to "bypass".
1800 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1801 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
1802 when authMethod is set to "bypass" from now on. This would avoid a
1803 security concern with a default installation of SOGo.
1804 AuthentificationMethod is now prefixed with "SOGo" for better
1807 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1809 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1810 -quotasAction]): new method that returns a json representation of
1813 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1815 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1816 -imap4URL]): rewrote method to support accented mailbox names.
1817 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
1818 SOGoAuthenticator's passwordInContext:.
1820 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1821 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
1822 start and due dates to nil if hasStartDate and hasDueDate are
1825 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1826 -passwordInContext:context]): made method public.
1828 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1829 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
1830 to false to avoid a null violation.
1832 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1834 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1835 -contentAsString]): returns the message encoded in ISO Latin 1
1838 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
1839 SOGoSuperUsername user defaults.
1840 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
1842 ([SOGoUser -rolesForObject:objectinContext:context]): if the
1843 current user is the superuser, grant him/her the "owner" role.
1845 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1846 the folder only if the current user is the owner of the future
1849 * SoObjects/Appointments/SOGoCalendarComponent.m
1850 ([SOGoCalendarComponent -contentAsString]): we return the content
1851 based on the permissions returned by the security manager instead
1852 of by looking at the user roles.
1854 * SoObjects/Appointments/SOGoAppointmentFolder.m
1855 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
1856 folders of the user to whom this folder belongs instead of the
1857 active user. This way, a delegate user will be able to have the
1858 same view that the original user has if he connects from his user
1861 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
1862 user exists before creating the SOGoUserFolder instance. If not,
1865 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
1866 return the message source code in plain text.
1868 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1869 -contentAsString]): returns the message encoded in UTF8.
1871 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1873 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
1874 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
1875 leading tagname into account when serializing the element values.
1877 * Main/SOGoProductLoader.m: only load bundle directories ending
1878 with the "SOGo" extension.
1880 * Main/SOGo.m ([SOGo
1881 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
1882 result set if the query has caused no exception. Otherwise we get
1883 an "evaluation is in progress exception".
1885 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1887 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1888 -generateSQLForInsert]): initialize error to nil before the
1889 serialization. Otherwise the method can get confused if it ever is
1890 initialized to something else.
1892 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
1893 -folderIsMandatory]): returns NO unconditionnally.
1895 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1896 -appendPersonalSources]): add the "personal" folder to the list of
1897 user folders even if it doesn't exist, so that it is created when
1898 the user accesses it.
1900 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1901 -folderIsMandatory]): returns YES if nameInContainer is set to
1902 "personal", which is the default address book.
1904 * SoObjects/Appointments/SOGoAppointmentFolder.m
1905 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
1906 users must have one Calendar folder (one and only one).
1907 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
1908 escaping '\' so make the carriage return a real one. This way,
1909 PgSQL 8 won't complain about escaping the string.
1911 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
1912 method that create the folder if considered mandatory.
1913 ([SOGoFolder -folderIsMandatory]): new method that determines
1914 whether the folder should be created automatically or not. To be
1915 overriden by subclasses.
1917 * Main/SOGo.m ([SOGo -run]): override method and create the
1918 missing system tables if needed.
1920 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1922 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
1923 -mailDateFormatter]): returns the user's date formatter.
1925 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
1926 applies the user timezone to the date object before returning it.
1928 * UI/Common/UIxSortButton.m: removed useless class module.
1930 * UI/Common/UIxSortableTableHeader.m: removed useless class
1933 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1934 -contactInfos]): use the "asc" url parameter instead of "desc" to
1935 determine the ordering.
1936 ([-sortOrdering]): removed method.
1937 ([UIxContactsListView -init]): removed the "searchText" ivar.
1938 (general): the template no longer use the UIxSortableTableHeader
1941 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1942 -defaultSortKey]): default sort following the messages arrival
1943 instead of their date.
1944 ([-isSortedDescending]): removed method.
1945 ([-imap4SortOrdering]): use the "asc" url parameter instead of
1946 "desc" to determine the ordering.
1947 (general): the template no longer use the UIxSortableTableHeader
1950 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1952 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
1954 ([-setQualifier:_msg], [-qualifier]): removed methods.
1955 ([UIxMailListView -defaultAction]): added code to handle the
1956 search criteria and value passed as url parameters. Also, we now
1957 handle the same search criterias as Thunderbird/Icedove.
1959 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1961 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
1962 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
1963 the string instead of the string itself.
1964 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
1966 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
1967 bool var "acceptAnyUser" that is set when the AuthenticationMethod
1968 user default is nil.
1969 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
1970 unconditionnally returns an instance whenever acceptAnyUser is set.
1972 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1974 * Main/sogod.m (main): prevent SOGo from running as root.
1976 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1978 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
1979 -setCurrentPassword:newPassword]): new stub method.
1980 ([SOGoUser -dateFormatterInContext:context]): new method that
1981 returns an instance of SOGoDateFormatter configured based on the
1984 * UI/Common/UIxPageFrame.m ([UIxPageFrame
1985 -relativePreferencesPath]): new method.
1987 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
1988 removed useless method.
1990 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
1991 different configurable formats (long and short date + time).
1993 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
1995 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1996 -isInternetRequest]): removed method.
1998 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1999 -jsonRepresentation]): new method with an explicit name.
2001 * UI/PreferencesUI/product.plist: new bundle that provides a web
2002 ui for handling user defaults.
2004 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
2006 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
2008 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
2010 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2012 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
2014 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2016 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
2017 -compareEventsAscending:otherEvent]): no longer use compare: on
2018 the time objects since one of them could be an NSNull, which
2019 crashes when comparing with anything.
2021 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2022 -eventsListAction]): sort events from here.
2023 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
2025 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
2026 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
2028 * SoObjects/Appointments/SOGoAppointmentFolder.m
2029 ([SOGoAppointmentFolder
2030 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
2031 no longer sort elements from here.
2033 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2035 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2036 -aclsForUser:uid]): implemented method by forwarding the request
2037 to the container. This fixes a bug where users could no longer
2038 read emails from shared folders.
2040 * SoObjects/Appointments/SOGoCalendarComponent.m
2041 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
2042 here, but rather in its parent class.
2044 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
2045 -stringForSecondsSinceThe70s:seconds]): new utility method.
2047 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2048 -eventsListAction]): no longer reduce the end day of one day for
2049 all day events since everything has been fixed in
2050 OCSiCalFieldExtractor.
2052 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2053 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
2054 the end date of all day events of 1 so that they stay on their
2057 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2059 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
2061 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
2063 ([-fetchCoreTasksInfos]): removed method.
2065 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2066 -init]): initialize an instance of SOGoDateFormatter.
2067 ([UIxCalListingActions -eventsListAction]): the display start and
2068 end dates are added to the listing for each event.
2070 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
2072 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2073 -isAllDay]): returns YES if the "hm" url parameter is set to
2075 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
2076 is displayed one day earlier.
2078 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2080 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2081 -_setupContext]): take the range of dates specified by the popup
2084 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
2085 WODirectAction that returns WOResponse objects with the events or
2086 todos satisfying the parameters passed in the url.
2088 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2089 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
2090 "isAllDay" into account and compute the amount of days to pass to
2093 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
2095 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
2096 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
2097 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
2098 new method that returns a json-formatted array of the visible tasks
2099 for the current user.
2101 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2103 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
2104 object must be present in the list of UIDs we delete the object
2105 from. Otherwise Calendar objects having no organizer and no
2106 attendees will remain in their owner's Calendar.
2108 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2109 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
2110 first 3 elements of the path array if the url returned by
2111 baseURLInContext: returns a hostname.
2113 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2114 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
2115 nil, in which case a crash happens when calling hasPrefix:.
2116 ([SOGoMailFolder -_sharesACLs]): same as above.
2117 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
2118 otherUsersFolderName is nil, we return nil.
2119 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
2120 nil from [self otherUsersPathToFolder], we return nil too.
2122 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2124 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2125 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
2126 the result of [self baseURLInContext:] to avoid a double escaping
2127 in the resulting string.
2129 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
2130 the user has the "ObjectReader" role on the parent container, then
2131 he is granted the "ObjectViewer" role on this object. Same for
2132 "ObjectEraser", although this might change later.
2134 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2135 -toolbar]): determine the toolbar filename based on the
2136 permissions declared by the securitymanager. The role mechanism
2137 has been adjusted on a lowerlevel so we can simplify the code.
2139 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2140 -initWithName:newNameinContainer:newContainer]): read the content
2141 directly from here. That way we can determine whether the object
2143 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
2144 the ObjectCreator role is enabled, we also grant the ObjectEditor
2145 role to the current user.
2147 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
2148 changed the method paradigm to only return HTTP code 204. Not test
2149 is done whatsoever since the security manager does it for us.
2151 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
2152 removed method because the same exists in UIxFolderActions.m
2154 * UI/Contacts/UIxContactsUserRightsEditor.m
2155 ([UIxContactsUserRightsEditor
2156 -setUserCanReadObjects:userCanReadObjects]): new method.
2158 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
2159 "FolderEraser" and special permission "Access Object". Removed
2160 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
2161 can be used instead. Removed "FolderReader" since it is useless.
2163 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2164 -vCard]): directly use the "content" ivar since it is initialized
2165 during object creation.
2167 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2168 ([SOGoContactLDAPFolder -init]): no longer handle the
2169 nameInContainer no the container ivars. They were removed because
2170 this class is a descendant of SOGoObject which already has them.
2171 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
2172 returning "displayName".
2173 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
2176 * SoObjects/Appointments/SOGoCalendarComponent.m
2177 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
2178 ([SOGoCalendarComponent -findParticipant:user]): new name for
2179 method "participant:".
2180 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
2181 findparticipant but taking a uid string as parameter.
2182 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
2183 iCalendar automatically. Instead, this is done only when the user
2184 is a "date and time viewer".
2185 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
2186 (modifier and responder) into account by compiling them with the
2189 * SoObjects/Contacts/SOGoContactFolder.h: removed
2190 "nameInContainer" from the list of required methods.
2192 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
2193 -davContentType]): returns "text/calendar".
2195 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2196 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
2197 groupdav resource-type.
2199 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2200 -davContentType]): same as below.
2202 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2203 -initWithName:newNameinContainer:newContainer]): new overriden
2204 method setting the custom owner directly.
2206 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2207 -davContentType]): same as below.
2209 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2210 -davContentType]): same as below.
2212 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
2213 declare "httpd/unix-directory".
2215 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
2216 "UTC" as fallback timezone instead of "Canada/Eastern".
2217 ([-hasEmail:email]): make use of the new NSArray's
2218 containsCaseInsensitiveString: method.
2220 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2221 -davContentType]): declare "message/rfc822" as content type.
2223 * SoObjects/Appointments/SOGoAppointmentFolder.m
2224 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
2226 ([SOGoAppointmentFolder
2227 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
2228 ([-fetchContentObjectNames]): commented out method since it was
2229 usefull only for testing Funambol.
2231 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
2232 -containsCaseInsensitiveString:match]): an enhanced version of
2235 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
2237 ([-showMarkDeletedButton]): removed useless method.
2238 ([-showTrashButton]): removed useless method.
2240 * SoObjects/Appointments/iCalEntityObject+SOGo.m
2241 ([iCalEntityObject -userIsParticipant:user]): new proxy method
2242 that invoked isParticipant on self for each possible email
2243 addresses of the user passed as parameter.
2244 ([iCalEntityObject -userIsOrganizer:user]): same as above.
2246 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
2249 * SoObjects/Appointments/SOGoAppointmentObject.m
2250 ([SOGoAppointmentObject
2251 -saveContentString:contentStringbaseVersion:baseVersion]): remove
2252 method since an event may not have an organizer.
2254 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2255 -GETAction:localContext]): clarified method. Added support for
2256 content-type (thanks to Helge Hess).
2257 ([SOGoObject -initWithName:_nameinContainer:_container]):
2258 initialize and retain the owner.
2259 ([SOGoObject -davContentType]): returns "text/plain".
2261 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2263 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2264 -addUserInAclsAction]): send an acl addition mail.
2265 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
2268 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2269 -_realActionWithFolderName:folderDict]): handle the possible
2270 presence of the "mail-invitation" url parameter. If present, the
2271 user will be redirected to the relevant folder.
2273 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
2274 ([SOGoUser -language]): new method that returns the user's
2275 preferred language, or the system's if none has been set yet.
2277 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
2278 that returns the full dav url to self.
2279 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
2280 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
2281 returns the full so url to the base of the SOGo module to which
2282 self belongs, and for the specified user.
2283 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
2284 but for the current user.
2285 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
2286 required by the acl advisory templates and which returns a link
2287 the target user can click to activate its new subscription.
2288 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
2289 but for inclusion of the application/x-sogo-notification part,
2290 which will be handled by the Lightning enhancer plugin.
2292 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
2293 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
2294 do nothing yet since imap folder subscription is not handled yet.
2296 * SoObjects/SOGo/SOGoContentObject.m
2297 ([-hasSupportForDefaultRoles]): removed method.
2299 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2300 -getFullEmailForUID:uid]): new method that returns the username +
2303 * SoObjects/Appointments/SOGoCalendarComponent.m
2304 ([SOGoCalendarComponent +initialize]): the default language for
2305 mail templates is now set to English.
2307 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
2308 SOGoACLAdvisory implementing the french template for user removal
2311 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
2312 SOGoACLAdvisory implementing the french template for user
2315 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
2316 SOGoACLAdvisory implementing the english template for user removal
2319 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
2320 SOGoACLAdvisory implementing the english template for user
2323 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
2324 supercall of all the acl advistory templates. The model is based
2325 on SOGoAptMailNotification except that the template encapsulates
2326 the message to be sent. Later, we might create a superclass common
2327 to all template-based emails.
2329 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2330 -addRange:newRange]): new method that store a string
2331 representation of the NSRange passed as parameter.
2332 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
2333 any range contained in self intersect with the one passed as parameter.
2335 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
2336 store ranges in an array to prevent them from intersecting with
2337 each other during the passes.
2339 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2341 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2342 -primaryFetchMailboxInfo]): useless method. Removed.
2344 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2346 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2347 -toManyRelationshipKeys]): invoke [self subfolders].
2348 ([SOGoMailFolder -subfolders]): new method containing what used to
2349 be in toManyRelationshipKeys.
2350 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
2353 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2354 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
2355 named and at the beginning of which we put the predefined folders.
2357 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2358 -emptyTrashAction]): new method inspired by a similar one from
2359 UIxMailListView, to which we added the ability to remove
2362 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
2363 method. Replaced with a similar one in UIxMailFolderActions.
2365 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2366 -renameFolderAction]): implemented method.
2367 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
2368 specified folder. Instead, we put it in the trash folder.
2370 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
2371 method, replaced with a similar method in the new
2372 UIxMailFolderAction class module.
2373 ([-deleteFolderAction]): idem.
2375 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2376 -createFolderAction]): new method implementing subfolder creation.
2377 ([UIxMailFolderActions -renameFolderAction]): new method
2378 implementing subfolder renaming (basic implementation to be
2380 ([UIxMailFolderActions -deleteFolderAction]): new method
2381 implementing folder deletion.
2383 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
2384 web actions related to the handling of imap folder.
2386 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2388 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2389 -ownerInContext:localContext]): overriden method because we are an
2390 IMAP4 client and we need a bit more intelligence to deduce the
2391 owner of the current folder.
2392 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
2393 return an NSException so we need to be careful here to avoid a
2395 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
2396 NSException so we need to be careful here to avoid a crash.
2398 * SoObjects/Mailer/SOGoMailAccounts.m
2399 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
2400 there is no longer any concept of Intranet or Internet connection
2403 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2404 -sharedFolderName]): new method.
2405 ([SOGoMailAccount -otherUsersFolderName]): new method.
2407 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
2408 new javascript code and the new UIxMailAccountActions class.
2410 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
2411 javascript code and the new UIxMailAccountActions class.
2413 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
2414 new javascript code and the new UIxMailAccountActions class.
2416 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2417 -listMailboxesAction]): new method that returns a json-formatted
2418 tree of all the mailboxes available to the current user.
2420 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
2421 web actions related to the handling of mail accounts.
2423 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
2426 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
2427 -jsonRepresentation]): new interface method meant to be overriden
2428 by the primitive classes.
2430 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2432 * UI/MailerUI/UIxMailSplashView.m: removed.
2434 * SoObjects/Appointments/SOGoCalendarComponent.m
2435 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
2436 the uid to the list only when the user email is recognized by the
2439 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2441 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2442 -isDeletionAllowed]): completed method with the new imap acl api.
2444 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
2447 * SoObjects/SOGo/SOGoPermissions.m: added the new role
2448 "SOGoMailRole_MessageEraser".
2450 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
2451 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
2452 "defaultUserID" method into account.
2454 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
2455 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
2456 "defaultUserID" method into account.
2458 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
2459 methods to support the IMAP acls mentionned in the RFC 4314,
2460 removed the ones specific to Cyrus.
2462 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
2463 mandatory method for subclasses. Removed the SOGoDefaultUserID
2466 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
2467 overriden method to return @"<default>".
2469 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2470 -defaultUserID]): overriden method to return @"<default>".
2472 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2473 -aclsForUser:uid]): overriden method.
2474 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
2475 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
2476 ([SOGoMailFolder -defaultUserID]): overriden method.
2477 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
2479 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2481 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2482 -aclUsersForObjectAtPath:objectPathArray]): new method that being
2483 forwarded the calles to aclUsers for the GCS-based subclasses of
2486 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
2487 methods that would have been used to support IMAP acls. Replaced
2488 them with the new protocol for them that has been implemented in
2489 SOGo during the last few weeks.
2491 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2492 -hasSupportForDefaultRoles]): override method by returning "YES".
2494 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2495 -addObjectUniquely:object]): new method with an explicit name.
2497 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
2498 "acl" to "aclUsers". Now designed to return only the uid of the
2499 users involved in an ACL.
2500 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
2501 "NO" by default. To indicate to the acl editor that we don't want
2502 to handle a default user.
2504 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
2505 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
2508 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
2509 provides a view to the IMAP acls.
2511 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
2513 * UI/WebServerResources/MailerUI.js: replaced all invocations of
2514 addEventListener to the use of prototype's Event object. Also,
2515 configured all menus programmatically following descriptions lists
2516 containing their callbacks, or nulls, submenus id or separators.
2518 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2520 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2521 -addUserInAclsAction]): save the previous roles of the user
2522 (unlikely) or the default roles, or None instead of saving the
2523 roles that should appear the first time in the role editor when no
2524 default has been set...
2526 * SoObjects/SOGo/SOGoObject.m: defined a new constant
2527 "SOGoDefaultUserID".
2529 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2530 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
2531 ignore the "AuthorizedSubscriber" role and add the "None" role
2532 when no other role is found.
2534 * UI/Common/UIxAclEditor.m: added a button for the new default
2537 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2538 -_initRights]): don't take the "None" role into account when
2539 initializing the list of current roles.
2541 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
2544 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2546 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2547 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
2548 There is no need to subscract the start from the length if a space
2549 is not found since the range has not changed either. Finally, the
2550 first character before the url might also be a tab or a cr, so we
2551 match it against the "urlAfterEndingChars" custom NSCharacterSet.
2552 ([NSString -stringByDetectingURLs]): modified to handle email
2553 addresses and add a correct "mailto:" link.
2555 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2557 * SoObjects/Appointments/SOGoAppointmentFolder.m
2558 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
2559 method to return the events in the range of 2 weeks ago up to 4
2562 * UI/MailPartViewers/UIxMailPartTextViewer.m
2563 ([UIxMailPartTextViewer -flatContentAsString]): use the new
2564 "stringByDetectingURLs" method to offer clickable urls.
2566 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2567 -stringByDetectingURLs]): this new method replaces passive URLS
2568 with active ones for HTML resolution of the text.
2570 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2572 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2573 -asQPSubjectString:encoding]): simplified method.
2574 The headers indicates "utf-8" again thank to our fix in
2577 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
2580 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2582 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2583 -removeUserFromAclsAction]): implemented this method which was
2584 missing and is required to remove users from ACLs.
2586 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2587 -subscribeAction]): folderDict was not autoreleased, resulting in
2590 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2591 -primaryFetchProfile]): when building with libFoundation, don't
2592 use the "propertyList" method from NSString. Rather, we convert
2593 the string to an NSData instance and passit as parameter to
2594 NSDeserializer. This way, we obtain a mutable dictionary rather
2595 than an immutable one.
2597 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
2598 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
2599 constant string "contentTypeValue".
2600 contentTypeValue is now set back to iso-8859-1 since NGMime
2601 converts extracts the data in that encoding.
2603 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2605 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2606 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
2607 "bindFields" value is present in the user defaults, use the
2608 specified fields to find the dn of the user to bind.
2609 ([LDAPSource -allEntryIDs])
2610 ([LDAPSource -fetchContactsMatching:match])
2611 ([LDAPSource -lookupContactEntry:entryID])
2612 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
2613 bind and unbind the connection on each request.
2615 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
2617 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2618 -contactSearchAction]): simplified method to use the facilities
2619 provided by the LDAPUserManager. No longer takes care of the
2620 "ldap-only" url parameter since all requests are handled by the
2623 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2624 -primaryFetchProfile]): check that the value returned is not null
2625 before interpreting it.
2627 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2628 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
2629 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
2630 system email is already present, remove it before adding it.
2632 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2633 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
2634 loginToCheck is not empty.
2635 ([LDAPSource -fetchContactsMatching:match]): check that match is
2637 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
2639 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
2642 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2644 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
2646 ([SOGoUser -systemEmail]): returns the email formed from the
2647 username and the default mail domain.
2648 ([SOGoUser -hasEmail:email]): test whether the user has the
2649 specified email, in a case-insensitive way.
2651 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2652 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
2653 check login information.
2655 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2656 ([SOGoContactLDAPFolder
2657 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
2658 no longer manage LDAP connections. The requests are forwarded to
2659 the relevant LDAPSource instead.
2661 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2662 -appendSystemSources]): pass LDAPSource objects to
2663 SOGoContactLDAPFolder instances.
2665 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
2666 address of the "from" field before sending the message. Otherwise,
2667 sending the mail won't work.
2669 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
2670 rewrote this method to request all the available email identities
2671 for the current user. Also, the from field also contains the full
2672 name of the user, not just his/her email address.
2674 * SoObjects/Appointments/SOGoCalendarComponent.m
2675 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
2676 from the previous module iCalEntityObject+Agenor.
2677 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
2678 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
2681 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
2682 replacing the SOGoContactLDAPEntry module. It was renamed as such
2683 because it now receives a dictionary instead of an NGLdapEntry.
2684 It thus can now handle data from any source of LDIF data, not
2685 only coming from LDAP.
2687 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
2688 implementing most of what used to be the AgenorUserManager class.
2689 The difference is that users are cached in the forme of
2690 dictionaries and many sources are used. Also, it can be used to
2691 search LDAP contacts.
2693 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
2694 the concept of "ldap source", to be used by all the classes
2695 needing access to LDAP-provided information: addressbooks and the
2696 user manager. Most the method thereing are transcriptions of
2697 methods previously found in SOGoContactLDAPFolder. It also contain
2698 utility methods for user matching and authentification.
2700 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
2701 module, rendered useless by code refactoring.
2703 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
2704 with the freshly written "LDAPUserManager".
2706 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2708 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
2709 SOGOContactLDIFEntry.
2711 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
2712 module, obsoleted by code in SOGo/LDAPSource.[hm].
2714 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2716 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
2717 new method with an explicit name.
2719 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2721 * SoObjects/Appointments/SOGoCalendarComponent.m
2722 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
2723 replacing "isOrganizer:orOwner:" by taking only one instance of
2724 SOGoUser as parameter.
2725 ([SOGoCalendarComponent -participant:user]): new method replacing
2726 the previous "isParticipant" boolean method by returning the first
2727 participant matching the user passed as parameter. This method is
2728 used so that both the regular email address and the "system email
2729 address" of the user are matched against the participants emails.
2731 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2732 -getSystemEMailForUID:uid]): new method that returns the email
2733 formed with the user's uid and the default mail domain.
2735 * SoObjects/Appointments/SOGoCalendarComponent.m
2736 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
2737 was previously commented out.
2739 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
2740 forwared to [AgenorUserManager getSystemEmailForUID:].
2742 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2743 -toolbar]): method replacing the one with the same name in the
2744 task and appointment editor classes. This method makes also use of
2745 the new method "isOrganizerOrOwner:" and "participant:" in
2746 SOGoCalendarComponent.
2748 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2749 -toolbar]): removed method, replaced with a method with the same
2750 name in UIxComponentEditor.
2752 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
2753 method, replaced with a method with the same name in
2756 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2757 -primaryFetchProfile]): the values returned from the database are
2758 converted to a put dictionary first, since the dictionary returned
2759 is actually an immutable one, which can cause a crash afterwards.
2761 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2763 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
2764 and "SOGoRole_ObjectEditor".
2766 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2767 -prepareRightsForm]): this method is no longer mandatory.
2769 * UI/Contacts/UIxContactsUserRightsEditor.m
2770 ([UIxContactsUserRightsEditor
2771 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
2772 module to handle acls related to the address books. Partial
2775 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2776 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
2779 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
2780 specified roles from cache.
2781 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2782 put resulting roles in cache.
2784 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
2785 initWithName:inContainer:. Instead, directly initialize the ivars
2786 as it is supposed to be to avoid an infinite loop whenever one of
2787 those two methods are overriden.
2789 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
2792 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2793 -aclsForUser:uid]): override method so that SOGo won't crash when
2794 loading the contact card.
2796 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2798 * SoObjects/Appointments/SOGoAppointmentFolder.m
2799 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
2800 "freebusy" special user should only require opaque elements.
2802 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2804 * SoObjects/Appointments/SOGoAppointmentFolder.m
2805 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
2806 our double declaration where the resulting XML would be screwed.
2807 There is only one collection per namespace.
2809 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
2810 rfc822DateString]): new method that returns a string conform to
2811 rfc 822 and suitable for email headers.
2813 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
2814 "rfc822DateString" category method on the date we put in the
2817 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2819 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
2820 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
2821 which should never be overriden.
2822 ([UIxUserRightsEditor -appendRight:newRight])
2823 ([UIxUserRightsEditor -removeRight:right])
2824 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
2825 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
2826 methods that can be used by the subclasses.
2827 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
2828 mandatorily be overriden to prepare the elements of the subclassed
2830 ([UIxUserRightsEditor -updateRights]): new method that should
2831 mandatorily be overriden to update the user rights from the
2832 elements of the subclassed form.
2834 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
2835 check if the uid is already listed before adding it to our array.
2836 This is because the acl table can contain more than one record per
2837 user/object relationship.
2839 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2840 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
2841 "roles" parameter is now an NSArray instead of a string. Therefore
2842 we loop throughout the array to populate the table. All the
2843 relevant records are removed prior to the addition of the new
2846 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2847 -aclsForUser:uid]): new override that returns nil until we add
2848 support for IMAP acls.
2850 * SoObjects/Mailer/SOGoMailAccounts.m
2851 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
2853 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2854 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
2856 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2857 -aclsForUser:uid]): override this method which will always return
2860 * SoObjects/SOGo/SOGoPermissions.[hm]: added
2861 [Public,Private,Confidential]
2862 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
2863 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
2864 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
2866 * SoObjects/Appointments/SOGoAppointmentFolder.m
2867 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
2868 that defines default roles for new elements in the acl.
2870 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
2871 module and subclass of UIxUserRightsEditor specific to the
2872 handling of user rights on calendar folders.
2874 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2876 * SoObjects/Appointments/SOGoAppointmentFolder.m
2877 ([SOGoAppointmentFolder -groupDavResourceType]): return both
2878 "vevent-collection" and "vtodo-collection".
2880 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
2881 that implements the detailed editor of user rights per-object.
2883 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2885 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2886 -rolesForObject:objectinContext:context]): no longer query objects
2887 for "roleForUser:". Instead, all objects should implement
2890 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
2891 new method to comply with the new acl "protocol" in SOGoObject.
2892 Uses SOGoFolder's new facilities for ACLS.
2893 ([SOGoContentObject -aclsForUser:uid]): idem.
2894 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
2895 ([SOGoContentObject -removeAclsForUsers:users]): idem.
2897 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2898 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
2899 based folders. This method is derived from the code that was in
2900 UIxAclFolder before its removal.
2901 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2904 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
2906 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
2907 ([SOGoFolder -setRoleForUsers:uidsto:role])
2908 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
2910 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
2911 that requires overriding by subclasses.
2912 ([SOGoObject -aclsForUser:uid]): idem.
2913 ([SOGoObject -defaultAclRoles]): idem.
2914 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
2915 ([SOGoObject -removeAclsForUsers:users]): idem.
2917 * UI/Common/UIxObjectActions.m: new module implementing the web
2918 actions common to SOGoObject and all its subclasses.
2919 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
2920 user with the clientObject defaults user rights to the object's
2923 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
2924 to the point where it will only list the users (and their name)
2925 associated with an object acl.
2927 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
2928 methods have been moved into SOGoObject and SOGoFolder during a
2931 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2932 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
2933 method made useless by the programmatic handling of iCalendar
2935 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
2936 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
2937 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
2939 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
2940 drop on all folder nodes, not just on leaves.
2942 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2943 ([SOGoContactLDAPFolder
2944 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
2946 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2948 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
2949 debugging facilities when the SOGoDebugObjectAllocation user
2952 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2954 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
2955 method that SOGo will need with non-gnustep Foundation
2957 ([NSString -stringByAppendingPathComponent:component]): new method
2958 that SOGo will need when building with libFoundation. Method
2959 removed later since it is available from
2960 Foundation/NSPathUtilities.h.
2962 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
2965 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
2966 every subclass to access [WOApplication context] without having to
2967 invoke it more than once.
2969 * SoObjects/Appointments/SOGoCalendarComponent.m
2970 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
2971 moved method from SOGoTaskObject and SOGoAppointmentObject up to
2974 * UI/Scheduler/UIxCalSelectTab.m: removed module.
2976 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2978 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2979 -vCard]): test the prefix of the card in a case-independent way.
2981 * OGoContentStore/OCSContactFieldExtractor.m
2982 ([OCSContactFieldExtractor
2983 -extractQuickFieldsFromContent:content]): we no longer accept
2984 records in a format other than versit vCard so we can get rid of a
2987 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2989 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2990 -selectorComponentClass]): restored method.
2992 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2994 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
2995 -shouldDisplayCurrentTask]): the current task is not displayed if
2996 it is NOT completed or if the "showCompletedTasks" flag is set.
2997 The logic was inverted in Lightning and is now in SOGo too.
2999 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3001 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
3002 want the "work" url instead of the "home".
3004 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3005 -_saveSnapshot]): save url values from snapshot.
3006 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
3008 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3009 -calendarList]): new method replacing "availableCalendars".
3011 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
3012 -calendarFolders]): we now take the list of subscribed calendar
3015 * SoObjects/Appointments/SOGoAppointmentFolder.m
3016 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
3017 method derived from and replacing [UIxCalView calendarFolders].
3019 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3021 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3022 -toManyRelationshipKeys]): don't put the predefined folders in the
3023 list if they are returned by the server.
3025 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
3026 longer store the "flattenedBlocks" in a dictionary since the
3027 object will be deleted anyway and we don't need to put the folders
3030 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3031 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
3032 attachment path into account when computing the part urls.
3034 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3036 * UI/Contacts/UIxContactsListViewContainer.m
3037 ([UIxContactsListViewContainer -additionalFolders]): take the list
3038 of subscribed folders from the new property list used for the user
3039 settings. The value of its key is SubscribedFolders for the
3040 dictionary entry named "Contacts".
3042 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3043 -canAccessContentAction]): new method to override the one from
3044 UIxFoldersActions by taking into account the fact that, this time,
3045 the clientObject is an ldap folder. Removed many method that used
3046 to be related to the handling of the user selector.
3048 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
3049 to make sure they can be removed.
3051 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
3052 populate the calendar entries based on the user settings plist.
3054 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3055 -selectForMailerAction]): restored method.
3057 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
3058 from a simplified version of the old UIxContactEditor (removed).
3060 * UI/Contacts/UIxContactsUserFolders.m: new template module for
3061 selecting users or user folders through an LDAP search of which
3062 the results are displayed as a tree.
3064 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
3065 method "onContactAdd" here since the Mailer is now the only module
3066 to use it when composing emails.
3068 * UI/WebServerResources/generic.js: added code for handling the
3069 new scheme used for describing SOGo folders, common code to handle
3070 folder addition or removal.
3072 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3073 -activateFolderAction]): new method that change the "active"
3074 settings in the folder-related fields in the user settings.
3075 ([UIxFolderActions -deactivateFolderAction]): see above.
3077 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3078 -checkRightsAction]): removed method.
3080 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3081 -updateAdditionalAddressBooksAction]): removed method.
3083 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3084 -updateCalendarsAction]): removed method.
3086 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3088 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3089 -checkRightsAction]): removed method.
3091 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3092 -canAccessContentAction]): new method designed to replace
3093 [UIxCalMainView checkRightsAction] in a more universal way.
3095 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3097 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3098 -roleOfUser:uidinContext:context]): take all the subkeys into
3099 account, not only the "personal" folder.
3101 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3102 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
3103 to the new components.
3105 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
3108 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3109 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
3110 field of the sogo_user_profile table, where the user-customizable
3111 changes will be saved.
3112 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
3113 similar to the one above, using the "settings" field where the
3114 automatic settings will be saved.
3116 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
3117 module to bind the userdefaults to a property list contained in a
3118 specified field of the sogo_user_profile table.
3119 ([AgenorUserDefaults
3120 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
3121 added a "fieldName" parameter.
3123 * UI/Common/UIxFolderActions.m: new module implementing web
3124 actions common to all GCS-based folders.
3126 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3128 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
3129 put a carriage return after the day name.
3131 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3132 -readFreeBusyAction]): restored method.
3134 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3136 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3137 -defaultAction]): remade module to redirect automatically to the
3140 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
3142 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3144 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3145 -deleteAction]): new web method to delete personal addressbook
3148 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3149 -delete]): override method to refuse the deletion of the folder if
3150 its nameInContainer is "personal".
3152 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
3153 that forwards the deletion request to the folder manager.
3155 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3157 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
3158 -zoomList]): new method that returns the list of available zoom factors.
3160 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3161 -changeStatusAction]): rewrote method.
3163 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3164 -_handleAttendeesEdition]): make sure "attendeesNames" has a
3165 length > 0 before computing the attendees. Otherwise there will be
3166 an invalid empty entry.
3167 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
3168 organizer when there are attendees and remove it when the
3169 attendees are removed.
3171 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3173 * UI/Scheduler/UIxAttendeesEditor.m): new component.
3175 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
3176 the task and appointment editors. Now a container component
3177 handling the common elements of tasks and events.
3179 * UI/Scheduler/UIxTaskEditor.m: same as below.
3181 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
3182 a subclass of UIxComponentEditor but a subcomponent of it.
3184 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
3185 toolbar can have the special value "none" to indicate there is
3186 none attached to the window.
3188 * SoObjects/Appointments/SOGoCalendarComponent.m
3189 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
3191 ([SOGoCalendarComponent -isParticipant:email]): new method.
3192 ([SOGoCalendarComponent -calendar:create]): takes one parameter
3193 "create" which is a boolean indicating whether we want to create
3194 the calendar if it does not exist.
3196 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3198 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
3199 of a table, the same way the dayly and weekly views have been for
3202 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
3204 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
3207 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
3208 property to point at the user folder
3210 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3212 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3213 -userInContext:]): returns "SOGoUser".
3215 * SoObjects/Appointments/SOGoCalendarComponent.m
3216 ([SOGoCalendarComponent -contentAsString]): overriden method that
3217 takes the privacy into account and discard the relevant fields if
3218 needed by generating a new content string and caching it.
3219 ([SOGoCalendarComponent
3220 -saveContentString:contentStringbaseVersion:baseVersion]): if the
3221 new method above has cached a content string, release it and set
3222 it to nil so that it will have to be regenerated in the case it is
3224 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
3225 discard the fields that have to be hidden when the card is
3228 * SoObjects/Appointments/SOGoAppointmentFolder.m
3229 ([SOGoAppointmentFolder
3230 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
3231 sure the cards are now handled as instances of
3232 SOGoCalendarComponent instead of SOGoContentObject so that their
3233 content string is taking the privacy classifiction into account.
3234 ([SOGoAppointmentFolder -_privacySqlString]): new method that
3235 generates a query to determine what information can be given and
3236 if the card itself has to be shown.
3238 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3239 -getICalPersonsFromValue:selectorValue]): removed useless
3240 "isAccessRestricted" method.
3242 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3243 -setStyle:_style]): test whether the values of orgmail and
3244 partmails are null before manipulating them, otherwise SOGo sends
3245 a "rangeOfString:" message to an NSNull, which makes it crashes.
3247 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3248 -extractQuickFieldsFromEvent:_event]): we now use the new
3249 "symbolicAccessClass" method from iCalEntity to determine the
3250 value of the "classifiction" field.
3251 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
3254 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3256 * SoObjects/Appointments/SOGoAppointmentFolder.m
3257 ([SOGoAppointmentFolder
3258 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
3259 see below, the query is adapted consequently.
3261 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3262 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
3263 renamed to "classification" and can any integer as value.
3264 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
3267 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3269 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3270 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
3271 don't prepend anything to the class and id named. Instead, we
3272 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
3275 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3277 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
3278 -rolesOfUser:logininContext:context]): if object does not exists
3279 (for example when it's being created), the current user has the
3280 same rights on it than he/she has on its parent container.
3282 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3283 -nameExistsInFolder:objectName]): methods that tests if a c_name
3284 corresponding to the name passed as parameter is present in the db
3287 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3289 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3290 -rolesForObject:objectinContext:context]): test for
3291 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
3293 * SoObjects/Appointments/SOGoCalendarComponent.m
3294 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
3295 returns the roles of the user on the container object if the event
3298 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3300 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
3301 alternativeViewer a multipart/related message is being handled.
3303 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
3306 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
3307 text/html component before text/plain.
3309 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3310 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
3311 fetching of HTML parts.
3313 * SoObjects/Appointments/SOGoCalendarComponent.m
3314 ([SOGoCalendarComponent -componentTag]): new template method that
3315 returns the vcalendar tag of the current object.
3316 ([SOGoCalendarComponent -component]): new method that returns the
3317 first object matching [self componentTag] within the current
3318 calendar object. This method replaces 'firstEventInCalendar:' as
3319 well as "firstTaskInCalendar:".
3320 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
3321 moved method from SOGoAppointmentObject.m.
3323 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3325 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
3326 module which shows each selected user's calendar in a different
3327 column instead of mixing their events together.
3329 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
3330 replaced use of [NSString stringByTrimmingWhiteSpaces] with
3331 [NSString stringByTrimmingSpaces].
3333 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
3334 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
3337 * UI/Scheduler/UIxCalDayOverview.m,
3338 UI/Scheduler/UIxCalDayChartview.m,
3339 UI/Scheduler/UIxCalDayListview.m,
3340 UI/Scheduler/UIxCalWeekOverview.m,
3341 UI/Scheduler/UIxCalWeekChartview.m,
3342 UI/Scheduler/UIxCalWeekListview.m,
3343 UI/Scheduler/UIxCalInlineMonthOverview.m,
3344 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
3346 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3348 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3349 -appendPersonalSourcesInContext:context]): release connectoin
3350 channel when everything is done.
3352 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3353 -newAbAction]): new action method to crate a new contact folder
3356 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
3357 that requests the folder manager to create a folder table with the
3358 specified type at the specified path. The type is taken from [self
3361 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3362 -folderType]): implemented.
3364 * SoObjects/Appointments/SOGoAppointmentFolder.m
3365 ([SOGoAppointmentFolder -folderType]): implemented.
3367 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3368 -appendPersonalSourcesInContext:context]): we now fetch all
3369 folders with type "Contact" that belong to the current user.
3370 ([SOGoContactFolders -newFolderWithName:name]): new method to
3371 create a new contact folder.
3373 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
3374 resulting url with [NSString+Utilities hostlessURL] instead of
3375 using NSURL. This is because the url in question sometimes has a
3376 hostname and sometimes not. "hostlessURL" ensure the hostname is
3378 ([UIxComponent -applicationPath]): same as above.
3380 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
3382 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
3383 folders before doing the one on messages.
3385 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3387 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
3388 makeObjectsPerform:withObject:withObject: for GNUstep
3391 * OGoContentStore/GNUmakefile, Protocols/common.make,
3392 SoObjects/common.make, UI/common.make: install in
3393 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
3395 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
3397 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
3400 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3402 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
3403 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
3406 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3407 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
3408 password would be accepted anyway as long as its length was > 0.
3409 This can be the case ONLY when LDAP is disabled otherwise we have
3410 a serious security issue...
3412 * SoObjects/Appointments/SOGoAppointmentObject.m
3413 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
3414 user is not an organizer nor a participant, he is declared as
3415 "Owner" if he owns the calendar the entry where the entry is
3416 contained. Other cases should not be possible.
3418 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3420 * UI/Contacts/UIxContactEditor.m: display and handle the new
3423 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3424 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
3427 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3428 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
3431 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3433 * SoObjects/Appointments/SOGoCalendarComponent.m
3434 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
3435 returns the value of ud "SOGoAppointmentSendEMailNotifications"
3437 ([SOGoCalendarComponent
3438 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
3440 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3442 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3443 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
3444 so that the mailbox cache is refreshed everytime the user presses
3445 on "get mail". I doubt a mailbox cache really is useful in general
3448 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3450 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3451 -userInContext:]): if the lookup is on "freebusy.ifb" and the
3452 username is "anonymous" the user is automatically set to
3455 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3457 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3458 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
3459 user with password "freebusy".
3461 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
3462 -contentAsString]): the default timerange is now 14 days before
3463 currentday and 1 month after.
3465 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3467 * SoObjects/Appointments/SOGoAppointmentFolder.m
3468 ([SOGoAppointmentFolder
3469 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
3470 escape the record string in a way suitable with XML encoding.
3472 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3474 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
3475 calendar view would not be updated properly.
3477 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3479 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3480 -newStartDate]): fix the handling of the component start date
3481 depending on the "hm" and the "day" parameters.
3483 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3484 -roleOfUser:uidinContext:context]): set role of current user to
3485 "Assistant" if the object that is accessed is "freebusy.ifb".
3487 * SoObjects/Appointments/SOGoAppointmentFolder.m
3488 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
3489 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
3490 ([SOGoAppointmentFolder
3491 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
3492 lookupCalendarFolderForUID: method, which doesn't do security
3495 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3497 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
3498 accessor that returns the comma-separated list of users with role
3500 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
3501 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
3502 "checkedUsers". Instead, each user is either classified in the
3503 list of assistants or the list of delegates.
3505 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3507 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
3508 -composeAction]): method imported from removed container modules.
3509 ([UIxMailMainFrame -mailFolderName]): method imported from removed
3512 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
3513 for wrapping UIxMailView with the "popupview" action.
3515 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
3516 since its the component that displays the same splash screen than
3517 the one in Thunderbird/Icedove.
3519 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
3520 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
3521 UI/MailerUI/UIxMailListViewContainer.[hm],
3522 UI/MailerUI/UIxMailViewContainer.[hm]: removed
3524 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3526 * UI/WebServerResources/HTMLElement.js: replaced the functional
3527 selectNode() and deselectNode() functions with select() and
3528 deselect() methods of HTMLElement.
3530 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
3531 events are initialized from here now instead of in the HTML code.
3533 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3534 -checkRightsAction]): new method similar to the one with the same
3535 name in UIxCalMainView.m.
3537 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
3538 code to handle the publishing of freebusy information.
3540 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3542 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3543 -checkRightsAction]): new action method that returns a
3544 comma-separated list of boolean values matching the right of the
3545 current user to "view" (as a permission) each foreign calendar
3546 stored in his preferences.
3548 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
3549 new method that sets a customOwner, which can be returned with
3550 ownerInContext it set.
3552 * SoObjects/Appointments/SOGoAppointmentFolder.m
3553 ([SOGoAppointmentFolder
3554 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
3556 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3558 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
3559 below, but for the Contacts and Calendar collections.
3561 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
3562 new acl facilities method from sope-gdl/GCSFolder.m.
3564 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3565 -roleOfUser:uidinContext:context]): new method that returns
3566 SOGoRole_Assistant when the user is an assistant or a delegate on
3567 the "personal" ab object. This is so that setting roles on the
3568 SOGoContactFolders object is not required.
3570 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3572 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
3574 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
3575 to the handling of the user selection for the acls.
3577 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
3578 values from SoPermissions with ones specific to SOGo.
3580 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
3581 handles the storage for the acls.
3583 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
3584 class for SOGoAppointmentObject and SOGoTaskObject.
3586 * UI/Common/UIxAclEditor.[hm]: new component that provides a
3587 general editor for folder acls.
3589 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
3591 ([NSString -davMethodToObjC]): method that returns the method name
3592 for a DAV property implementation.
3594 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
3596 ([NSArray -stringsWithFormat:format]): new method that returns
3597 formatted occurences of the strings stored in the array.
3599 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
3600 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
3601 subclass module of SoWebDAVValue that supports collections of
3602 properties of the same type.
3604 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3606 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3607 -lookupFolder:ofClassNamed:inContext:]): added the ability to
3608 configure the name of the SOGoDraftFolders with the ud var
3609 "SOGoDraftsFolderName".
3611 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3613 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
3614 -userTimeZone:username]): new method that returns the timezone for
3615 the specified user depending on his preferences and the server
3618 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3619 -stringForData:partInfo:]): take the encoding into account and
3620 translate the text to "normal" before processing the charset data.
3622 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3624 * UI/WebServerResources/generic.js: the progress indicator is on
3625 when loading the page so we turn it off, and we turn it back on
3626 whenever we switch to another module...
3628 * UI/WebServerResources/SchedulerUI.js: make sure the day view
3629 synchronization mechanism works everywhere.
3631 * UI/WebServerResources/generic.js: the log window is not only
3632 visible when UIxDebugEnabled is set.
3634 * UI/WebServerResources/SchedulerUI.js: the month overview's day
3635 cells are now initialized with the DOM event interface methods
3636 instead of with html attributes.
3638 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
3639 headers (should be made configurable at some point)...
3641 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
3642 "not null" constraint on startdate, enddate, isopaque,
3643 participants and partmails.
3645 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3647 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3648 -hoursToDisplay]): prevent a crash by retaining the
3649 "hoursToDisplay" array after it's created.
3650 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
3651 clickable hours DIV.
3653 * UI/WebServerResources/SchedulerUI.js: made the event
3654 participation status modification asynchronous, which also fixes a
3655 bug where the window would sometimes close before the accept or
3656 decline action was completed. Also, adapted the event handling
3657 related to the days or weeks view with the new DIV-based layout.
3659 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
3661 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
3662 DIV-based presentation of the days and weeks.
3664 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
3666 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
3667 might return an exception so we have to handle it if we don't
3670 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3672 * UI/WebServerResources/SchedulerUI.js: updated the list
3673 initialization code to use the new event management scheme, adding
3674 what was missing to be able to delete events and tasks again.
3676 * UI/WebServerResources/MailerUI.js: added code to activate the
3677 "Get mails" button. Fixed a bug which prevented messages to be
3680 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
3681 navigation and focus handling of INPUTs.
3683 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3685 * UI/WebServerResources/MailerUI.js: added code to handle the
3686 possible drag and drop events to manager in the mail module.
3687 Moving messages, opening parent folders, ...
3689 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
3690 the drag and drop manager as well as the interface to HTMLElement
3691 to trigger drag and drop events.
3693 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
3694 action to move the current message to the mailbox named after the
3695 value of parameter "tofolder".
3697 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3698 -moveToFolderNamed:folderNameinContext:]): new method base on
3701 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3703 * UI/WebServerResources/generic.js: added and activated many
3704 "load" handlers to configure generic widgets used across the
3705 modules. More events are now handled in a DOM-fashion way instead
3706 of by setting the relative attributes in the templates.
3708 * UI/Templates/UIxSortableTableHeader.wox: all the events are
3709 declared from the javascript DOM onload handlers.
3711 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
3714 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
3715 declared from the javascript DOM onload handlers.
3717 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
3718 we want everything to be separated from each other, as much as
3721 * UI/WebServerResources/SOGoDragHandles.js: new module containing
3722 the "SOGoDragHandlesInterface", implementing methods that can be
3723 attributed to DIV so that they can be used as drag handles.
3725 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3726 -asQPSubjectString]): initialize the tmp strings with '0' to make
3727 sure they don't contain garbage.
3729 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3731 * UI/WebServerResources/MailerUI.js: register the messageList
3732 table as a dragging source and the leaf of the navigation tree as
3733 dnd destinations to the DNDManager.
3735 * UI/WebServerResources/generic.js: initialize tabs from the
3736 "unload" event listener that is added programmatically instead of
3737 from the template... Also, added the new DNDManager object.
3739 * UI/WebServerResources/HTMLTableElement.js: added code to
3740 simulate XUL drag n drop events. This code will possibly be moved
3741 to HTMLElement.js instead later...
3743 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3744 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
3747 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3748 -_qualifierForFilter:filter]): only search records which starts
3749 with the specified pattern.
3751 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3753 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3754 -asQPSubjectString]): new method that returns the special QP
3755 string with its qp declaration for email subjects.
3756 ([SOGoDraftObject -bodyPartForText])
3757 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
3758 double-encode data in UTF-8.
3760 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3761 -newStartDate]): new method to determine the start date depending
3762 on the URL parameters, the current day and the current time.
3763 ([UIxComponentEditor -toolbar]): new method to determine the
3764 filename of the toolbar that should be drawn depending on the
3765 ownership and the list of attendees of the task/event wrt to the
3768 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3769 -setDayStartHour:aStartHour]): adjust the minutes to the next
3770 quarter of hour, if not already set to a quarter.
3772 * UI/WebServerResources/UIxAppointmentEditor.js,
3773 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
3776 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3778 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3779 -loadValuesFromComponent:component]): handles access class
3780 (privacy) and status.
3782 * UI/Contacts/UIxContactsListViewContainer.m
3783 ([UIxContactsListViewContainer -additionalFolders]): return nil if
3784 [self additionalAddressBooks] returns an empty string.
3786 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3788 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
3789 rangesOf7Days]): enhanced and debugged algorithm to feed the array
3790 with slices where the first day is still in the requested month.
3792 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
3795 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
3796 of events in the day boxes of the calendar's monthly view.
3798 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
3799 -davContentType]): declare "text/calendar".
3801 * SoObjects/Appointments/SOGoAppointmentObject.m
3802 ([SOGoAppointmentObject -davContentType]): declare
3805 * SoObjects/Appointments/SOGoAppointmentFolder.m
3806 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
3807 HTTP methods are handled by SOPE and requires nil to be returned,
3808 this method now invokes the new
3809 "requestNamedIsHandledLater:inContext:" method to check that.
3810 ([SOGoAppointmentFolder
3811 -requestNamedIsHandledLater:nameinContext:context]): new methods
3812 that returns "YES" only for the "OPTIONS" http method (for now...).
3813 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
3814 overloaded method to append the "access-control" and
3815 "calendar-access" DAV abilities to the initial declaration.
3817 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
3818 imitate the look of Sunbird/Lightning's monthly view.
3820 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
3821 UIxCalMonthViewOld.[hm].
3823 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3825 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
3826 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
3828 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
3829 returns an image name based on the participation status of the
3832 * UI/WebServerResources/SchedulerUI.js: same strip down as for
3835 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
3836 ([UIxContactsListViewContainer -additionalFolders])
3837 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
3838 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
3839 methods to handle the external addressbooks a user has subscribed
3840 too, by retriving them from his preferences.
3842 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3843 -updateAdditionalAddressBooksAction]): new method that updates the
3844 user settings with the list of addressbook he has subscribed to.
3846 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
3847 module for the address book selector.
3849 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
3850 a toolbar with two buttons ("add" and "remove") to manage the
3851 additional addressbooks a user might subscribe to.
3853 * UI/WebServerResources/ContactsUI.js: added code to handle
3854 "external addressbooks" from the Javascript point-of-view, by
3855 extending existing methods and adding code for the "add ab" and
3856 "remove ab" buttons.
3858 * UI/WebServerResources/generic.js: moved extensions methods to
3859 DOM elements to separate files for better clarity.
3861 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
3862 new method that returns "pageContent" as class, but also "popup"
3863 for the DIV where the page content lies, so that we can manipulate
3864 the content of popup's with CSS identifiers.
3866 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3868 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3869 -displayStyle]): new method that returns a string containing the
3870 css style relative to the current appointment cell. This code is
3871 currently inactive but might be reused later.
3873 * UI/WebServerResources/SchedulerUI.js: added code to handle the
3874 display of the selected day (the day pointed by the mouse, or the
3875 current day when changing the view).
3877 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3878 -dayCellClasses]): new method that returns a string containing the
3879 css classes applicable to the current cell, depending on the
3880 position of the day in the week, the day of today and the
3883 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
3884 -currentContactAptBorder]): new method that returns the
3885 appropriate border color for the specified user.
3887 * SoObjects/Appointments/SOGoAppointmentObject.m
3888 ([SOGoAppointmentObject
3889 -saveContentString:contentStringbaseVersion:baseVersion]):
3890 overloaded method that parse new events and detects if they have
3891 an organizer or not. If they are new and have no organizer set
3892 (Sunbird/Lightning...), the owner of the event is set as
3895 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
3896 category that provides facility methods and interfaces to the
3899 * SoObjects/Contacts/product.plist: give full access to ANY
3900 authenticated user, not just the owner (to every objects...).
3902 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3904 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
3905 every replica widgets are declared as such to their master
3906 counterpart. Take the days into account when displaying the time
3907 range taken by the appointment.
3909 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3910 -getICalPersonsFromValue:selectorValue]): method taken from
3911 UIxFreeBusyUserSelector, that is shared both by
3912 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
3914 * SoObjects/Appointments/SOGoAppointmentFolder.m
3915 ([SOGoAppointmentFolder
3916 -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.
3918 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
3919 derived and taken as a subset of UIxFreeBusyUserSelector that
3920 implements the table part of the FreeBusy view. Most of the
3921 methods of UIxFreeBusyUserSelector relative to that table were
3922 moved into UIxFreeBusyUserSelectorTable, which can also be used as
3923 a standalone view for AJAX operations.
3925 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3927 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3928 -vCard]): change reverted.
3930 * UI/Contacts/UIxContactEditor.m: check whether the client contact
3931 folder has selector "globallyUniqueObjectId" before calling that
3934 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3935 -vCard]): the "setVClass" NGVCard method really is "setClass"
3938 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3939 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
3940 request the "streetAddress" instead of the "streetaddress".
3941 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
3942 mails that *contain*, and not just *start with* the search
3945 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3946 -vCard]): mark address returned from LDAP as the work address.
3948 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
3949 span covered with the anchor, not only the textual information
3952 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
3953 argument (event or task) to newEvent in the appointmentListMenu.
3954 Make the appointmentsListView display the appointmentsListMenu.
3956 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
3957 12 to 50 before displaying "...".
3958 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
3959 if its length > 0, whether location itself is nil or not...
3960 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
3961 of which the length > 0.
3963 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3965 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
3966 french and ISO dates.
3968 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
3969 from UIxContactSelector to handle contact lists (current and
3970 additional contacts).
3972 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3973 -_freeBusyAsText]): added handling of an "additional"-named query
3974 parameter that describe the number of additional days after
3975 enddate that should be returned.
3977 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3978 -_responseForResults:results]): give priority to results with
3979 "c_uid" fields. If none returned, use the first contact received.
3981 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3982 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
3983 2 and "CANCELLED" to 0.
3985 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3987 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
3988 of start and end dates to short string dates.
3990 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3991 -readFreeBusyAction]): new method that returns an array of numbers
3992 corresponding to the state in the freebusy of each "quarter of an
3993 hour" between the "sday" and "eday" date parameters passed in the
3994 url. This permits to handle the display of the freebusy with Ajax
3996 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
3997 since the free busy displays 2 days ahead.
3999 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4000 -contactSearchAction]): new action that returns the uid and the
4001 username + email of the user whose name contain the value of the
4002 "search" url parameter.
4004 * SoObjects/Appointments/SOGoAppointmentFolder.m
4005 ([SOGoAppointmentFolder
4006 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
4007 useful for the computing of the status of the freebusy.
4009 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
4010 -init]): new component that incarnates a user selector for events
4011 inspired by the new one found in Thunderbird Lightning.
4013 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4015 * UI/WebServerResources/generic.js: added code to enable or
4016 disable anchor visually (following our internal algorithm).
4018 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
4019 added new "url" ivar with its classic accessors.
4020 ([UIxComponentEditor -urlButtonClasses]): new method that returns
4021 the class strings for the url button on the appointment/task
4022 editor (depending on the validity of the url).
4024 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
4025 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
4026 the template to match the Lightning's new task/appointment editor.
4028 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
4030 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
4032 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4034 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4035 ([SOGoContactLDAPFolder
4036 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
4038 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
4039 iCalEntityObject instances instead of just iCalEvent's.
4041 * SoObjects/Appointments/SOGoAppointmentFolder.m
4042 ([SOGoAppointmentFolder
4043 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
4045 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
4046 bad way of handling ownership that way.
4048 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4049 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
4050 on "cn", just like Mozilla.
4052 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4054 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
4055 "to" should be retained, otherwise it will be autoreleased and a
4058 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4059 -writeAction]): updated method to fetch the card before initing
4062 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4063 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
4066 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
4067 -iCalStringTemplate]): start and due date are now optional.
4069 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4070 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
4071 appropriate accessors to be settable through the templates.
4073 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
4074 new "isDisabled" ivar with appropriate accessors to be
4075 settable through the templates.
4077 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4078 -availableCalendars]): new method that list the calendars to which
4079 the user has subscribed.
4080 ([UIxComponentEditor -componentOwner]): returns the owner of the
4083 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4084 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
4085 quickentries to null whenever each or all of them are null, by
4086 providing an impossible timestamp from with NSNotFound as value.
4088 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4090 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
4091 that handles the creation of new fields with the new APIs and the
4092 new node structure on the page.
4094 * UI/Scheduler/UIxAppointmentEditor.m,
4095 UI/Scheduler/UIxTaskEditor.m:
4096 refactored to user UIxComponentEditor as parent class.
4098 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
4099 containing the methods common to the UIxTaskEditor and the
4100 UIxAppointmentEditor.
4102 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4104 * SoObjects/Appointments/SOGoAppointmentFolder.m
4105 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
4106 the handling of time-ranges.
4108 * UI/WebServerResources/ContactsUI.js: specify a notification type as
4109 parameters when onConfirmContactSelection in invoked.
4111 * UI/WebServerResources/generic.js: specify a notification type as
4112 parameters when onContactRemove in invoked.
4114 * UI/WebServerResources/SchedulerUI.js: when the user deselects
4115 all calendars, select his entry.
4117 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4119 * UI/WebServerResources/SchedulerUI.js: edit and delete events
4120 with their owner-relative urls. Generate a correct entry in the
4121 css color table when a user is added to the calendars list. Put
4122 the same color next to the user id.
4124 * UI/WebServerResources/generic.js: implemented some new helper
4127 * SoObjects/Appointments/SOGoAppointmentFolder.m
4128 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
4129 entries if their owner is not the current user.
4131 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4132 -displayClasses]): return the correct class for the current event
4133 representation depending on its owner.
4135 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
4136 and associate a color for each user login depending on its
4137 position in the list.
4139 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
4140 -currentRowCSSClass]): return the correct class for the current
4141 row depending on the owner of the event.
4143 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4144 -setColors:colors]): new method to associate a color table with
4145 each user in the list.
4147 * SoObjects/Appointments/SOGoAppointmentFolder.m
4148 ([SOGoAppointmentFolder
4149 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
4151 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
4152 NSObject to associate an instance with a user.
4154 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4156 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
4159 * UI/WebServerResources/ContactsUI.js: added handling of
4160 notification of changes to contact selectors.
4162 * UI/WebServerResources/generic.js: added handling of notification
4163 of changes to contact selectors.
4165 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4166 -updateCalendarsAction]): proxy method to update the user
4167 preference table with the new selected calendar uids.
4169 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
4170 -calendarsContactsAction]): new method.
4172 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
4173 ([UIxContactSelector -setHasCheckBoxes:aBool])
4174 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
4175 permit the drawing of checkboxes instead of card icons.
4177 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
4178 wrap a selector the the "Calendars" tab.
4180 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
4181 new user calendar selector.
4183 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4185 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
4186 may cover hour 0 to hour 23.
4188 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4189 -iCalStringFromQueryParameter:format:]): dates explicitly set to
4192 * UI/WebServerResources/SchedulerUI.js: manage both lists of
4193 objects wrt to the toolbar actions.
4195 * UI/WebServerResources/generic.js: added code to the "String"
4196 class to decode number-encoded char entities.
4198 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4199 -batchDeleteAction]): new method to delete selected entries in the
4202 * SoObjects/Appointments/SOGoAppointmentFolder.m
4203 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
4204 that delete identified entries in batch.
4206 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4207 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
4209 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
4210 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4211 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
4212 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4214 return a UIxJSClose component if everything went fine.
4216 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
4219 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
4220 UIxAppointmentEditor.m.
4222 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
4223 a very light page with javascript code to close a window, by
4224 calling a method on the opener if specified. This component is
4225 designed to work as a response to form postings.
4227 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4229 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
4230 SOGoAppointmentObject adapted for the handling of tasks.
4232 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
4233 extracted from SOGoAppointmentObject.
4235 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4236 -saveUrl]): returns the url needed to POST the new form to.
4237 redirect the user to <aptid>/editAsAppointment instead of /edit,
4238 so that SOGoAppointmentFolder can return the correct object type.
4240 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
4241 -compareAptsAscending:_other]): accept empty start or end dates.
4243 * SoObjects/Appointments/SOGoAppointmentFolder.m
4244 ([SOGoAppointmentFolder
4245 -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.
4246 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
4247 components of type "vtodo" as well as "vevent".
4248 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
4249 url specified ends with AsTask or AsAppointment, returns the
4250 an object of the appropriate class, otherwise deduce it from its
4251 content if the HTTP method is "PUT", otherwise read its type from
4254 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4255 -extractQuickFieldsFromTodo:_task]): extract quick fields from
4258 * UI/Scheduler/UIxCalView.m ([UIxCalView
4259 -fetchCoreAppointmentsInfos]): replacement methods for
4260 fetchCoreInfos but by retrieving object with component "vevent".
4261 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
4264 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
4265 UIxCalAptListView adapted for the handling of tasks.
4267 * UI/Scheduler/UIxTaskProposal.[hm],
4268 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
4269 clones of the UIxAppointment* classes for the handling of tasks.
4271 * UI/WebServerResources/UIxTaskEditor.js: clone of
4272 UIxAppointmentEditor adapted for the handling of tasks.
4274 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
4275 Scroll the daily view to the appropriate hour when an appointment
4276 is selected in the appointments list.
4278 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4280 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4281 -setDayStartHour:aStartHour]): specifies the user timezone on the
4284 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
4287 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
4288 ([NSCalendarDate -driftedDate]): methods made useless by a better
4289 comprehension of the NSTimeZone API...
4291 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4293 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
4294 new methods from the NSCalendarDate methods.
4296 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
4297 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
4299 +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).
4300 ([NSCalendarDate -adjustedDate]): this method returns another
4301 instance set to the correct hour after the original date was set
4302 from a non-GMT timezone. This date can be used for storage.
4303 ([NSCalendarDate -driftedDate]): this method does exactly the
4304 opposite of -adjutedDate, that is, it enables the method
4305 hourOfDay, minuteOfHour etc... to return the values according to
4306 the original date's timezone. This date CANNOT be used for storage.
4308 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
4309 -shortDateString]): new method that will return a "short date
4310 string" (yyyymmdd) from a calendar date object.
4312 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4313 -_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.
4315 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
4316 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
4318 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4320 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
4321 view of the day at the height of hour 8:00.
4323 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
4324 ([UIxCalView -dayEndHour]): returns 24.
4326 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
4327 ([UIxContactFoldersView -newAction]): invoke
4328 _selectActionForApplication: on self with the proper attribute too.
4330 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
4331 we now use the action mechanism in UIxContactsListView to keep the
4332 same view for the contact selectors and the regular contact view.
4334 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
4335 UIxContactsListViewContainerBase.[hm]
4337 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
4339 * UI/WebServerResources/generic.js: generalized emailstring
4340 handling functions. Generalized address book access functions.
4342 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4343 -isPopup]): return YES if the "popup" query parameter is set.
4345 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4346 -defaultAction]): keep the url parameters when redirecting.
4347 ([UIxContactFoldersView -selectForSchedulerAction])
4348 ([UIxContactFoldersView -selectForMailerAction]): new action
4349 methods for the /scheduler-contacts and /mailer-contacts invocations.
4351 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
4352 newly available NSString+URL category.
4354 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
4355 -asURLParameters]): handle dictionary entries which could be
4356 instances of NSArray rather than NSString.
4358 * SoObjects/SOGo/NSString+URL.m ([NSString
4359 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
4360 ([NSString -urlWithoutParameters]): new method that returns the
4361 url without its parameters.
4363 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
4365 * SoObjects/SOGo/NSDictionary+URL.[hm],
4366 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
4368 * UI/WebServerResources/UIxMailEditor.js: add support for
4369 additions of different types (to, cc, bcc) of recipients from the
4372 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
4375 * UI/Contacts/UIxContactsMailerSelection.m,
4376 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
4377 UI/Contacts/UIxContactsSelectionView.m to provide a different set
4378 of widgets depending on the application invoking the contact list.
4380 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4382 * UI/WebServerResources/ContactsUI.js: hide the current contact
4383 whenever the user changes of contact folder.
4385 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
4386 now provided by the template when loading the page.
4388 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4389 -iCalPersonWithUid:uid]): new method taken from removed module
4392 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4394 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
4395 -categoriesAsString]): same as below.
4397 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
4398 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
4400 * SoObjects/Appointments/SOGoAppointmentObject.m
4401 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
4402 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
4405 * SoObjects/Appointments/SOGoAppointmentFolder.m
4406 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
4407 hackish test to detect whether the request concernes VEVENT's or
4408 anything else. Return events only in the former case.
4409 ([SOGoAppointmentFolder
4410 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
4411 c_name quickfield so that the calendar list can identify the
4412 appointments with their complete "filename".
4414 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
4415 groupsOfClass:fromSource: to parse the given vcalendar.
4417 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
4419 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
4421 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
4424 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
4426 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4428 * SoObjects/Appointments/SOGoAppointmentFolder.m
4429 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
4430 sensitive to the CalDAV method names.
4431 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
4432 "calendar-query" CalDAV method name.
4434 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
4435 code coming originally from MailerUI.js.
4437 * UI/WebServerResources/UIxContactEditor.js: imitate the
4438 Thunderbird address book by completing the display name with the
4439 content of the first and last name fields, until the display name
4440 is modified manually.
4442 * UI/WebServerResources/generic.js: added a "trim" method to the
4445 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4446 -displayName]): new method that returns the display name from "cn"
4447 or from the "displayName" key if found.
4449 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4450 -initSnapshot]): check if "[card n]" returns anything to avoid a
4453 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
4454 that returns an unparsed doctype definition for the pages.
4456 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4457 -vCard]): set the card's fn to attribute "displayName" if found
4460 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4462 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4463 -vCard]): handle the "streetAddress" and "l" fields.
4465 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
4466 header fields by converting the tables to DIVs and SPANs.
4468 * UI/WebServerResources/generic.css: attempted unification of font
4469 families and size across all the elements. changed the
4470 logConsole's "position" from "fixed" to "absolute" to avoid
4473 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4475 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
4476 empty the contact view when the current contact is being deleted.
4478 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
4479 parse the email field and provide the address full name if found
4480 as the "contactFN" parameter.
4482 * UI/WebServerResources/generic.js (openMailTo): do not give a
4483 name to the opened window so that serveral ones can be opened at
4486 * UI/MailPartViewers/UIxMailPartTextViewer.m
4487 ([UIxMailPartTextViewer -flatContentAsString]): override method by
4488 replacing carriage returns with "<br />" in the result string from
4489 super's implementation.
4491 * UI/Contacts/UIxContactView.m ([UIxContactView
4492 -_urlOfType:aType]): don't manage non-mailto urls through
4493 javascript, let the user decide what's best for him.
4495 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4496 -newAction]): transfer all the query parameters by using the
4497 "asURLParameters"'s result string from [self queryParameters].
4499 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4500 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
4501 query parameters and put their values (if any) into the snapshot.
4503 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
4504 carriage-returns to "<br />".
4505 ([UIxContactView -workCompany]): explicitly initialize company to
4506 nil if org is nil or empty.
4508 * UI/WebServerResources/UIxContactEditor.js: updated validation
4509 code after we added and renamed some fields.
4511 * UI/WebServerResources/ContactsUI.js: added code to cache contact
4512 cards and to handle card updates.
4514 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4516 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
4517 test the length of the returned string since they will never be
4520 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
4521 return self if the process went successful, returns an exception
4522 otherwise (and only otherwise...).
4524 * OGoContentStore/OCSContactFieldExtractor.m
4525 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
4526 adapted method to the new VCard api. Since the cards are stored in
4527 vcard format, we no longer deal with a dictionary but with a
4530 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4532 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
4533 return a string with a "mailto" url.
4534 ([UIxContactView -_urlOfType:aType]): generic method to return a
4535 url string with a html anchor pointing to it.
4537 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
4538 since subclass "UIxContactEditor" did nothing. Implemented code to
4539 display and modify the values parsed from the vcards, displayed in
4540 a way similar to the Thunderbird addressbook.
4542 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4543 -save]): new dummy method.
4545 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4546 -save]): made method void.
4548 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4550 * UI/Contacts/UIxContactView.m: added many wrapper methods to
4551 display blocks of data à la Thunderbird Addressbook. If data is
4552 available, those wrappers (around the NGVCard methods) will
4553 enclose the results in a proper HTML output with the correct label
4554 (if present), otherwise it will return an empty string.
4555 ([UIxContactView -vcardAction]): new action to return the contact
4556 as text/vcard (for exporting).
4558 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4559 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
4561 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4562 -vCard]): create a new NGVCard instance when no data is available
4564 ([SOGoContactGCSEntry -save]): save the vCard using the new
4565 "versitString" API method/message.
4567 * UI/Contacts/UIxContactView.h: separated interface from
4570 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
4571 views and display them beneath the list.
4573 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4575 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
4576 the timezone even when it's the server timezone.
4578 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4579 -privateContacts:inContext:]): no long configure the calendar
4580 object with the user's timezone since it's now accessible
4581 application-wide throught the SOGoObject methods.
4583 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
4584 method. Removed the "backendTimeZone" method.
4586 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
4587 instead of SoComponent.
4589 * SoObjects/Appointments/SOGoAppointmentObject.m:
4590 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
4591 [self serverTimeZone] instead of "EST" (which was removed).
4593 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
4594 "timeZone" ivar and its accessors.
4596 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
4597 centralized method returing the timezone configured in the
4598 userdefaults db or "Canada/Eastern" if missing.
4599 ([SOGoObject -userTimeZone]): new centralized method returing the
4600 timezone of the current user or the server timezone if missing
4601 from the user configuration table.
4603 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4605 * UI/WebServerResources/SchedulerUI.js: implemented caching of
4608 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
4609 return a path based on the object's context instead of the first
4610 level in SOGo's object hierarchy...
4612 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4614 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
4617 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
4618 timezone ([self viewTimeZone]) to the WEMonthOverview component to
4619 avoid a confusion with the days.
4621 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
4624 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
4625 imitate Sunbird's synchronization between the 3 visible views.
4627 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
4628 sure the numbers in dateString are formatted so as to take 4 chars
4629 for the year and 2 for the day and the month, otherwise
4630 NSCalendarDate will return a nil date.
4631 ([UIxComponent -applicationPath]): return a path based on the
4632 object's context instead of the second level in SOGo's object
4635 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4637 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
4638 user's timezone abbreviation to the date string passed as parameter to
4639 NSCalendarDate to generate an accurate date instance. Do the same
4640 when no date is specified and today is chosen.
4642 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
4643 form's time values to integers before comparing them.
4645 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
4646 ([UIxCalAptListView -currentEndTime]): initialize the resulting
4647 dates timezone with [self viewTimeZone].
4649 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
4650 "viewTimeZone" ivar destined to hold an instance of the user's
4652 ([UIxComponent -viewTimeZone]): take the timezone from the user's
4655 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4657 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
4658 rearranged the layout.
4660 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
4661 manage showing and hiding appointment details.
4663 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4664 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
4665 timezone by taking the current user's timezone setting.
4667 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
4669 * SoObjects/Appointments/SOGoAppointmentObject.m
4670 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
4671 set default timezone to EST, although this code should be
4672 rewritten to handle a system and a user default value.
4674 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4675 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
4676 take the values from the hour and minute INPUTs when data is
4677 POSTed since we no longer use the UIxTimeSelector component.
4678 ([UIxTimeDateControl -selectableHours])
4679 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
4680 template SELECTs to display reasonable and acceptable values
4681 instead of all the possibilities.
4683 * UI/WebServerResources/generic.js: adapted code for the new
4684 implementation of the UIxContactSelector component (added a
4685 "remove" button, removed the previous INPUT and replaced them with
4686 links of class "button").
4688 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
4689 UIxTimeDateControl.m.
4691 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
4692 ([UIxCalDayTable -currentAppointmentHour]): new methods that
4693 returns correctly formatted values used as attributes for JS code.
4695 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4696 -initialContactsAsString]): renamed implementation of
4697 initialParticipants.
4698 ([UIxContactSelector -currentContactId])
4699 ([UIxContactSelector -currentContactName]): new methods used when
4700 listing the initial contacts in the widget. Currently, both return
4701 the person's cn but the latter should ultimately return a user
4704 * UI/Contacts/UIxContactSelector.h: separated interface from
4705 UIxContactSelector.m.
4707 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
4708 all javascript code is now put in Scheduler.js/generic.js.
4710 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
4711 moved into NSCalendarDate+Scheduler instead.
4713 * SoObjects/Appointments/SOGoAppointmentFolder.m
4714 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
4715 configure the timezone from SOGoUserFolder when the instance is
4717 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
4718 the value of the new "timezone" ivar.
4720 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4722 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
4723 the date selector in the first page and the container of the
4724 future calendar selector in the second page.
4726 * UI/WebServerResources/generic.js: added code for handling tabbed
4729 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
4730 returns the bundle name associated to the current running product.
4732 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4734 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
4735 exception by invoking a timeout on the opener rather than invoking
4736 the list refresh method.
4738 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
4741 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
4742 ([UIxCalWeekView -prevWeekQueryParameters])
4743 ([UIxCalWeekView -nextWeekQueryParameters])
4744 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
4745 that return the dates relatively to the current day.
4746 ([UIxCalWeekView -lastWeekName])
4747 ([UIxCalWeekView -currentWeekName])
4748 ([UIxCalWeekView -nextWeekName])
4749 ([UIxCalWeekView -weekAfterNextWeekName])
4750 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
4751 methods that returns the label for the corresponding weeks.
4753 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
4754 used by UIxCalDayView and UIxCalWeekView to display the events
4755 occuring in one or more days.
4757 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4759 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
4760 entries in the new "monthMenu" and "yearMenu".
4762 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
4763 method to return the current day as a string formatted depending
4764 on the current locale.
4766 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4767 ([UIxCalAptListView -endDate]): "today" is now the default filter
4768 for displayed events.
4769 ([UIxCalAptListView -currentSerialDay]): new method returning the
4770 date of the current enumerated appointment in serial form
4773 * UI/WebServerResources/SchedulerUI.js: added code to select the
4774 relevant day when an appointment is selected. Added code to popup
4775 a month and a year menu whenever the header entries are clicked in
4776 the calendar widget.
4778 * UI/WebServerResources/generic.js: made addClassName and
4779 removeClassName methods of HTMLElement.
4781 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4783 * UI/WebServerResources/MailerUI.js: fixed the contact creation
4784 from email addresses.
4786 * UI/WebServerResources/generic.js: centralized the search-related
4787 functions here since the same code was used across the 3
4790 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4791 ([UIxCalAptListView -endDate]): return the required dates needed
4792 depending on the value given to the "filterpopup" url parameter.
4794 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
4795 code by invoking UIxComponent's labelForKey:.
4797 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
4798 [self pageResourceManager] instead of [self resourceManager].
4800 * UI/Contacts/UIxContactEditorBase.m: invokes
4801 globallyUniqueObjectId on the clientobject's class instead of the
4802 hardcoded "SOGoFolder".
4804 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4805 -newAction]): redirect the "new" action to the personal (default)
4808 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
4809 +objectWithName:inContainer:]): new constructor.
4811 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4812 -lookupContactWithId:recordId]): always create a contact object,
4813 even if it does not exist.
4815 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4817 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
4818 component that lays out the different components of SOGoCalendar.
4819 Only serves as an Objective-C counterpart to its xml template.
4821 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
4824 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
4825 display a widget to handle the information displayed in the
4826 appointments list. Not currently used, lacks implementation.
4828 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
4829 display a calendar as a dynamic widget from where one can select
4830 the current visible day.
4832 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
4833 extracted from UIxCalInlineMonthOverview.m.
4835 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
4836 calendarPageURL methods. The javascript code is handled by .js
4837 files as much as possible...
4839 * UI/WebServerResources/ContactsUI.js,
4840 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
4843 * UI/WebServerResources/SchedulerUI.js: implemented functions to
4844 handle the new widgets. XmlHTTPRequest code taken from
4847 * UI/WebServerResources/generic.js: put some functions related to
4848 element selections as methods to HTMLElement and HTMLTableElement.
4850 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
4851 display the list of appointments (embodies the code-size of
4852 UIxCalAptListView; answers to the "aptlist" method).
4854 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4856 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
4857 -correctURLAction]): new short action method replacing the method
4858 below by taking far less code.
4860 * SoObjects/Appointments/SOGoAppointmentFolder.m
4861 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
4862 with an action in the view-related code.
4864 * UI/Scheduler/UIxAppointmentEditor.m: invoke
4865 "stringByEscapingHTMLString" on the resulting value to avoid
4866 issues with accented characters.
4867 ([-jsCode]): removed method since the javascript code was merged
4868 into SchedulerUI.js.
4870 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4872 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
4873 new class method that returns an iCalPerson based on the UID given
4876 * UI/Contacts/UIxContactsListViewContainerBase.m:
4877 UIxContactsListViewContainer renamed to serve as a base class for
4878 the contact lists in both the contact editor and the contact
4881 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4882 ([SOGoContactLDAPFolder
4883 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
4884 setUserIdentifier:setRootDN:]): an LDAP field specifying the
4885 loginname of the users can now be specified.
4887 * UI/WebServerResources/generic.js: added code to manage contact
4888 lists through the new implementation of the UIxContactSelector.
4890 * UI/Templates: put the templates related to SchedulerUI in its
4893 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4894 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
4895 entry for "uid" with the field name representing the login name of
4896 the user in the corresponding LDAP branch.
4898 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4900 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4901 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
4902 request is a PUT, always create an entry, even if we're not sure
4905 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4907 * UI/WebServerResources/ContactsUI.js: implemented live-search.
4909 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
4910 -appendSystemSourcesInContext:context]): populated method with
4911 code that creates entries mapped to instances SOGoContactFolder,
4912 based on the configuration found in the NSUserDefaults under the
4913 key "SOGoLDAPAddressBooks".
4914 ([SOGoContactFolders
4915 -lookupName:nameinContext:contextacquire:acquire]):
4916 "contactsources" do not exist anymore, SOGoContactFolder was split
4917 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
4918 and one protocol: SOGOContactFolder, instead.
4919 ([SOGoContactFolders -contactFolders]): new accessor used by the
4920 views of SOGoContactXXXFolder to list the possible sources.
4922 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
4923 defines the methods that UIxContactsView, ..Editor and so on...
4926 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
4927 defines the methods that UIxContactsListViewBase expects as well
4928 as the data fields returned in the contact lists.
4930 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
4931 returns entries an LDAP server. Conforms to the new
4932 SOGOContactFolder protocol.
4934 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
4935 returns a vCard based on contact entries from an LDAP server.
4936 Conforms to the new SOGOContactObject protocol.
4938 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
4939 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
4940 entry for the textual representation of the vCard.
4942 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
4945 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
4946 "SOGoContactObject".
4948 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
4949 method that generates a textual representation of the vcard.
4951 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
4953 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
4954 "SOGoContactFolder".
4956 * SoObjects/Contacts/SOGoContactSource.h,
4957 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
4960 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4961 -singleAttributeWithName:key]): new method that returns the first
4962 object associated with an ldap key (where generally one value is
4965 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
4966 map the entry into an NSDictionary for processing by
4967 UIxContactsListViewBase.m with the least possible overhead.
4969 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
4972 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4974 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4975 -privateContacts:inContext:]): now returns an instance of
4978 * UI/Contacts/UIxContactsListViewContainer.m
4979 ([UIxContactsListViewContainer -contactFolderName]): new method to
4980 return the absolute path to the current contact folder, called
4981 from within the template.
4983 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
4984 JS code to initialize the 'currentContactFolder' generic var.
4986 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
4987 +contactFolderWithSource:inContainer:andName:]): new class
4988 method meant to return an instance connected to the specified
4989 source. Currently useless but won't be anymore in the next few
4992 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
4993 the "lookupFreeBusyObject" method since it does not exist.
4995 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
4996 as a "view" for the SOGoContactFolders object. Does nothing but
4997 redirect the browser to the URL of the personal address book of
4998 the user. It does not even have a template.
5000 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
5001 implementing the SOGoContactSource protocol. Does nothing
5002 currently but will be used to implement access to the personal
5003 address book of the user stored in the SOGo database.
5005 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
5006 protocol defining an API common to all possible types of contact
5009 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
5010 serving as the root of the contact folders available to the
5011 current user. Correctly lists the contact sources in webdav.
5013 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5015 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
5016 -composeAction]): new action method that permits external object
5017 to write a message from the default (primary) account.
5019 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5020 -initSnapshot]): new method with code taken from "defaultAction"
5021 but needed for others.
5022 ([UIxContactEditorBase -writeAction]): new action designed to
5023 compose the correct URL needed to obtain the MailerUI's email
5024 editor with the correct "mailto" parameter.
5026 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
5027 Common so that other modules can use it.
5029 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
5030 easier to manage both ajax and non-ajax requests.
5032 * UI/Contacts/UIxContactsFilterPanel.m: clone of
5033 UIxMailFilterPanel, but applicable to contact lists.
5035 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
5036 -vcardContentFromSOGoContactRecord]): use the new standard methods
5037 created for each type of entry. If a line is determined to not
5038 contain information, it will be skipped.
5040 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
5041 +initialize]): init defaultMailDomain with the user default
5042 "SOGoDefaultMailDomain".
5044 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5046 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5047 -saveAction]): reorganized methods to only have ONE return point.
5048 Invoke saveRecord: directly on the clientObject instead of
5049 saveContentString, which does the same thing anyway.
5051 * SoObjects/Contacts/NSDictionary+Contact.m
5052 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
5053 method to convert the dictionary returned with the user submission
5054 to a record in VCARD format to be stored in the database.
5056 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5058 * UI/WebServerResources/MailerUI.js: when opening the context menu
5059 of the message list, select the message below the mouse cursor and
5060 deselect the other selected messages temporarily. This mimics the
5061 behaviour of Thunderbird for that matter and was already
5062 implemented for the entries of the folder tree.
5064 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
5065 -iconForMenuItem]): new method that returns the fully qualified
5066 relative URL to the icon representing the mailbox, or the default
5067 mailbox icon if needed.
5069 * UI/SOGoUI/UIxComponent.m ([UIxComponent
5070 -urlForResourceFilename:filename]): automatically return an empty
5071 string whenever the filename passed as argument is nil.
5073 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
5074 "desc" parameter set to 1 so that they are sorted in descending
5075 order by default. Also, added "onHeaderClick()", triggered by
5076 clicking on the message list header elements.
5078 * UI/MailerUI/UIxMailSortableTableHeader.m
5079 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
5081 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5082 -isSortedDescending]): defaults to "YES" when the sort order is
5085 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5087 * UI/WebServerResources/MailerUI.js:
5088 - message cache: set the max num of cached messages to 20. Limit
5089 the cached message size to 30000 bytes.
5090 - ajax: when a message request is called while one is already
5091 being performed, the latter will be cancelled. Idem when
5092 retrieving the content of a mailbox.
5093 - folder tree: when a mailbox is selected because of the URL
5094 requested (initMailboxSelection), the dtree is expanded throughout
5095 the mailbox entry's parent hierarchy to ensure it is made visible
5096 when the page is being displayed. (new function: expandUpperTree).
5097 - mailbox loading: when loading a mailbox where a message was
5098 previously selected, we invoke its url with the "pageforuid"
5099 parameter correctly specified. During callback processing, we scan
5100 the table for the related row and reselect it.
5101 Also, the message area is set blank before loading any mailbox.
5103 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5104 -defaultAction]): if the "pageforuid" parameter is passed in the
5105 url, take its value and invoke [self firstMessageOfPageFor:]
5106 consequently to deduce the first message to display. Otherwise,
5107 set it to "idx", otherwise set it to 0.
5108 ([UIxMailListView -firstMessageOfPageFor:]): new method
5109 that determines the first message of the page where the message
5110 passed as parameter is contained.
5112 * UI/WebServerResources/UIxMailListView.js: removed this module,
5113 its code was put in MailerUI.js instead.
5115 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5117 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
5118 which returns the nodes for the parent specified in "parentMenu".
5119 Used to generate the javascript code for the folder dtree.
5121 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
5122 using that container-template are now using UIxMailMainFrame
5123 since UIxMailPanelFrame had no real interest. File removed.
5125 * UI/WebServerResources/dtree.{css,js}: new files to handle
5126 javascript-generated mailbox tree. Modified from original version
5127 by integrating the previous code with the one we are using for
5128 selections and mailbox handling. Minor visual enhancements too...
5130 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5132 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
5133 returned, put it in an NSArray before returning it (fixes
5136 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5138 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
5139 that returns a url string stripped from its "http://hostname"
5142 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
5144 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
5146 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5148 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
5149 -mailDateFormatter]): retrieve the timezone from the user settings
5150 and pass it to the returned dateFormatter. Also, the dateFormatter
5151 is kept in a static variable to avoid useless
5152 creations/destructions.
5154 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
5155 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
5157 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
5158 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
5159 s/Criteria/Text/ to handle the "criteria" form parameter.
5161 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5163 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
5164 to integrate better with the firefox look&feel. Added entries for
5165 the new "menu" DIV class (popup menus).
5167 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
5168 takes any chunk of text as param, detects the user email and the
5169 optional first and last names and return them in a well-formatted
5170 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
5171 namespace conflict. Added "onMenuClick(node, event, menuId)" to
5172 handle popup menus through "onclick" element attributes (node =
5173 this, event = event and menuId = name of the menu DIV id to
5176 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5177 -snapshot]): add an entry for "email" into the snapshot
5178 dictionary if a "contactEmail" URL parameter was detected and if
5179 the entry for "email" is empty.
5181 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
5182 button now invokes the newContact() js function in ContactsUI.js
5183 instead of opening "new" directly. newContact() pops up a window
5184 stripped from its navigation bar.
5186 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
5187 bundle (AddressBook).
5189 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
5190 "menu" and id "addressMenu" have the header email addresses
5191 display it with the new menu code in generic.js.
5193 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
5194 replaced the body tables with a div of class "pageContent"
5195 (standardization across the page templates).
5197 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
5198 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
5199 those are now inherited from UIxPageFrame.
5201 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
5203 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
5204 a "mailto" URL parameter is detected and the "to" array is empty,
5205 initialize "to" with the value of "mailto" before returning it.
5207 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
5208 -composeAction]): rewrote method in a cleaner way and with usage
5209 of the URL extensions to NSString and NSDictionary (see below).
5210 Also, if a "mailto" url parameter is detected, pass it to the
5213 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
5216 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
5217 returns a parameter string to add to a base URL.
5219 * UI/Common/NSString+URL.m ([NSString
5220 -composeURLWithAction:parameters:andHash:useHash]): new method to
5221 compose a complete URL from an object URL with parameters and an
5222 optional '#' character.
5224 * UI/Common/UIxPageFrame.h: separated interface from
5227 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
5229 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
5231 * UI/WebServerResources/generic.js: added code to manage
5232 selections within HTML containers.
5234 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
5235 added method to determine the possible URL for a product-specific
5236 javascript filename of the forme <productname>.js.
5237 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
5238 ([UIxPageFrame -isPopup]): new method to determine whether the
5239 application navigator bar should be displayed (main page) or not
5242 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
5243 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
5244 the user through LDAP.
5246 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5248 * The toolbar code from the MailerUI product was taken, renamed as
5249 "UIxToolBar" and put into UI/Common. Toolbar plists were created
5250 for the Contacts and Scheduler products and put in their respectir
5251 Toolbars/ subdirectories. Finally,
5252 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
5253 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
5254 and an invocation to the UIxToolbar component was put at the top
5255 of UI/Templaces/UIxPageFrame.wox.
5257 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
5258 within the templates whether a separator should be displayed.
5260 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
5261 that returns NO if the toolbar is empty.
5263 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5265 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
5267 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
5268 new toolbar objects.
5270 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
5272 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
5273 linkbanner as a DIV instead of a TABLE.
5275 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
5277 returns 'YES' to request the display of the navigation bar between
5280 2006-06-15 ludovic@inverse.ca
5282 * It's now possible to set the default
5283 domain using for email using the
5284 SOGoDefaultMailDomain preference key.
5286 2006-06-15 ludovic@inverse.ca
5288 * Initial import of SOGo from trunk.