1 2007-11-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3 * SoObjects/Appointments/SOGoAppointmentObject.m: don't take an
4 empty c_name as a valid response when looking up an event. Create
5 one in that case instead.
7 2007-11-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
9 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -signature]):
10 returns the signature for the default identity of the default
12 ([UIxPreferences -setSignature:newSignature]): accessor that sets
13 the default signature.
15 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
16 -composeAction]): append the message signature to the new draft.
18 * SoObjects/Mailer/SOGoMailReply.m ([SOGoMailReply -signature]):
21 * SoObjects/Mailer/SOGoMailForward.m ([SOGoMailForward
22 -signature]): new method that takes the user's signature and put
23 it at the end of the message, if exists.
25 * UI/Common/UIxPageFrame.m ([UIxPageFrame -isSuperUser]): new
26 accessor that forwards the call to the active user.
28 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -signature]): returns the
29 user default signature.
30 ([SOGoUser -isSuperUser]): declares whether the user is listed
31 among the super users.
33 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
34 -setComponent:newComponent]): retain the component object.
35 ([UIxComponentEditor -organizerIdentity]): new accessor method to
36 handle list of possible organizers.
38 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
39 -event]): retain the returned event object.
41 * SoObjects/Appointments/SOGoAppointmentObject.m
42 ([SOGoAppointmentObject -saveComponent:newEvent]): reset the
43 organizer only if there are no attendees AND the owner of the
44 component is not the organizer him-/herself.
46 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
47 -toolbar]): rewrote in a way that ensures that each case is
50 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -isEqual:otherUser]): new
53 * UI/Scheduler/UIxTaskEditor.m ([-acceptAction])
54 ([-declineAction]): commented out unused methods.
56 * UI/MailPartViewers/UIxMailPartICalActions.m
57 ([UIxMailPartICalActions -deleteFromCalendarAction]): actually
58 delete the found object.
60 2007-11-18 Ludovic Marcotte <ludovic@inverse.ca>
62 * SoObjects/Mailer/SOGoMailBodyPart.m
63 SoObjects/Mailer/SOGoMailObject.m
64 UI/MailPartViewers/UIxMailPartViewer.m
65 Added support of messages containing non-textual
68 * UI/MailerUI/UIxMailView.m
69 SoObjects/Mailer/SOGoMailObject.m
70 UI/Templates/MailerUI/UIxMailView.wox
71 Added support for the Reply-To header upon
74 2007-11-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
76 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]):
77 invoke saveComponent:.
79 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -hasOrganizer])
80 ([UIxComponentEditor -organizerName]): new template accessor
81 related to displaying the event's organizer.
82 ([-containsConflict:_component]): removed method.
83 ([UIxComponentEditor -takeValuesFromRequest:_rqinContext:_ctx]):
84 set RSVP to "TRUE" on each attendee.
86 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
87 -saveAction]): invoke saveComponent:.
89 * UI/MailPartViewers/UIxMailPartICalViewer.m
90 ([UIxMailPartICalViewer -isLoggedInUserTheOrganizer]): make use of
91 the -userIsOrganizer: category method.
92 ([-isLoggedInUserAnAttendee]): make use of -userIsParticipant:.
93 ([UIxMailPartICalViewer -hasSenderStatusChanged]): new template
94 accessor that determines whether the "Update" button should be
97 * UI/MailPartViewers/UIxMailPartICalActions.m
98 ([UIxMailPartICalActions -deleteFromCalendarAction]): implemented
100 ([UIxMailPartICalActions -updateUserStatusAction]): implemented
103 * UI/Common/UIxPageFrame.m ([UIxPageFrame
104 -setCssFiles:newCSSFiles]): new accessor that enables the
105 sub-templates to specify extra CSS files to load.
107 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
108 -homeFolderInContext:context]): cache the home folder of the user
109 object instead of the current user.
111 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
112 -deleteEntriesWithIds:ids]): invokes the "prepareDelete" optional
113 method if the child object implements it.
115 * SoObjects/SOGo/SOGoContentObject.m ([-setContentString:])
118 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
119 -setBaseDN:newBaseDNIDField:newIDFieldCNField:newCNFieldUIDField:newUIDFieldmailFields:newMailFieldsandBindFields:newBindFields]):
120 take a new "mailFields" parameter defining an array of fields
121 where to look at when searching the user's emails. It defaults to
122 the standard "mail" LDAP field.
124 * SoObjects/Appointments/SOGoAptMailICalReply.[hm]: new
125 SoComponent implementing a template for ITIP replies.
127 * SoObjects/Appointments/iCalPerson+SOGo.m ([iCalPerson
128 -mailAddress]): new method that returns a properly formatted email
129 address for the specified person entry.
130 ([iCalPerson -uid]): new method that tests whether the user is
131 known to the system and if so, returns its user id.
133 * SoObjects/Appointments/iCalPerson+SOGo.[hm]: new category module.
135 * SoObjects/Appointments/iCalEventChanges+SOGo.m
136 ([iCalEventChanges -sequenceShouldBeIncreased]): determine whether
137 the changes involved need a sequence inscrease, based on the
140 * SoObjects/Appointments/iCalEventChanges+SOGo.[hm]: new category
143 * SoObjects/Appointments/iCalEvent+SOGo.m ([iCalEvent
144 -isStillRelevant]): new overriden method determining the relevance
145 of the current event based on its end date.
147 * SoObjects/Appointments/iCalEvent+SOGo.[hm]: new category module.
149 * SoObjects/Appointments/iCalEntityObject+SOGo.m
150 ([iCalEntityObject -attendeeUIDs]): new category methods that
151 returns an array containing the uids of the system-know attendees.
152 ([iCalEntityObject -isStillRelevant]): new template method.
153 ([iCalEntityObject -itipEntryWithMethod:method]): clone the
154 current entry calendar with the specified ITIP method.
155 ([iCalEntityObject -attendeesWithoutUser:user]): returns an array
156 of attendees while making sure the specified user is not listed.
158 * SoObjects/Appointments/SOGoCalendarComponent.m
159 ([SOGoCalendarComponent -calendar:create:secure]): new name for
160 -calendar:. Added a "secure" parameter that specifies whether a
161 stripped calendar instance is needed or not. Also, we no longer
162 cache the content to simplify handling of new data.
163 ([SOGoCalendarComponent -component:create:secure]): same as above.
164 ([SOGoCalendarComponent
165 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
166 test whether the component is "still relevant" before sending an
168 ([SOGoCalendarComponent -sendResponseToOrganizer]): new method for
169 sending ITIP replies.
170 ([SOGoCalendarComponent -getUIDsForICalPerson:iCalPerson]):
171 removed method. Replaced with -[iCalPerson uid] category method.
173 * SoObjects/Appointments/SOGoAppointmentObject.[hm]: rewrote
174 class. No longer override saveContentString:,
175 saveContentString:baseSequence:, .... Implemented the
176 saveComponent: and the prepareDelete methods instead. Those
177 methods are called only from the web methods. This avoids the
178 risks related to email sending and changes propagation.
180 * UI/Common/UIxTabItem.m: removed useless class module.
182 * UI/Common/UIxTabView.[hm]: removed useless class module.
184 * UI/Common/UIxPrintPageFrame.m: removed useless class module.
186 * UI/Common/UIxAppNavView.m: removed useless class module.
188 2007-11-16 Ludovic Marcotte <ludovic@inverse.ca>
190 * SoObjects/Mailer/SOGoMailBaseObject.m
193 * SoObjects/Mailer/SOGoMailBodyPart.m
194 We also grok image/jpeg and return the SOGoMailBodyPart
195 for attachments fetching.
197 * SoObjects/Mailer/SOGoMailObject+Draft.m
198 Prevent a crash in case body decoding failed during
201 * SoObjects/Mailer/SOGoMailObject.m
202 Improved body decoding during a reply to also try
203 latin1 as an encoding.
205 * UI/MailPartViewers/UIxMailRenderingContext.m
206 Greatly improved the display mechanisms for emails.
207 Also properly consider the content disposition for
210 * UI/MailerUI/UIxMailToSelection.m
211 Removed worthless code.
213 * UI/WebServerResources/MailerUI.css
214 CSS fix for table views.
216 2007-11-15 Ludovic Marcotte <ludovic@inverse.ca>
218 * UI/WebServerResources/MailerUI.js
219 We now check for empty selection and warn the
220 user about it when deleting messages
222 * SoObjects/Mailer/SOGoDraftObject.m
223 Correctly check for the presence of a subject
224 before attempting to forward a message from
227 * SoObjects/Mailer/SOGoMailObject+Draft.m
228 We no longer use "[Fwd: ]" but simply "Fwd:"
229 when forwarding email messages.
231 * SoObjects/SOGo/SOGoUser.m
232 Modified the default forwarding format to be
233 inline instead of "attachment".
235 * SoObjects/Mailer/SOGoDraftObject.m
236 We now create and use a NGMimeContentDispositionHeaderField
237 in order to avoid encoding the whole Content-Disposition
238 header in case a non-ASCII char is present!
240 2007-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
242 * SoObjects/SOGo/iCalEntityObject+Utilities.m ([iCalEntityObject
243 -findParticipant:user]): new method based on the one removed from
244 SOGoCalendarComponent below.
246 * SoObjects/SOGo/iCalEntityObject+Utilities.[hm]: new category
247 module for iCalEntityObject.
249 * SoObjects/Appointments/SOGoCalendarComponent.m
250 ([-findParticipant:user]): removed method.
252 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
253 -setContentString:newContent]): new accessor method.
255 -saveContentString:newContentbaseVersion:newBaseVersion]): invoke
256 -[self setContentString:].
258 * UI/MailPartViewers/UIxMailPartICalViewer.m
259 ([UIxMailPartICalViewer -authorativeEvent]): returns the most
261 ([-isLoggedInUserTheOrganizer]): make use of -[SOGoUser
264 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
265 -stringByConvertingCRLNToHTML]): fixed crashes due to overflows in
266 temporary buffer we are handing.
268 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
269 -setComponent:newComponent]): check that newComponent is non-nil
270 before replacing the default values.
271 ([UIxComponentEditor -calendarList]): privacy is already an ivar.
272 We don't need to refetch it.
274 2007-11-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
276 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
277 -fetchMailForReplying:sourceMailtoAll:toAll]): remove the current
278 user from the list of recipients and make sure no other address is
281 * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
282 -stringByConvertingCRLNToHTML]): build the returned NSString
283 without the ending \0.
285 2007-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
287 * UI/MailPartViewers/UIxMailPartICalViewer.m
288 ([UIxMailPartICalViewer -acceptLink])
289 ([UIxMailPartICalViewer -declineLink])
290 ([UIxMailPartICalViewer -tentativeLink]): removed useless methods.
292 * UI/MailPartViewers/UIxMailPartICalAction.m
293 ([UIxMailPartICalAction -addToCalendarAction])
294 ([UIxMailPartICalAction -deleteFromCalendarAction]): new stub
297 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
298 -lookupImap4BodyPartKey:]): make use of the new method below.
300 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
301 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): new method
302 that returns an appropriate Class depending on a given mime type.
304 * UI/SOGoUI/UIxComponent.m ([UIxComponent -canCreateOrModify]):
305 new boolean accessor that determines whether someone can create
306 (i.e. modify a new entry) or modify an existing entry.
308 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
309 -lookupName:lookupNameinContext:localContextacquire:acquire]):
310 overriden method to bind looked up keys to So methods but by
311 avoiding a call to toOneRelationshipKeys. This will be the top
312 method of the chain, meant to override SoObject's behaviour.
314 * SoObjects/Contacts/SOGoContactLDAPFolder.m
315 ([SOGoContactLDAPFolder
316 -lookupName:objectNameinContext:lookupContextacquire:acquire]):
317 removed hack to prevent [super lookupName...] to read the entire
318 LDAP directory when looking up a record.
320 2007-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
322 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
323 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
326 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
327 ([UIxMailPartHTMLViewer -_attachmentIds]): the reference was one
328 character too short, which cause the images not to be displayed
329 sometimes and crashes to happen whenever the references on a
330 message were wrong (due to bugs in SOPE).
332 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
333 -hasMessageAttachment]): consider an attachment any content that
334 has a non-nil disposition.
336 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
337 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
338 fixed method to make use of the parameters instead of the useless
339 remains that weren't even initialized.
341 * SoObjects/Appointments/SOGoAppointmentObject.m
342 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
343 don't propagate the event among the attendees if this is not an
345 ([SOGoAppointmentObject -deleteWithBaseSequence:]): same as above.
347 * Main/SOGo.m ([SOGo -authenticatorInContext:context]): make use
348 of the new category method below.
350 * SoObjects/SOGo/WORequest+SOGo.m ([WORequest
351 -handledByDefaultHandler]): new method that returns whether this
352 is an "so" or alike request.
354 * SoObjects/SOGo/WORequest+SOGo.[hm]: new category module.
356 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
357 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
358 write the new folder's name in the folder cache.
360 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
361 -calendars]): same as below.
363 * UI/Contacts/UIxContactsListViewContainer.m
364 ([UIxContactsListViewContainer -currentContactFolderName]):
365 translate the display name if its the default one.
367 * SoObjects/Appointments/SOGoAppointmentFolder.m
368 ([SOGoAppointmentFolder -create]): overriden method that invokes
369 its ancestor and then activate itself within the user settings.
371 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
372 -appendPersonalSources]): when the user is the owner of the
373 current folder, we create the "personal" folder if it doesn't
374 exist by invoking "create".
376 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
377 -primaryFetchProfile]): when no row is returned, we initialize
378 "values" to a new dictionary. This solves a bug where the defaults
379 would not be initialized properly.
381 2007-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
383 * SoObjects/SOGo/SOGoGCSFolder.m ([-compare:otherFolder]): method
384 moved into the SOGoFolder class.
386 * SoObjects/Appointments/SOGoAppointmentObject.m
387 ([SOGoAppointmentObject -saveContentString:_iCalinUIDs:_uids]):
388 simplified method by directly building a similar appointment
389 object with the current folder as container.
391 * SoObjects/Contacts/SOGoContactLDAPFolder.m
392 ([SOGoContactLDAPFolder
393 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
394 take the content of an object returned by
395 lookupName:inContext:acquire: instead of the dictionary passed as
396 parameter since it represents a flattened entry return by
397 lookupContactsWithFilter...
399 * SoObjects/Contacts/SOGoFolder+CardDAV.m: NSObject+CardDAV
400 category renamed to SOGoFolder+CardDAV.
402 * SoObjects/SOGo/SOGoParentFolder.m: no longer a subclass of
403 SOGoObject, but of SOGoFolder instead.
405 * SoObjects/SOGo/SOGoUserFolder.m: no longer a subclass of
406 SOGoGCSFolder, but of SOGoFolder instead.
408 * SoObjects/Appointments/SOGoAppointmentFolder.m
409 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): fixed
410 to take the new SOGoParentFolder class into account. Also, create
411 the personal folder if it doesn't exist.
413 * SoObjects/SOGo/SOGoFolder.[hm]: new class module implementing
414 the parent of all SOGo containers.
416 * SoObjects/SOGo/SOGoGCSFolder.[hm]: SOGoFolder class renamed to
419 2007-11-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
421 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection
422 -getAddressesFromFormValues:_dict]): take NSString and NSArray
423 values. Ignore addresses with a length of 0.
425 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -mailAccounts]): we now
426 fetch the accounts from the user defaults and create default
429 2007-11-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
431 * UI/MailPartViewers/UIxMailPartTextViewer.m
432 ([UIxMailPartTextViewer -flatContentAsString]): re-added
433 conversion of line-break to sequences of HTML "BR", with a fast
436 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
437 -flatContentAsString]): simplified method now that we know
438 -[NSString stringWithData:usingEncodingNamed:] has a more robust
441 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
442 -showToAddress]): the answer is cached.
444 * UI/Common/UIxObjectActions.m ([UIxObjectActions +initialize]):
445 read "SOGoACLsSendEMailNotifications" from the user defaults to
446 determiner whether to send an email when a user is added or
447 removed from an object's acl.
449 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
450 -contentForEditing]): make sure the htmlContent flag is set to NO
451 when we select the textual part. Also we select only the relevant
454 * UI/MailerUI/WOContext+UIxMailer.m ([-mailSubjectFormatter]):
457 * UI/MailerUI/UIxMailView.m ([UIxMailView -messageSubject]): new
458 method replacing -objectTitle, written like the ones below.
460 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
461 -messageSubject]): rewrote method to act the one below.
463 * UI/MailPartViewers/UIxMailPartMessageViewer.m
464 ([UIxMailPartMessageViewer -messageSubject]): new method that
465 returns the decoded mail subject or "Untitled" if the subject is
468 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
469 -decodedSubject]): new method that invoke -decodedSubject from the
470 NSString and NSData class, depending on the identity of the
471 subject obtained from the envelope.
473 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
474 -subjectForReply]): take the value of -[SOGoMail decodedSubject]
475 instead of the subject of the envelope.
476 ([SOGoMailObject -filenameForForward]): same as above.
477 ([SOGoMailObject -subjectForForward]): same as above.
479 * SoObjects/Mailer/NSString+Mail.m ([NSString -decodedSubject]):
480 same as below for NSString.
482 * SoObjects/Mailer/NSData+Mail.m ([NSData -decodedSubject]): new
483 method that decodes the subject of a mail taken as an NSData
484 instance. Handling the exceptions and the badly formatted headers.
486 * UI/MailerUI/UIxSubjectFormatter.[hm]: dropped class module.
488 2007-11-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
490 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
491 -deleteEntriesWithIds:ids]): make sure the objects returned by
492 lookupName:... are not instances of NSException.
494 2007-11-03 Ludovic Marcotte <ludovic@inverse.ca>
496 * UI/Scheduler/UIxAppointmentEditor.m
497 Fixed monthly recurrences support.
499 2007-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
501 * SoObjects/Appointments/SOGoAppointmentObject.m
502 ([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
503 sent when modifying an event, when the event was considered
504 relevant. The same thing is now implemented for event deletion.
506 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
507 -primaryFetchProfile]): make sure that the deserialized "values"
508 is an instance of NSMutableDictionary, otherwise we override it
511 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
512 -contentForReply]): make use of the SOGoMailReply WO page.
514 * SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
515 from SOGoMailForward to handle mail replies instead. Only three
516 methods remaining: date, from and messageBody. The latter is
519 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
520 -fetchMailForForwarding:sourceMail]): fetch attachments for
523 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
524 -hasMessageAttachment]): initialize hasAttachment with "NO" to
525 avoid false positives.
527 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
528 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
529 set title to an empty string where the event/task summary is null.
531 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
532 -setHeaders:newHeaders]): make sure there is a message id in the
533 headers dictionary, if not, generate one.
534 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
535 message id from the existing draft.
536 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
537 message id in the header map.
539 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
540 -deleteFolderAction]): no longer prefix the target folder with
543 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
544 -listMailboxesAction]): base the folder type on the folder
547 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
548 -lookupName:_keyinContext:acquire:_acquire]): compare the full
549 traversal to the potential looked up folder with the special
550 folder names and return an object with the appropriate
551 SOGoMailFolder subclass.
553 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
554 -traversalFromMailAccount]): don't prepend the whole string with
557 * SoObjects/Mailer/SOGoMailAccount.m
558 ([-lookupSentFolder:_keyinContext:_ctx])
559 ([-lookupDraftsFolder:_keyinContext:_ctx])
560 ([-lookupTrashFolder:_keyinContext:_ctx])
561 ([-lookupFiltersFolder:_key:_ctx]): removed methods.
562 ([SOGoMailAccount -inboxFolderNameInContext:])
563 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
564 ([SOGoMailAccount -sentFolderNameInContext:])
565 ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
566 the resulting name with "prefix" since we might return a nested
568 ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
569 names with "/". Sorts the resulting folder list with
570 localizedCaseInsensitiveCompare: instead of
571 caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
572 that were removed, instead, we choose the appropriate class
573 depending on the folder name. And since we are in SOGoMailAccount,
574 we don't have to compute a traversal path to match the key with
577 -folderWithTraversal:traversalandClassName:className]): new method
578 that returns an instance of the specified SOGoMailFolder subclass,
579 based on the traversal path passed as parameter.
580 ([SOGoMailAccount -inboxFolderInContext:_ctx])
581 ([SOGoMailAccount -draftsFolderInContext:_ctx])
582 ([-sentFolderInContext:_ctx])
583 ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
584 -folderWithTraversal:andClassName: method described above.
586 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
587 -primaryFetchProfile]): make use of -[NSPropertyListSerialization
588 propertyListFromData:mutabilityOption:format:errorDescription:] to
589 deserialize the plist. Removed variant for libFoundation since it
590 should support the above.
591 ([AgenorUserDefaults -generateSQLForInsert])
592 ([AgenorUserDefaults -generateSQLForUpdate]): make use of
593 -[NSPropertyListSerialization
594 dataFromPropertyList:format:errorDescription:] to serialize the
595 plist. Removed variant for libFoundation since it should support
596 the above. Escape the backslashes from the resulting string.
598 2007-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
600 * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
601 SOGoMailFolder: SOGoMailSpecialFolder.
603 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
604 -traversalFromMailAccount]): overridden method that returns the
605 initialized mutable string.
606 ([SOGoMailAccount -allFolderPaths]): take the special folder paths
607 with -traversalFromMailAccount and reposition them at the
608 beginning of the list. By creating the special folders during that
609 request, we also make sure that the folder exists thanks to the
610 new initialisation method of the new "SOGoSpecialMailFolder"
612 ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
614 ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
616 ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
617 longer use lookupImap4Folder.
618 ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
621 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
622 -traversalFromMailAccount]): new method that returns the full
623 IMAP4 path to the object.
625 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
626 "superUsernames" after fetching it from the ud.
628 2007-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
630 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
631 -eventsListAction]): substitude the start and end date with their
632 UTC counterpart, taking into account the offset from UTC related
633 to those dates instead of the current one. This renders
634 -[UIxCalMainView -userUTCOffset] obsolete because the computings
635 that occured in javascript are now done server-side.
637 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
638 removed obsolete method.
640 * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
641 method converting html content to plain text.
643 * SoObjects/Mailer/NSString+Mail.[hm]: new category module
644 enhancing NSString with utility methods pertaining to mail handling.
646 * SoObjects/Mailer/SOGoMailObject.m
647 ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
649 -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
650 modified method to be always recursive and to take an array of the
651 accepted mime-types as parameter. The returned array now contains
652 the mime-type as well as the part keys.
654 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
655 -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
656 ([SOGoMailObject -contentForEditing]): rewrote method to take into
657 account the first text/plain part or the first text/html part
658 converted to text/plain with our new -[NSString htmlToText]
661 * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
662 "replyToAll:" with YES as parameter instead of NO.
664 2007-10-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
666 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
667 -davContentType]): ignore any possible parameter taken from the
668 mime-info of the body part.
670 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
671 -lastFirstMessageNumber]): new accessor that returns the first
672 message number of the last series of messages.
673 ([UIxMailListView -fetchKeys]): request the bodystructure for each
675 ([UIxMailListView -hasMessageAttachment]): extract the attachment
676 information from the message bodystructure.
678 2007-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
680 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
681 -GETAction:]): use the "application/octet-stream" mime type for
682 elements of type "application/x-xpinstall" to avoid confusing
685 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
686 ([UIxPreferences -itemMessageCheckText])
687 ([UIxPreferences -userMessageCheck])
688 ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
689 methods for handling the retrieval of new messages automatically.
691 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
692 that returns the interval of time between automatic message
695 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
696 -defaultAction]): now expunges the last folder marked for expunge.
698 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
699 -trashInContext:_ctx]): now marks the container folder for
702 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
703 -markForExpunge]): new method that marks the folder for the next
704 automatic expunge operation in the user settings.
705 ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
706 takes the last folder marked for expunge, expunges it and removes
707 it from the user settings, if it exists.
709 2007-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
711 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
712 -messageSubjectCellStyleClass]): added support for replied,
713 forwarded, forwarded and replied mails.
715 * SoObjects/Mailer/NSData+Mail.m ([NSData
716 -bodyDataFromEncoding:encoding]): new utility method that decodes
717 the NSData instance properly depending on the encoding string
720 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
721 -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
723 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
724 -stringForData:_datapartInfo:_info]): simplified by invoking
725 -bodyDataFromEncoding: from our new NSData category methods.
727 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
728 -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
729 where only the body part of the first of the keys fetched was
730 returned. Also decodes the body parts properly following their
733 * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
734 extends the NSData class with utility methods useful for handling
737 2007-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
739 * SoObjects/SOGo/NSArray+Utilities.m
740 ([NSArray -stringsWithFormat:format]): replace instances of NSNull
743 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
744 -keysWithFormat:keyFormat]): replace instances of NSNull with
747 * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
748 empty, use "c_cn" instead.
750 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
751 ([SOGoMailAccount -draftsFolderInContext:_ctx])
752 ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
753 of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
754 no always be specified from the root instead of sometimes from the
757 2007-10-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
759 * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
760 ([UIxPageFrame -productLocalizableStrings]): invoke the new
761 +[SOGoUser language] method if the user is nil.
763 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
764 that returns any generically-found language.
765 ([SoUser -language]): modified to call the above.
766 ([SOGoUser -language]): modified to call the above if the user
767 language has a null length.
769 * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
770 -davEntityTag]): modified to return the "hash" of the vCard string.
772 * UI/MailerUI/UIxMailActions.m ([UIxMailActions
773 -removeAllLabelsAction]): new method that removes all label flags
774 from the associated message.
775 ([UIxMailActions -addLabel1Action]
776 [UIxMailActions -addLabel2Action]
777 [UIxMailActions -addLabel3Action
778 [UIxMailActions -addLabel4Action]
779 [UIxMailActions -addLabel5Action]): new methods that adds label
780 flags to the associated message.
781 ([UIxMailActions -removeLabel1Action]
782 [UIxMailActions -removeLabel2Action]
783 [UIxMailActions -removeLabel3Action
784 [UIxMailActions -removeLabel4Action]
785 [UIxMailActions -removeLabel5Action]): new methods that removes
786 label flags from the associated message.
788 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
789 new accessor that returns the labels associated with the message.
791 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
792 -allFolderPaths]): new method that returns all the paths of all
793 the subfolders of the folder object.
794 ([SOGoMailFolder -allFolderURLs]): new method replacing
797 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
798 -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
799 role from its parent folder.
801 2007-10-19 Francis Lachapelle <flachapelle@inverse.ca>
803 * SoObjects/SOGo/SOGoUser.m
804 ([SOGoUser -rolesForObject:objectinContext:context]): allow
805 multiple super usernames to be defined. The user default
806 SOGoSuperUsername is renamed SOGoSuperUsernames and must be
809 2007-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
811 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
812 -userInContext:]): override the super method by returning
813 anonymous if the super returns nil.
815 * UI/Common/UIxPageFrame.m ([UIxPageFrame
816 -productLocalizableStrings]): new method that returns the
817 product-specific translation dictionary as a JSON hash.
818 ([UIxPageFrame -commonLocalizableStrings]): same as above but for
819 the "Common" framework.
820 ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
821 the requestor components to require additional Javascript files.
822 This is useful now that all the scripts are loaded at the end of
824 ([UIxPageFrame -additionalJSFiles]): new getter related to the
827 2007-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
829 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
830 implemented new web method.
832 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
833 -copyToFolderNamed:folderNameinContext:]): new method with the
834 code cut/pasted from -moveToFolderNamed:inContext:.
835 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
836 modified to use the code from -copyToFolderNamed:inContext:, which
837 is common between the two actions.
839 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
840 ([SOGoMailAccount -sentFolderNameInContext:])
841 ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
842 the user settings into account.
844 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
845 ([UIxMailFolderActions -setAsSentFolderAction])
846 ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
847 that change the purpose of the active folder to "Sent", "Drafts"
850 * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
851 returns the subject as quoted-printable.
853 * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
854 SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
855 the "aclMethod" method for the subsequent language-dependent
858 * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
859 returns the subject as quoted-printable.
861 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
862 -dealloc]): release item, aptStartDate and aptEndDate.
864 2007-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
866 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
867 -initWithName:newNameinContainer:newContainer]): the owner of a
868 shared folder is set to "nobody" by default.
870 * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
871 that returns whether the object has an owner or not.
873 2007-10-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
875 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
876 the folder even if the current user is not its owner.
878 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
880 * We now send advisory emails when folders
881 are created / deleted.
883 * Fixed the sending of advisory emails upon
884 ACL changes on folders.
886 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
888 * UI/Scheduler/UIxComponentEditor.m
889 Implemented event/task priority support.
891 * SoObjects/Contacts/SOGoContactGCSFolder.m
892 Added CardDAV support.
894 * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
895 Implemented From: based on LDAP results based on
896 the MailFieldNames attribute (an array) specified
897 in every LDAP-based authentication sources.
899 * UI/MailPartViewers/UIxMailPartTextViewer.m and
900 UI/WebServerResources/MailerUI.css
901 We avoid replacing "\r\n" and "\n" with <br /> and
902 rather use CSS capabilities for proper formatting.
903 This is _WAY_ faster on very large mails.
905 2007-10-10 Francis Lachapelle <flachapelle@inverse.ca>
907 * UI/Scheduler/UIxComponentEditor.m
908 ([UIxComponentEditor -componentCalendar]): returns the calendar
909 object of the current event.
911 2007-10-05 Ludovic Marcotte <ludovic@inverse.ca>
913 * UI/WebServerResources/MailerUI.js
914 We check if at least one message is selected
915 before performing a Reply/Reply All/Forward
917 * SoObjects/Appointments/SOGoAppointmentFolder.m
918 and others - implemented support for recurring
919 events (with some known limitations right now,
920 all soon to be fixed).
922 2007-10-04 Francis Lachapelle <flachapelle@inverse.ca>
924 * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
925 the constraint that a username can't start with a digit.
927 2007-10-02 Francis Lachapelle <flachapelle@inverse.ca>
929 * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
930 repository to Inverse's branch.
932 2007-09-28 Francis Lachapelle <flachapelle@inverse.ca>
934 * SoObjects/Mailer/SOGoDraftObject.m
935 ([SOGoDraftObject -isValidAttachmentName:_name]): removed
936 constraint on space in file name.
937 ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
938 now removes from file name all characters preceding a backslash.
939 This happens with IE7 because the complete attachment file path
942 2007-09-25 Francis Lachapelle <flachapelle@inverse.ca>
944 * SoObjects/Appointments/SOGoAptMailNotification.m
945 ([SOGoAptMailNotification -appointmentURL]): set personal as the
946 default calendar where to add the event.
948 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
949 activate the SOGoUIxDefaultModule user defaults.
951 2007-09-21 Francis Lachapelle <flachapelle@inverse.ca>
953 * UI/SOGoUI/UIxComponent.m
954 ([UIxComponent -shortUserNameForDisplay]): returns the string
955 "wrongusernamepassword" when authentication failed.
957 2007-09-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
959 * UI/MailPartViewers/UIxMailPartICalViewer.m
960 ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
961 entry of the Calendars parent folder.
963 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
964 -messageSubject]): new accessor method to work-around a problem
965 within SOPE where a subject could be returned as an NSData.
967 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
968 -appendPersonalSources]): make sure the value of the "c_path4" of
969 the returned rows are not NSNull, otherwise, discard them.
971 2007-09-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
973 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
974 -compare:otherFolder]): new overriden method that compares two
975 contact foldes based on their class and then transfer the control
976 to the super method in SOGoFolder.
978 * SoObjects/Contacts/SOGoContactLDAPFolder.m
979 ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
980 compare two contact folders based on their class and then their
983 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
984 new method for sorting folders. The folders are compared based on
985 their ownership, whether they are a main folder and finally
986 depending on their display name.
988 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
989 -pathArrayToSOGoObject]): do not reorder the paths if the third
990 element is an instance of NSNull.
992 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
993 -subFolders]): returns a sorted array using the "compare:"
996 2007-09-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
998 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
999 -calendars]): also returns the owner of the listed folders.
1001 * SoObjects/Appointments/SOGoAppointmentFolder.m
1002 ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
1004 * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
1005 method into UIxFolderActions.
1007 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1008 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
1009 freebusy info from the "personal" calendar.
1011 * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
1012 -createFolderAction]): new standardized method for requesting
1013 folder creations among gcs-based modules.
1015 * UI/Common/UIxParentFolderActions.[hm]: new action class module.
1017 * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
1018 module, equivalent to the SOGoParentFolder's child
1019 SOGoContactFolders, but for calendars.
1021 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
1022 method that returns translated strings for controller bundles
1023 (same as what UIxComponent does for view bundles).
1024 ([SOGoObject -pathArrayToSOGoObject]): new method that returns
1025 the real path to a subscribed folder (if subscribed).
1026 ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
1027 ([SOGoObject -globallyUniqueObjectId]): new instance method
1028 calling its class equivalent.
1030 2007-09-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1032 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
1033 whether the user is logged in and if so, redirect to his/her
1035 ([SOGoRootPage -appendToResponse:inContext:]): removed useless
1038 2007-09-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1040 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1041 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1043 ([SOGoFolder -displayName]): new method.
1044 ([SOGoFolder -delete]): accept to proceed only if nameInContainer
1047 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1048 ([SOGoContactLDAPFolder
1049 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1050 renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
1052 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1053 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1054 removed method, reimplemented in SOGoFolder.
1055 ([SOGoContactGCSFolder -displayName]): removed method,
1056 reimplemented in SOGoFolder.
1057 ([-delete]): removed method, modified in SOGoFolder.
1059 * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
1060 a subclass of SOGoParentFolder.
1062 * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
1063 from SOGoContactFolders and modified to be more content-independent.
1065 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
1066 ([UIxMailActions -markMessageReadAction]): new methods moved from
1067 UIxMailListView and adapted to invoke the client object directly,
1068 since the previous versions had to to a lookup from the parent
1071 * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
1072 method into UIxMailActions.
1073 ([-markMessageReadAction]): same as above.
1074 ([-viewAction]): removed useless method.
1075 ([-javaScriptOK]): removed useless method.
1076 ([-isJavaScriptRequest]): removed useless method.
1077 ([-lookupActiveMessage]): removed useless method.
1079 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1080 -responseWithStatus:status]): new method that returns a WOResponse
1081 initialized with the specified status code.
1082 ([WODirectAction -responseWith204]): new method that invokes the
1083 above one with "204" as parameter.
1084 ([WODirectAction -redirectToLocation:newLocation]): rewrote method
1085 to make use of -responseWithStatus:.
1087 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
1088 method that returns a WOResponse initialized with the 204 status
1091 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
1092 always use a "not deleted" search qualifier along with the user
1093 qualifier (if present).
1095 2007-09-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1097 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1098 -contactSearchAction]): only return the records which have an
1101 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1102 -trashInContext:_ctx]): no longer expunge the mailbox after
1103 marking a message deleted.
1104 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
1107 * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
1108 ([-trashAction]): moved method into UIxMailActions.
1109 ([-moveAction]): moved method into UIxMailActions.
1111 2007-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1113 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1114 ([_UIxHTMLMailContentHandler
1115 -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
1116 comments from the CSS code, do not add the CSS code to the body
1117 content and remove references of body from the CSS declarations.
1118 ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
1119 ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
1120 common with cssContent in a different method and invoke it only
1123 * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
1124 instead of UIxPageFrame.
1126 2007-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1128 * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
1129 ([-appendToResponse:responseinContext:ctx]): commented out.
1130 ([SOGoRootPage -connectURL]): new accessor that returns the full
1131 url the the "connect" method.
1132 ([-connectAction]): rewrote method to return a properly formatted
1133 auth. cookie based on the username and password passed as
1136 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1137 set the value of the cookie to "discard" and set its expiration
1140 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1141 -preprocessCredentialsInContext:context]): consider the user
1142 anonymous if the cookie value is "discard".
1143 ([SOGoWebAuthenticator
1144 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1145 set the expiration date of the cookie to yesterday.
1147 * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
1148 returns the path to the application if the clientObject is not a
1151 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
1152 moved the requirement of authentication from the SOGo application
1155 * SoObjects/Appointments/SOGoAppointmentObject.m
1156 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
1157 check whether the new appointment object is still relevant before
1158 sending a notification.
1160 2007-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1162 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
1163 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
1164 render the login page through the SoDefaultRenderer.
1166 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
1167 -isPublicInContext:localContext]): new overriden method that
1170 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1171 -currentCalendarLogin]): replace css-unsafe characters with _.
1173 * UI/SOGoUI/UIxComponent.m ([UIxComponent
1174 -shortUserNameForDisplay]): simplified method.
1175 ([-user]): removed method since [context activeUser] is as useful.
1177 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1179 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1180 set the cookie path to "/".
1182 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
1183 authenticator based on the request handler key. "dav" returns the
1184 SOGoDAVAuthenticator, anything else returns the Web authenticator.
1186 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
1187 "SOGoAuthenticator".
1189 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
1190 implementing a subclass of SoCookieAuthenticator, designed for
1191 web-based cookie authentication of users.m
1193 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
1194 new method that resets the authentification cookie.
1196 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1198 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
1199 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
1200 didBind to NO to make sure no false authentication is returned if
1201 the bind operation is not executed.
1203 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1205 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
1206 "In-Reply-To" header field when replying.
1208 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
1209 table field names that are queried.
1211 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1212 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
1213 add the "c_" prefix to the quick table field names that are
1216 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1218 * SoObjects/Appointments/SOGoAppointmentFolder.m
1219 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
1220 "personal" to the ocs path of the appointment folder.
1222 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1223 -flatContentAsString]): use latin1 when the encoding is not
1224 specified, and to reencode data chunk which were not correctly
1225 decoded with the original charset.
1227 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
1228 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
1229 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
1230 ([SOGoAppointmentFolder
1231 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
1232 override those methods to use the "personal" additional directory.
1234 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
1235 append "/personal" to the calendar path to simulate a single
1236 calendar in a choice of many.
1238 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1239 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
1240 methods back here. Moved the folder existence check here, and do
1241 it on self only when the lookup happens for a non-folder object.
1242 This permits to accept entries for folders with parents who
1245 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1247 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1248 -shouldTakeValuesFromRequest:requestinContext:context]): same as
1251 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1252 -shouldTakeValuesFromRequest:requestinContext:context]):
1253 redesigned method since any method called can be received from a
1254 POST or a GET. Instead we check the method call itself and we
1255 accept only if it has the "save" prefix.
1257 * SoObjects/Appointments/SOGoAptMailNotification.m
1258 ([SOGoAptMailNotification -getSubject]): returns the subject an a
1259 quoted-printable encoded string, if needed.
1261 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1262 -asQPSubjectString:encoding]): moved method into
1263 NSString+Utilities.m.
1265 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1267 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1268 -messageForwardingList])
1269 ([UIxPreferences -itemMessageForwardingText])D
1270 ([UIxPreferences -userMessageForwarding])
1271 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
1272 new template methods for manage the user preference regarding
1275 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
1276 algorithm to return, in order, the user's defined language or the
1277 first browser language or, finally, the default language.
1278 ([SOGoUser -messageForwarding]): new method that returns the user
1279 preference for message forwarding: "inline" or "attached",
1280 defaulting to "attached".
1282 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1283 -contentForInlineForward]): new method that returns the content of
1284 the message for inline forwarding based on the SOGoMailForward
1287 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1288 -fetchMailForForwarding:sourceMail]): check the user preference
1289 for message forwarding and compose inline forwarded messages if required.
1291 * SoObjects/Appointments/SOGoCalendarComponent.m
1292 ([SOGoCalendarComponent
1293 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1294 now use a template based on the language returned from the
1297 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
1298 a subclass of SOGoMailForward for English locale.
1300 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
1301 a subclass of SOGoMailForward for French locale.
1303 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
1304 helps build template for inline forwarded messages.
1306 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1308 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
1309 to handle "<var:if-ie>" template tags.
1311 * UI/SOGoElements: new extension bundle containing sogo-specific
1314 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1315 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
1316 selected in the dialog.
1317 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
1318 first category, if ever, of the calendar entity.
1320 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1321 -composeAction]): restored method since it is needed by the
1324 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1325 -composeAction]): the address fields should be arrays and not
1328 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
1329 that returns the build date of SOGo in the template.
1331 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1333 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1334 -_flattenedRecords:records]): when the c_cn field is empty,
1335 returns set a formatted string with the concatenation of
1336 c_givenname and c_sn as the displayName.
1338 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1339 -isValidMailAccountName:_key]): prevent unknown accounts from
1342 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1343 -pathToAttachmentObject]): we no longer need the filename
1344 extension for SoLookup...
1346 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1347 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
1348 filename to have an extension, and thus accept any filename.
1350 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1351 -currentCName]): new method that returns the c_name of the
1352 contact, correctly escaped to be passed by url afterwards.
1354 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1355 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
1356 instance of [self decodedFlatContent] instead of the buggy
1357 NSString from [super flatContentAsString] to the parser.
1359 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1361 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
1362 new category method to reponds to the "delete" web command on
1364 ([UIxMailActions -deleteAttachmentAction]): new category method to
1365 reponds to the "deleteAttachment" web command on drafts, taking
1366 the "filename" url parameter into account.
1368 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1369 -contentForEditing]): new method that retrieve the editable mail
1371 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
1372 returns the body keys for attached files (parts with a "filename"
1375 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1376 -asQPSubjectString:encoding]): do not change the string if the
1377 encoded string has the same length (which means it is already
1379 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
1380 that retrieve a draft along with its attachments for editing.
1381 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
1382 choke if the "to" header field is empty.
1383 ([SOGoDraftObject -delete]): new method to delete the draft folder
1384 whenever operations are done.
1386 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1388 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
1389 useless stub method, of which the intention was implemented in
1391 ([-lookupSentFolderUsingAccount]): removed obsolete method.
1392 ([-selectedMailIdentity]): removed obsolete method.
1393 ([-lookupSentFolderUsingFrom]): removed obsolete method.
1394 ([-storeMailInSentFolder:_path]): removed obsolete method, of
1395 which the mechanism has been put in -[SOGoDraftObject sendMail]
1397 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
1398 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
1399 adapted algorithms to the new SOGoDraftObject methods.
1400 ([-deleteAction]): removed method since local draft objects cannot
1401 be removed by the user.
1403 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1404 -expungeAction]): new method replacing the one previously found in
1406 ([UIxMailFolderActions -createFolderAction])
1407 ([UIxMailFolderActions -renameFolderAction])
1408 ([UIxMailFolderActions -deleteFolderAction])
1409 ([UIxMailFolderActions -emptyTrashAction])
1410 ([UIxMailFolderActions -subscribeAction])
1411 ([UIxMailFolderActions -unsubscribeAction]): error situations
1412 should have http return code 500 instead of 403.
1414 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1415 -composeAction]): new method replacing the one previously in
1418 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1419 -imap4URLString]): removed overriden method (see below).
1421 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
1422 cache the mailbox acl.
1423 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
1424 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
1426 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
1427 the new method of determining the users mail accounts.
1429 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
1430 longer adds a "/" at the end of the string (the default for
1431 folders), therefore this will be overriden in SOGoMailFolder
1432 rather than in SOGoMailObject.
1434 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
1435 method, moved into the new UIxMailActions module class.
1437 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
1438 -newDraft]): new method that returns a new SOGoDraftObject
1439 instance with a unique filename based on the current timestamp and
1440 the "newDraft" prefix.
1442 -lookupName:nameinContext:localContextacquire:acquire]): overriden
1443 method by detecting local drafts with their "newDraft" prefix.
1444 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
1446 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
1447 from scratch by making it a subclass of SOGoMailFolder.
1449 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
1452 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
1455 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
1458 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
1459 new method, initializing the new ivars: IMAP4ID, headers, text,
1460 sourceURL and sourceFlag.
1461 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
1462 ([-_ensureUserSpoolFolderPath])
1463 ([-saveMimeMessageToTemporaryFileWithHeaders:])
1464 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
1465 ([-deleteTemporaryMessageFile:], [-delete], [-content])
1466 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
1467 ([-uid], [-flags], [-size], [-envelope]): removed methods.
1468 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
1470 ([SOGoDraftObject -setSourceURL:newSourceURL])
1471 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
1472 methods to store the url of the original message between accesses
1473 so that, depending on the action taken (forward or reply), the
1474 correct flag can be given.
1475 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
1476 the imap4 id that is returned for the message whenever it is saved
1477 into the drafts folder.
1478 ([SOGoDraftObject -save]): new method that takes in charge the
1479 saving of the message in the IMAP drafts folder.
1480 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
1481 new method that fills the original data of the new message with
1482 the reply content of the original message.
1483 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
1484 above for message forwarding.
1485 ([-spoolFileManager]): removed useless method (only returned the
1486 default filemanager...)
1487 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
1488 the resulting message as an NSData chunk.
1490 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
1491 containing a rewrite of the mail action methods found in
1492 UI/Mailer/, that needed to be put in the SOGoMailObject class.
1493 ([SOGoMailObject -subjectForReply]): new method that returns a
1494 subject suitable for replies.
1495 ([SOGoMailObject -contentForReply]): new method that returns the
1496 textual content of an email, quoted for replying.
1497 ([SOGoMailObject -filenameForForward]): new method that returns
1498 the name of the filename that should contain the forwarded
1499 message, based on its subject.
1500 ([SOGoMailObject -subjectForForward]): explicit.
1502 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1504 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1505 -mailAccounts]): rewrote method to return the name of the mail
1506 accounts now available with the -[SOGoUser mailAccounts] method.
1507 ([UIxMailMainFrame -showLinkBanner]): removed method.
1508 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
1509 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
1510 ([UIxMailMainFrame -rootURL]): removed method.
1511 ([UIxMailMainFrame -userRootURL]): removed method.
1512 ([UIxMailMainFrame -calendarRootURL]): removed method.
1513 ([UIxMailMainFrame -contactsRootURL]): removed method.
1514 ([UIxMailMainFrame -hasErrorText])
1515 ([UIxMailMainFrame -errorText])
1516 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
1517 ([-composeAction]): removed method. Now provided by
1518 UIxMailAccountActions.
1519 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
1520 ([UIxMailMainFrame -hideFolderTree]): removed method.
1521 ([UIxMailMainFrame -treeRootClassName]): removed method.
1522 ([UIxMailMainFrame +initialize]): removed method.
1523 SOGoMailTreeRootClass userdefaults will no longer have any effect.
1525 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1526 -redirectToLocation:newLocation]): new method that implements the
1527 same functionality as WOComponent.
1529 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
1531 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
1532 method that returns whether the current mail is store in the
1533 drafts folder hierarchy.
1535 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
1536 ([-primaryEmail]): removed method.
1537 ([SOGoUser -primaryIMAP4AccountString]): removed method.
1538 ([SOGoUser -mailAccounts]): new method that returns an array
1539 containing description dictionaries for all the user mail
1540 accounts. Each account also contain the user's identities for that
1542 ([SOGoUser -allIdentities]): new utility method that returns all
1543 the user identities on all accounts.
1544 ([SOGoUser -primaryIdentity]): new method return the first
1545 identity of the first account.
1547 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
1549 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1550 -isInDraftsFolder]): returns NO.
1551 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
1553 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
1555 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1556 -isInDraftsFolder]): new method that detects if self is contained
1557 by the drafts folder by calling itself on the container object.
1559 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
1561 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
1562 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
1563 return the name of the mail accounts now available with the
1564 -[SOGoUser mailAccounts] method.
1566 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
1569 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
1572 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1573 -keysWithFormat:format]): method that forward the method of the
1574 same name to each member of the array, considering they all are
1575 instances of NSDictionary.
1576 ([NSArray -objectsForKey:key]): same principle as above.
1577 ([NSArray -flattenedArray]): new method that transforms an array
1578 of arrays into a single array containing all the elements of the
1581 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1582 -keysWithFormat:keyFormat]): new method inspired by the python
1583 string formatting system and which replaces occurences of "%{key}"
1584 by the corresponding keys.
1586 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1588 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
1589 sql script before the generic one when initializing mandatory
1592 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1594 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1595 -pureEMailAddress]): new utility method inspired by the
1596 "_rawSender" private method in SOGoDraftObject, which it now
1599 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
1600 provides a common API for sending emails, no matter what the
1603 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1605 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1606 -quotasAction]): invoke "relativeImap4Name" instead of
1607 "nameInContainer" since the latter also returns the "folder"
1610 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1611 -listMailboxesAction]): declare the output as text/plain in UTF-8.
1613 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1614 -deleteFolderAction]): fixed the url of the destination folder.
1616 * Main/SOGo.m ([SOGo +initialize]): show the build date and
1617 hostname at startup.
1619 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1621 * SoObjects/Appointments/SOGoCalendarComponent.m
1622 ([SOGoCalendarComponent
1623 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1624 set the mail date to the current date string returned by our
1625 rfc822DateString extension method.
1627 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1628 -_gcsFoldersFromFolder:): ignore the personal folders who are
1629 returned but don't really exist.
1631 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
1633 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
1634 has to return only one element.
1636 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1638 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1639 -content]): new method returning the decoded content of the
1640 corresponding attachment as an NSData instance.
1641 ([UIxMailPartViewer -filename]): if the "filename" parameter of
1642 the metadata parameterList is empty, try to find out the filename
1643 from the "disposition" metadata returned with the BODYSTRUCTURE
1646 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1647 -composeAction]): prefix the INBOX folder with "folder".
1649 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
1650 -relativeImap4Name]): return nameInContainer stripped from its
1651 first 6 characters since all folder names are prefixed with
1654 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1655 -imap4URLString]): invoke -relativeImap4Name instead of
1656 "nameInContainer" since the former will return the fixed IMAP4
1657 foldername and the latter the SoObject name.
1659 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1660 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
1662 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
1663 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1664 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
1665 ([SOGoMailAccount -sentFolderNameInContext:])
1666 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
1667 names with "folder".
1668 ([SOGoMailAccount -inboxFolderInContext:_ctx])
1669 ([SOGoMailAccount -sentFolderInContext:_ctx])
1670 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
1671 the folder names with "folder" since they are prefixed earlier.
1673 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1675 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1676 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
1677 all starts with "folder".
1679 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
1680 longer declare security info from here.
1682 * SoObjects/Mailer/SOGoMailFolder.m
1683 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
1684 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
1685 folder names now always start with "folder".
1687 * SoObjects/Mailer/SOGoMailAccount.m
1688 ([-lookupName:inContext:acquire:]): folder names now always start
1691 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1693 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
1694 -forwardAction]): adapted to the new saveAttachment:withMetadata:
1697 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
1698 code to save the attached filenames with the filename returned by
1699 the web server as well as their mime types.
1701 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
1702 ([UIxMailPartMessageViewer -toAddresses])
1703 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
1704 the corresponding fields separated with a ", " (if needed).
1706 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1707 -saveAttachment:_attachwithMetadata:metadata]): new method
1708 replacing -saveAttachment:withName: and which takes a dictionary
1709 as parameter with the filename and the mime type of the
1711 The mimetype is then saved in a hidden text file.
1712 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
1713 take the mime type from the hidden text file related to the
1716 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
1717 ([SOGoContactGCSFolder
1718 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1719 return records if the db records are > 0 and not just > 1...
1721 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1723 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
1725 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
1727 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1728 ([SOGoContactLDAPFolder
1729 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1730 translate the returned records to a normalized form.
1732 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1733 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1734 translate the returned records to a normalized form.
1736 * UI/Scheduler/UIxCalListingActions.m,
1737 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
1738 SoObjects/SOGo/AgenorUserDefaults.m,
1739 SoObjects/Contacts/SOGoContactGCSFolder.m,
1740 SoObjects/Appointments/SOGoAppointmentFolder.m,
1741 OGoContentStore/OCSiCalFieldExtractor.m,
1742 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
1743 table fields with "c_".
1745 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1747 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
1748 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
1749 the application settings. If set, both limit will influence the
1750 maximum size of the resultsets and the time taken to solve them.
1751 ([LDAPSource -_initLDAPConnection]): initialize the limits.
1753 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1755 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
1756 method that declares the DAV namespace related to CardDAV.
1757 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
1758 method that declares the "access-control" and "addressbook-access"
1759 classes to the list.
1761 * SoObjects/Appointments/SOGoAppointmentFolder.m
1762 ([-lookupActionForCalDAVMethod:]): removed method.
1763 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
1764 method that declares the DAV namespace related to CalDAV.
1766 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
1767 optional method for subclasses which handle specific extensions to
1768 the DAV protocol: CardDAV or CalDAV.
1770 -lookupName:lookupNameinContext:localContextacquire:acquire]):
1771 new overriden method that handles dav invocations for extensions
1772 to DAV by returning an appropriate SoSelectorInvocation.
1774 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1775 -asDavInvocation]): new method returning a dictionary with a "ns"
1776 key representing the dav namespace and a "method" key representing
1777 the dav method name of the request.
1779 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1780 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
1782 ([UIxPreferences -shouldDisplayPasswordChange]): new template
1783 method that returns the value of SOGoUIxUserCanChangePassword.
1785 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1786 scan the value of SOGoUIxDefaultModule. If not set, the default
1787 module defaults to "Calendar".
1788 ([SOGoUserHomePage -defaultAction]): redirect the user to the
1789 value of "SOGoUIxDefaultModule".
1791 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1793 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1794 -contactInfos]): cache the results to avoid multiple invocations.
1796 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1797 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
1798 really should return something or if we fake to return nil...
1800 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1802 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
1803 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
1804 default is set to "bypass".
1806 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1807 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
1808 when authMethod is set to "bypass" from now on. This would avoid a
1809 security concern with a default installation of SOGo.
1810 AuthentificationMethod is now prefixed with "SOGo" for better
1813 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1815 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1816 -quotasAction]): new method that returns a json representation of
1819 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1821 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1822 -imap4URL]): rewrote method to support accented mailbox names.
1823 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
1824 SOGoAuthenticator's passwordInContext:.
1826 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1827 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
1828 start and due dates to nil if hasStartDate and hasDueDate are
1831 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1832 -passwordInContext:context]): made method public.
1834 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1835 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
1836 to false to avoid a null violation.
1838 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1840 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1841 -contentAsString]): returns the message encoded in ISO Latin 1
1844 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
1845 SOGoSuperUsername user defaults.
1846 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
1848 ([SOGoUser -rolesForObject:objectinContext:context]): if the
1849 current user is the superuser, grant him/her the "owner" role.
1851 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1852 the folder only if the current user is the owner of the future
1855 * SoObjects/Appointments/SOGoCalendarComponent.m
1856 ([SOGoCalendarComponent -contentAsString]): we return the content
1857 based on the permissions returned by the security manager instead
1858 of by looking at the user roles.
1860 * SoObjects/Appointments/SOGoAppointmentFolder.m
1861 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
1862 folders of the user to whom this folder belongs instead of the
1863 active user. This way, a delegate user will be able to have the
1864 same view that the original user has if he connects from his user
1867 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
1868 user exists before creating the SOGoUserFolder instance. If not,
1871 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
1872 return the message source code in plain text.
1874 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1875 -contentAsString]): returns the message encoded in UTF8.
1877 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1879 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
1880 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
1881 leading tagname into account when serializing the element values.
1883 * Main/SOGoProductLoader.m: only load bundle directories ending
1884 with the "SOGo" extension.
1886 * Main/SOGo.m ([SOGo
1887 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
1888 result set if the query has caused no exception. Otherwise we get
1889 an "evaluation is in progress exception".
1891 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1893 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1894 -generateSQLForInsert]): initialize error to nil before the
1895 serialization. Otherwise the method can get confused if it ever is
1896 initialized to something else.
1898 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
1899 -folderIsMandatory]): returns NO unconditionnally.
1901 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1902 -appendPersonalSources]): add the "personal" folder to the list of
1903 user folders even if it doesn't exist, so that it is created when
1904 the user accesses it.
1906 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1907 -folderIsMandatory]): returns YES if nameInContainer is set to
1908 "personal", which is the default address book.
1910 * SoObjects/Appointments/SOGoAppointmentFolder.m
1911 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
1912 users must have one Calendar folder (one and only one).
1913 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
1914 escaping '\' so make the carriage return a real one. This way,
1915 PgSQL 8 won't complain about escaping the string.
1917 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
1918 method that create the folder if considered mandatory.
1919 ([SOGoFolder -folderIsMandatory]): new method that determines
1920 whether the folder should be created automatically or not. To be
1921 overriden by subclasses.
1923 * Main/SOGo.m ([SOGo -run]): override method and create the
1924 missing system tables if needed.
1926 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1928 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
1929 -mailDateFormatter]): returns the user's date formatter.
1931 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
1932 applies the user timezone to the date object before returning it.
1934 * UI/Common/UIxSortButton.m: removed useless class module.
1936 * UI/Common/UIxSortableTableHeader.m: removed useless class
1939 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1940 -contactInfos]): use the "asc" url parameter instead of "desc" to
1941 determine the ordering.
1942 ([-sortOrdering]): removed method.
1943 ([UIxContactsListView -init]): removed the "searchText" ivar.
1944 (general): the template no longer use the UIxSortableTableHeader
1947 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1948 -defaultSortKey]): default sort following the messages arrival
1949 instead of their date.
1950 ([-isSortedDescending]): removed method.
1951 ([-imap4SortOrdering]): use the "asc" url parameter instead of
1952 "desc" to determine the ordering.
1953 (general): the template no longer use the UIxSortableTableHeader
1956 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1958 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
1960 ([-setQualifier:_msg], [-qualifier]): removed methods.
1961 ([UIxMailListView -defaultAction]): added code to handle the
1962 search criteria and value passed as url parameters. Also, we now
1963 handle the same search criterias as Thunderbird/Icedove.
1965 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1967 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
1968 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
1969 the string instead of the string itself.
1970 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
1972 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
1973 bool var "acceptAnyUser" that is set when the AuthenticationMethod
1974 user default is nil.
1975 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
1976 unconditionnally returns an instance whenever acceptAnyUser is set.
1978 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1980 * Main/sogod.m (main): prevent SOGo from running as root.
1982 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1984 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
1985 -setCurrentPassword:newPassword]): new stub method.
1986 ([SOGoUser -dateFormatterInContext:context]): new method that
1987 returns an instance of SOGoDateFormatter configured based on the
1990 * UI/Common/UIxPageFrame.m ([UIxPageFrame
1991 -relativePreferencesPath]): new method.
1993 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
1994 removed useless method.
1996 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
1997 different configurable formats (long and short date + time).
1999 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
2001 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2002 -isInternetRequest]): removed method.
2004 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2005 -jsonRepresentation]): new method with an explicit name.
2007 * UI/PreferencesUI/product.plist: new bundle that provides a web
2008 ui for handling user defaults.
2010 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
2012 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
2014 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
2016 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2018 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
2020 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2022 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
2023 -compareEventsAscending:otherEvent]): no longer use compare: on
2024 the time objects since one of them could be an NSNull, which
2025 crashes when comparing with anything.
2027 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2028 -eventsListAction]): sort events from here.
2029 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
2031 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
2032 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
2034 * SoObjects/Appointments/SOGoAppointmentFolder.m
2035 ([SOGoAppointmentFolder
2036 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
2037 no longer sort elements from here.
2039 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2041 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2042 -aclsForUser:uid]): implemented method by forwarding the request
2043 to the container. This fixes a bug where users could no longer
2044 read emails from shared folders.
2046 * SoObjects/Appointments/SOGoCalendarComponent.m
2047 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
2048 here, but rather in its parent class.
2050 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
2051 -stringForSecondsSinceThe70s:seconds]): new utility method.
2053 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2054 -eventsListAction]): no longer reduce the end day of one day for
2055 all day events since everything has been fixed in
2056 OCSiCalFieldExtractor.
2058 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2059 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
2060 the end date of all day events of 1 so that they stay on their
2063 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2065 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
2067 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
2069 ([-fetchCoreTasksInfos]): removed method.
2071 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2072 -init]): initialize an instance of SOGoDateFormatter.
2073 ([UIxCalListingActions -eventsListAction]): the display start and
2074 end dates are added to the listing for each event.
2076 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
2078 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2079 -isAllDay]): returns YES if the "hm" url parameter is set to
2081 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
2082 is displayed one day earlier.
2084 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2086 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
2087 -_setupContext]): take the range of dates specified by the popup
2090 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
2091 WODirectAction that returns WOResponse objects with the events or
2092 todos satisfying the parameters passed in the url.
2094 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2095 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
2096 "isAllDay" into account and compute the amount of days to pass to
2099 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
2101 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
2102 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
2103 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
2104 new method that returns a json-formatted array of the visible tasks
2105 for the current user.
2107 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2109 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
2110 object must be present in the list of UIDs we delete the object
2111 from. Otherwise Calendar objects having no organizer and no
2112 attendees will remain in their owner's Calendar.
2114 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2115 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
2116 first 3 elements of the path array if the url returned by
2117 baseURLInContext: returns a hostname.
2119 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2120 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
2121 nil, in which case a crash happens when calling hasPrefix:.
2122 ([SOGoMailFolder -_sharesACLs]): same as above.
2123 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
2124 otherUsersFolderName is nil, we return nil.
2125 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
2126 nil from [self otherUsersPathToFolder], we return nil too.
2128 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2130 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2131 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
2132 the result of [self baseURLInContext:] to avoid a double escaping
2133 in the resulting string.
2135 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
2136 the user has the "ObjectReader" role on the parent container, then
2137 he is granted the "ObjectViewer" role on this object. Same for
2138 "ObjectEraser", although this might change later.
2140 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2141 -toolbar]): determine the toolbar filename based on the
2142 permissions declared by the securitymanager. The role mechanism
2143 has been adjusted on a lowerlevel so we can simplify the code.
2145 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2146 -initWithName:newNameinContainer:newContainer]): read the content
2147 directly from here. That way we can determine whether the object
2149 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
2150 the ObjectCreator role is enabled, we also grant the ObjectEditor
2151 role to the current user.
2153 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
2154 changed the method paradigm to only return HTTP code 204. Not test
2155 is done whatsoever since the security manager does it for us.
2157 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
2158 removed method because the same exists in UIxFolderActions.m
2160 * UI/Contacts/UIxContactsUserRightsEditor.m
2161 ([UIxContactsUserRightsEditor
2162 -setUserCanReadObjects:userCanReadObjects]): new method.
2164 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
2165 "FolderEraser" and special permission "Access Object". Removed
2166 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
2167 can be used instead. Removed "FolderReader" since it is useless.
2169 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2170 -vCard]): directly use the "content" ivar since it is initialized
2171 during object creation.
2173 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2174 ([SOGoContactLDAPFolder -init]): no longer handle the
2175 nameInContainer no the container ivars. They were removed because
2176 this class is a descendant of SOGoObject which already has them.
2177 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
2178 returning "displayName".
2179 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
2182 * SoObjects/Appointments/SOGoCalendarComponent.m
2183 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
2184 ([SOGoCalendarComponent -findParticipant:user]): new name for
2185 method "participant:".
2186 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
2187 findparticipant but taking a uid string as parameter.
2188 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
2189 iCalendar automatically. Instead, this is done only when the user
2190 is a "date and time viewer".
2191 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
2192 (modifier and responder) into account by compiling them with the
2195 * SoObjects/Contacts/SOGoContactFolder.h: removed
2196 "nameInContainer" from the list of required methods.
2198 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
2199 -davContentType]): returns "text/calendar".
2201 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2202 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
2203 groupdav resource-type.
2205 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2206 -davContentType]): same as below.
2208 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2209 -initWithName:newNameinContainer:newContainer]): new overriden
2210 method setting the custom owner directly.
2212 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
2213 -davContentType]): same as below.
2215 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2216 -davContentType]): same as below.
2218 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
2219 declare "httpd/unix-directory".
2221 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
2222 "UTC" as fallback timezone instead of "Canada/Eastern".
2223 ([-hasEmail:email]): make use of the new NSArray's
2224 containsCaseInsensitiveString: method.
2226 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2227 -davContentType]): declare "message/rfc822" as content type.
2229 * SoObjects/Appointments/SOGoAppointmentFolder.m
2230 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
2232 ([SOGoAppointmentFolder
2233 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
2234 ([-fetchContentObjectNames]): commented out method since it was
2235 usefull only for testing Funambol.
2237 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
2238 -containsCaseInsensitiveString:match]): an enhanced version of
2241 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
2243 ([-showMarkDeletedButton]): removed useless method.
2244 ([-showTrashButton]): removed useless method.
2246 * SoObjects/Appointments/iCalEntityObject+SOGo.m
2247 ([iCalEntityObject -userIsParticipant:user]): new proxy method
2248 that invoked isParticipant on self for each possible email
2249 addresses of the user passed as parameter.
2250 ([iCalEntityObject -userIsOrganizer:user]): same as above.
2252 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
2255 * SoObjects/Appointments/SOGoAppointmentObject.m
2256 ([SOGoAppointmentObject
2257 -saveContentString:contentStringbaseVersion:baseVersion]): remove
2258 method since an event may not have an organizer.
2260 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2261 -GETAction:localContext]): clarified method. Added support for
2262 content-type (thanks to Helge Hess).
2263 ([SOGoObject -initWithName:_nameinContainer:_container]):
2264 initialize and retain the owner.
2265 ([SOGoObject -davContentType]): returns "text/plain".
2267 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2269 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2270 -addUserInAclsAction]): send an acl addition mail.
2271 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
2274 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2275 -_realActionWithFolderName:folderDict]): handle the possible
2276 presence of the "mail-invitation" url parameter. If present, the
2277 user will be redirected to the relevant folder.
2279 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
2280 ([SOGoUser -language]): new method that returns the user's
2281 preferred language, or the system's if none has been set yet.
2283 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
2284 that returns the full dav url to self.
2285 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
2286 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
2287 returns the full so url to the base of the SOGo module to which
2288 self belongs, and for the specified user.
2289 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
2290 but for the current user.
2291 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
2292 required by the acl advisory templates and which returns a link
2293 the target user can click to activate its new subscription.
2294 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
2295 but for inclusion of the application/x-sogo-notification part,
2296 which will be handled by the Lightning enhancer plugin.
2298 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
2299 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
2300 do nothing yet since imap folder subscription is not handled yet.
2302 * SoObjects/SOGo/SOGoContentObject.m
2303 ([-hasSupportForDefaultRoles]): removed method.
2305 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2306 -getFullEmailForUID:uid]): new method that returns the username +
2309 * SoObjects/Appointments/SOGoCalendarComponent.m
2310 ([SOGoCalendarComponent +initialize]): the default language for
2311 mail templates is now set to English.
2313 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
2314 SOGoACLAdvisory implementing the french template for user removal
2317 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
2318 SOGoACLAdvisory implementing the french template for user
2321 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
2322 SOGoACLAdvisory implementing the english template for user removal
2325 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
2326 SOGoACLAdvisory implementing the english template for user
2329 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
2330 supercall of all the acl advistory templates. The model is based
2331 on SOGoAptMailNotification except that the template encapsulates
2332 the message to be sent. Later, we might create a superclass common
2333 to all template-based emails.
2335 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2336 -addRange:newRange]): new method that store a string
2337 representation of the NSRange passed as parameter.
2338 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
2339 any range contained in self intersect with the one passed as parameter.
2341 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
2342 store ranges in an array to prevent them from intersecting with
2343 each other during the passes.
2345 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2347 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2348 -primaryFetchMailboxInfo]): useless method. Removed.
2350 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2352 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2353 -toManyRelationshipKeys]): invoke [self subfolders].
2354 ([SOGoMailFolder -subfolders]): new method containing what used to
2355 be in toManyRelationshipKeys.
2356 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
2359 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2360 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
2361 named and at the beginning of which we put the predefined folders.
2363 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2364 -emptyTrashAction]): new method inspired by a similar one from
2365 UIxMailListView, to which we added the ability to remove
2368 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
2369 method. Replaced with a similar one in UIxMailFolderActions.
2371 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2372 -renameFolderAction]): implemented method.
2373 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
2374 specified folder. Instead, we put it in the trash folder.
2376 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
2377 method, replaced with a similar method in the new
2378 UIxMailFolderAction class module.
2379 ([-deleteFolderAction]): idem.
2381 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2382 -createFolderAction]): new method implementing subfolder creation.
2383 ([UIxMailFolderActions -renameFolderAction]): new method
2384 implementing subfolder renaming (basic implementation to be
2386 ([UIxMailFolderActions -deleteFolderAction]): new method
2387 implementing folder deletion.
2389 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
2390 web actions related to the handling of imap folder.
2392 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2394 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2395 -ownerInContext:localContext]): overriden method because we are an
2396 IMAP4 client and we need a bit more intelligence to deduce the
2397 owner of the current folder.
2398 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
2399 return an NSException so we need to be careful here to avoid a
2401 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
2402 NSException so we need to be careful here to avoid a crash.
2404 * SoObjects/Mailer/SOGoMailAccounts.m
2405 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
2406 there is no longer any concept of Intranet or Internet connection
2409 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2410 -sharedFolderName]): new method.
2411 ([SOGoMailAccount -otherUsersFolderName]): new method.
2413 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
2414 new javascript code and the new UIxMailAccountActions class.
2416 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
2417 javascript code and the new UIxMailAccountActions class.
2419 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
2420 new javascript code and the new UIxMailAccountActions class.
2422 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2423 -listMailboxesAction]): new method that returns a json-formatted
2424 tree of all the mailboxes available to the current user.
2426 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
2427 web actions related to the handling of mail accounts.
2429 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
2432 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
2433 -jsonRepresentation]): new interface method meant to be overriden
2434 by the primitive classes.
2436 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2438 * UI/MailerUI/UIxMailSplashView.m: removed.
2440 * SoObjects/Appointments/SOGoCalendarComponent.m
2441 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
2442 the uid to the list only when the user email is recognized by the
2445 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2447 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2448 -isDeletionAllowed]): completed method with the new imap acl api.
2450 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
2453 * SoObjects/SOGo/SOGoPermissions.m: added the new role
2454 "SOGoMailRole_MessageEraser".
2456 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
2457 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
2458 "defaultUserID" method into account.
2460 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
2461 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
2462 "defaultUserID" method into account.
2464 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
2465 methods to support the IMAP acls mentionned in the RFC 4314,
2466 removed the ones specific to Cyrus.
2468 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
2469 mandatory method for subclasses. Removed the SOGoDefaultUserID
2472 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
2473 overriden method to return @"<default>".
2475 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2476 -defaultUserID]): overriden method to return @"<default>".
2478 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2479 -aclsForUser:uid]): overriden method.
2480 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
2481 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
2482 ([SOGoMailFolder -defaultUserID]): overriden method.
2483 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
2485 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2487 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2488 -aclUsersForObjectAtPath:objectPathArray]): new method that being
2489 forwarded the calles to aclUsers for the GCS-based subclasses of
2492 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
2493 methods that would have been used to support IMAP acls. Replaced
2494 them with the new protocol for them that has been implemented in
2495 SOGo during the last few weeks.
2497 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2498 -hasSupportForDefaultRoles]): override method by returning "YES".
2500 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2501 -addObjectUniquely:object]): new method with an explicit name.
2503 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
2504 "acl" to "aclUsers". Now designed to return only the uid of the
2505 users involved in an ACL.
2506 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
2507 "NO" by default. To indicate to the acl editor that we don't want
2508 to handle a default user.
2510 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
2511 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
2514 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
2515 provides a view to the IMAP acls.
2517 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
2519 * UI/WebServerResources/MailerUI.js: replaced all invocations of
2520 addEventListener to the use of prototype's Event object. Also,
2521 configured all menus programmatically following descriptions lists
2522 containing their callbacks, or nulls, submenus id or separators.
2524 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2526 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2527 -addUserInAclsAction]): save the previous roles of the user
2528 (unlikely) or the default roles, or None instead of saving the
2529 roles that should appear the first time in the role editor when no
2530 default has been set...
2532 * SoObjects/SOGo/SOGoObject.m: defined a new constant
2533 "SOGoDefaultUserID".
2535 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2536 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
2537 ignore the "AuthorizedSubscriber" role and add the "None" role
2538 when no other role is found.
2540 * UI/Common/UIxAclEditor.m: added a button for the new default
2543 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2544 -_initRights]): don't take the "None" role into account when
2545 initializing the list of current roles.
2547 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
2550 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2552 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2553 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
2554 There is no need to subscract the start from the length if a space
2555 is not found since the range has not changed either. Finally, the
2556 first character before the url might also be a tab or a cr, so we
2557 match it against the "urlAfterEndingChars" custom NSCharacterSet.
2558 ([NSString -stringByDetectingURLs]): modified to handle email
2559 addresses and add a correct "mailto:" link.
2561 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2563 * SoObjects/Appointments/SOGoAppointmentFolder.m
2564 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
2565 method to return the events in the range of 2 weeks ago up to 4
2568 * UI/MailPartViewers/UIxMailPartTextViewer.m
2569 ([UIxMailPartTextViewer -flatContentAsString]): use the new
2570 "stringByDetectingURLs" method to offer clickable urls.
2572 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2573 -stringByDetectingURLs]): this new method replaces passive URLS
2574 with active ones for HTML resolution of the text.
2576 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2578 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2579 -asQPSubjectString:encoding]): simplified method.
2580 The headers indicates "utf-8" again thank to our fix in
2583 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
2586 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2588 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2589 -removeUserFromAclsAction]): implemented this method which was
2590 missing and is required to remove users from ACLs.
2592 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2593 -subscribeAction]): folderDict was not autoreleased, resulting in
2596 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2597 -primaryFetchProfile]): when building with libFoundation, don't
2598 use the "propertyList" method from NSString. Rather, we convert
2599 the string to an NSData instance and passit as parameter to
2600 NSDeserializer. This way, we obtain a mutable dictionary rather
2601 than an immutable one.
2603 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
2604 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
2605 constant string "contentTypeValue".
2606 contentTypeValue is now set back to iso-8859-1 since NGMime
2607 converts extracts the data in that encoding.
2609 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2611 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2612 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
2613 "bindFields" value is present in the user defaults, use the
2614 specified fields to find the dn of the user to bind.
2615 ([LDAPSource -allEntryIDs])
2616 ([LDAPSource -fetchContactsMatching:match])
2617 ([LDAPSource -lookupContactEntry:entryID])
2618 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
2619 bind and unbind the connection on each request.
2621 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
2623 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2624 -contactSearchAction]): simplified method to use the facilities
2625 provided by the LDAPUserManager. No longer takes care of the
2626 "ldap-only" url parameter since all requests are handled by the
2629 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2630 -primaryFetchProfile]): check that the value returned is not null
2631 before interpreting it.
2633 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2634 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
2635 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
2636 system email is already present, remove it before adding it.
2638 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2639 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
2640 loginToCheck is not empty.
2641 ([LDAPSource -fetchContactsMatching:match]): check that match is
2643 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
2645 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
2648 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2650 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
2652 ([SOGoUser -systemEmail]): returns the email formed from the
2653 username and the default mail domain.
2654 ([SOGoUser -hasEmail:email]): test whether the user has the
2655 specified email, in a case-insensitive way.
2657 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2658 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
2659 check login information.
2661 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2662 ([SOGoContactLDAPFolder
2663 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
2664 no longer manage LDAP connections. The requests are forwarded to
2665 the relevant LDAPSource instead.
2667 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2668 -appendSystemSources]): pass LDAPSource objects to
2669 SOGoContactLDAPFolder instances.
2671 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
2672 address of the "from" field before sending the message. Otherwise,
2673 sending the mail won't work.
2675 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
2676 rewrote this method to request all the available email identities
2677 for the current user. Also, the from field also contains the full
2678 name of the user, not just his/her email address.
2680 * SoObjects/Appointments/SOGoCalendarComponent.m
2681 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
2682 from the previous module iCalEntityObject+Agenor.
2683 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
2684 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
2687 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
2688 replacing the SOGoContactLDAPEntry module. It was renamed as such
2689 because it now receives a dictionary instead of an NGLdapEntry.
2690 It thus can now handle data from any source of LDIF data, not
2691 only coming from LDAP.
2693 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
2694 implementing most of what used to be the AgenorUserManager class.
2695 The difference is that users are cached in the forme of
2696 dictionaries and many sources are used. Also, it can be used to
2697 search LDAP contacts.
2699 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
2700 the concept of "ldap source", to be used by all the classes
2701 needing access to LDAP-provided information: addressbooks and the
2702 user manager. Most the method thereing are transcriptions of
2703 methods previously found in SOGoContactLDAPFolder. It also contain
2704 utility methods for user matching and authentification.
2706 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
2707 module, rendered useless by code refactoring.
2709 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
2710 with the freshly written "LDAPUserManager".
2712 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2714 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
2715 SOGOContactLDIFEntry.
2717 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
2718 module, obsoleted by code in SOGo/LDAPSource.[hm].
2720 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2722 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
2723 new method with an explicit name.
2725 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2727 * SoObjects/Appointments/SOGoCalendarComponent.m
2728 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
2729 replacing "isOrganizer:orOwner:" by taking only one instance of
2730 SOGoUser as parameter.
2731 ([SOGoCalendarComponent -participant:user]): new method replacing
2732 the previous "isParticipant" boolean method by returning the first
2733 participant matching the user passed as parameter. This method is
2734 used so that both the regular email address and the "system email
2735 address" of the user are matched against the participants emails.
2737 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2738 -getSystemEMailForUID:uid]): new method that returns the email
2739 formed with the user's uid and the default mail domain.
2741 * SoObjects/Appointments/SOGoCalendarComponent.m
2742 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
2743 was previously commented out.
2745 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
2746 forwared to [AgenorUserManager getSystemEmailForUID:].
2748 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2749 -toolbar]): method replacing the one with the same name in the
2750 task and appointment editor classes. This method makes also use of
2751 the new method "isOrganizerOrOwner:" and "participant:" in
2752 SOGoCalendarComponent.
2754 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2755 -toolbar]): removed method, replaced with a method with the same
2756 name in UIxComponentEditor.
2758 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
2759 method, replaced with a method with the same name in
2762 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2763 -primaryFetchProfile]): the values returned from the database are
2764 converted to a put dictionary first, since the dictionary returned
2765 is actually an immutable one, which can cause a crash afterwards.
2767 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2769 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
2770 and "SOGoRole_ObjectEditor".
2772 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2773 -prepareRightsForm]): this method is no longer mandatory.
2775 * UI/Contacts/UIxContactsUserRightsEditor.m
2776 ([UIxContactsUserRightsEditor
2777 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
2778 module to handle acls related to the address books. Partial
2781 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2782 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
2785 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
2786 specified roles from cache.
2787 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2788 put resulting roles in cache.
2790 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
2791 initWithName:inContainer:. Instead, directly initialize the ivars
2792 as it is supposed to be to avoid an infinite loop whenever one of
2793 those two methods are overriden.
2795 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
2798 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2799 -aclsForUser:uid]): override method so that SOGo won't crash when
2800 loading the contact card.
2802 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2804 * SoObjects/Appointments/SOGoAppointmentFolder.m
2805 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
2806 "freebusy" special user should only require opaque elements.
2808 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2810 * SoObjects/Appointments/SOGoAppointmentFolder.m
2811 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
2812 our double declaration where the resulting XML would be screwed.
2813 There is only one collection per namespace.
2815 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
2816 rfc822DateString]): new method that returns a string conform to
2817 rfc 822 and suitable for email headers.
2819 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
2820 "rfc822DateString" category method on the date we put in the
2823 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2825 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
2826 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
2827 which should never be overriden.
2828 ([UIxUserRightsEditor -appendRight:newRight])
2829 ([UIxUserRightsEditor -removeRight:right])
2830 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
2831 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
2832 methods that can be used by the subclasses.
2833 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
2834 mandatorily be overriden to prepare the elements of the subclassed
2836 ([UIxUserRightsEditor -updateRights]): new method that should
2837 mandatorily be overriden to update the user rights from the
2838 elements of the subclassed form.
2840 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
2841 check if the uid is already listed before adding it to our array.
2842 This is because the acl table can contain more than one record per
2843 user/object relationship.
2845 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2846 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
2847 "roles" parameter is now an NSArray instead of a string. Therefore
2848 we loop throughout the array to populate the table. All the
2849 relevant records are removed prior to the addition of the new
2852 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2853 -aclsForUser:uid]): new override that returns nil until we add
2854 support for IMAP acls.
2856 * SoObjects/Mailer/SOGoMailAccounts.m
2857 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
2859 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2860 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
2862 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2863 -aclsForUser:uid]): override this method which will always return
2866 * SoObjects/SOGo/SOGoPermissions.[hm]: added
2867 [Public,Private,Confidential]
2868 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
2869 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
2870 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
2872 * SoObjects/Appointments/SOGoAppointmentFolder.m
2873 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
2874 that defines default roles for new elements in the acl.
2876 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
2877 module and subclass of UIxUserRightsEditor specific to the
2878 handling of user rights on calendar folders.
2880 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2882 * SoObjects/Appointments/SOGoAppointmentFolder.m
2883 ([SOGoAppointmentFolder -groupDavResourceType]): return both
2884 "vevent-collection" and "vtodo-collection".
2886 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
2887 that implements the detailed editor of user rights per-object.
2889 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2891 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2892 -rolesForObject:objectinContext:context]): no longer query objects
2893 for "roleForUser:". Instead, all objects should implement
2896 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
2897 new method to comply with the new acl "protocol" in SOGoObject.
2898 Uses SOGoFolder's new facilities for ACLS.
2899 ([SOGoContentObject -aclsForUser:uid]): idem.
2900 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
2901 ([SOGoContentObject -removeAclsForUsers:users]): idem.
2903 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2904 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
2905 based folders. This method is derived from the code that was in
2906 UIxAclFolder before its removal.
2907 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2910 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
2912 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
2913 ([SOGoFolder -setRoleForUsers:uidsto:role])
2914 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
2916 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
2917 that requires overriding by subclasses.
2918 ([SOGoObject -aclsForUser:uid]): idem.
2919 ([SOGoObject -defaultAclRoles]): idem.
2920 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
2921 ([SOGoObject -removeAclsForUsers:users]): idem.
2923 * UI/Common/UIxObjectActions.m: new module implementing the web
2924 actions common to SOGoObject and all its subclasses.
2925 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
2926 user with the clientObject defaults user rights to the object's
2929 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
2930 to the point where it will only list the users (and their name)
2931 associated with an object acl.
2933 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
2934 methods have been moved into SOGoObject and SOGoFolder during a
2937 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2938 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
2939 method made useless by the programmatic handling of iCalendar
2941 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
2942 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
2943 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
2945 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
2946 drop on all folder nodes, not just on leaves.
2948 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2949 ([SOGoContactLDAPFolder
2950 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
2952 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2954 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
2955 debugging facilities when the SOGoDebugObjectAllocation user
2958 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2960 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
2961 method that SOGo will need with non-gnustep Foundation
2963 ([NSString -stringByAppendingPathComponent:component]): new method
2964 that SOGo will need when building with libFoundation. Method
2965 removed later since it is available from
2966 Foundation/NSPathUtilities.h.
2968 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
2971 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
2972 every subclass to access [WOApplication context] without having to
2973 invoke it more than once.
2975 * SoObjects/Appointments/SOGoCalendarComponent.m
2976 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
2977 moved method from SOGoTaskObject and SOGoAppointmentObject up to
2980 * UI/Scheduler/UIxCalSelectTab.m: removed module.
2982 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2984 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2985 -vCard]): test the prefix of the card in a case-independent way.
2987 * OGoContentStore/OCSContactFieldExtractor.m
2988 ([OCSContactFieldExtractor
2989 -extractQuickFieldsFromContent:content]): we no longer accept
2990 records in a format other than versit vCard so we can get rid of a
2993 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2995 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2996 -selectorComponentClass]): restored method.
2998 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3000 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
3001 -shouldDisplayCurrentTask]): the current task is not displayed if
3002 it is NOT completed or if the "showCompletedTasks" flag is set.
3003 The logic was inverted in Lightning and is now in SOGo too.
3005 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3007 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
3008 want the "work" url instead of the "home".
3010 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3011 -_saveSnapshot]): save url values from snapshot.
3012 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
3014 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3015 -calendarList]): new method replacing "availableCalendars".
3017 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
3018 -calendarFolders]): we now take the list of subscribed calendar
3021 * SoObjects/Appointments/SOGoAppointmentFolder.m
3022 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
3023 method derived from and replacing [UIxCalView calendarFolders].
3025 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3027 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3028 -toManyRelationshipKeys]): don't put the predefined folders in the
3029 list if they are returned by the server.
3031 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
3032 longer store the "flattenedBlocks" in a dictionary since the
3033 object will be deleted anyway and we don't need to put the folders
3036 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3037 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
3038 attachment path into account when computing the part urls.
3040 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3042 * UI/Contacts/UIxContactsListViewContainer.m
3043 ([UIxContactsListViewContainer -additionalFolders]): take the list
3044 of subscribed folders from the new property list used for the user
3045 settings. The value of its key is SubscribedFolders for the
3046 dictionary entry named "Contacts".
3048 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3049 -canAccessContentAction]): new method to override the one from
3050 UIxFoldersActions by taking into account the fact that, this time,
3051 the clientObject is an ldap folder. Removed many method that used
3052 to be related to the handling of the user selector.
3054 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
3055 to make sure they can be removed.
3057 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
3058 populate the calendar entries based on the user settings plist.
3060 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3061 -selectForMailerAction]): restored method.
3063 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
3064 from a simplified version of the old UIxContactEditor (removed).
3066 * UI/Contacts/UIxContactsUserFolders.m: new template module for
3067 selecting users or user folders through an LDAP search of which
3068 the results are displayed as a tree.
3070 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
3071 method "onContactAdd" here since the Mailer is now the only module
3072 to use it when composing emails.
3074 * UI/WebServerResources/generic.js: added code for handling the
3075 new scheme used for describing SOGo folders, common code to handle
3076 folder addition or removal.
3078 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3079 -activateFolderAction]): new method that change the "active"
3080 settings in the folder-related fields in the user settings.
3081 ([UIxFolderActions -deactivateFolderAction]): see above.
3083 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3084 -checkRightsAction]): removed method.
3086 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3087 -updateAdditionalAddressBooksAction]): removed method.
3089 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3090 -updateCalendarsAction]): removed method.
3092 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3094 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3095 -checkRightsAction]): removed method.
3097 * UI/Common/UIxFolderActions.m ([UIxFolderActions
3098 -canAccessContentAction]): new method designed to replace
3099 [UIxCalMainView checkRightsAction] in a more universal way.
3101 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3103 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3104 -roleOfUser:uidinContext:context]): take all the subkeys into
3105 account, not only the "personal" folder.
3107 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3108 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
3109 to the new components.
3111 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
3114 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3115 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
3116 field of the sogo_user_profile table, where the user-customizable
3117 changes will be saved.
3118 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
3119 similar to the one above, using the "settings" field where the
3120 automatic settings will be saved.
3122 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
3123 module to bind the userdefaults to a property list contained in a
3124 specified field of the sogo_user_profile table.
3125 ([AgenorUserDefaults
3126 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
3127 added a "fieldName" parameter.
3129 * UI/Common/UIxFolderActions.m: new module implementing web
3130 actions common to all GCS-based folders.
3132 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3134 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
3135 put a carriage return after the day name.
3137 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3138 -readFreeBusyAction]): restored method.
3140 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3142 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3143 -defaultAction]): remade module to redirect automatically to the
3146 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
3148 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3150 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3151 -deleteAction]): new web method to delete personal addressbook
3154 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3155 -delete]): override method to refuse the deletion of the folder if
3156 its nameInContainer is "personal".
3158 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
3159 that forwards the deletion request to the folder manager.
3161 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3163 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
3164 -zoomList]): new method that returns the list of available zoom factors.
3166 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3167 -changeStatusAction]): rewrote method.
3169 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3170 -_handleAttendeesEdition]): make sure "attendeesNames" has a
3171 length > 0 before computing the attendees. Otherwise there will be
3172 an invalid empty entry.
3173 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
3174 organizer when there are attendees and remove it when the
3175 attendees are removed.
3177 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3179 * UI/Scheduler/UIxAttendeesEditor.m): new component.
3181 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
3182 the task and appointment editors. Now a container component
3183 handling the common elements of tasks and events.
3185 * UI/Scheduler/UIxTaskEditor.m: same as below.
3187 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
3188 a subclass of UIxComponentEditor but a subcomponent of it.
3190 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
3191 toolbar can have the special value "none" to indicate there is
3192 none attached to the window.
3194 * SoObjects/Appointments/SOGoCalendarComponent.m
3195 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
3197 ([SOGoCalendarComponent -isParticipant:email]): new method.
3198 ([SOGoCalendarComponent -calendar:create]): takes one parameter
3199 "create" which is a boolean indicating whether we want to create
3200 the calendar if it does not exist.
3202 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3204 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
3205 of a table, the same way the dayly and weekly views have been for
3208 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
3210 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
3213 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
3214 property to point at the user folder
3216 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3218 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3219 -userInContext:]): returns "SOGoUser".
3221 * SoObjects/Appointments/SOGoCalendarComponent.m
3222 ([SOGoCalendarComponent -contentAsString]): overriden method that
3223 takes the privacy into account and discard the relevant fields if
3224 needed by generating a new content string and caching it.
3225 ([SOGoCalendarComponent
3226 -saveContentString:contentStringbaseVersion:baseVersion]): if the
3227 new method above has cached a content string, release it and set
3228 it to nil so that it will have to be regenerated in the case it is
3230 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
3231 discard the fields that have to be hidden when the card is
3234 * SoObjects/Appointments/SOGoAppointmentFolder.m
3235 ([SOGoAppointmentFolder
3236 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
3237 sure the cards are now handled as instances of
3238 SOGoCalendarComponent instead of SOGoContentObject so that their
3239 content string is taking the privacy classifiction into account.
3240 ([SOGoAppointmentFolder -_privacySqlString]): new method that
3241 generates a query to determine what information can be given and
3242 if the card itself has to be shown.
3244 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3245 -getICalPersonsFromValue:selectorValue]): removed useless
3246 "isAccessRestricted" method.
3248 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3249 -setStyle:_style]): test whether the values of orgmail and
3250 partmails are null before manipulating them, otherwise SOGo sends
3251 a "rangeOfString:" message to an NSNull, which makes it crashes.
3253 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3254 -extractQuickFieldsFromEvent:_event]): we now use the new
3255 "symbolicAccessClass" method from iCalEntity to determine the
3256 value of the "classifiction" field.
3257 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
3260 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3262 * SoObjects/Appointments/SOGoAppointmentFolder.m
3263 ([SOGoAppointmentFolder
3264 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
3265 see below, the query is adapted consequently.
3267 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3268 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
3269 renamed to "classification" and can any integer as value.
3270 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
3273 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3275 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
3276 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
3277 don't prepend anything to the class and id named. Instead, we
3278 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
3281 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3283 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
3284 -rolesOfUser:logininContext:context]): if object does not exists
3285 (for example when it's being created), the current user has the
3286 same rights on it than he/she has on its parent container.
3288 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3289 -nameExistsInFolder:objectName]): methods that tests if a c_name
3290 corresponding to the name passed as parameter is present in the db
3293 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3295 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3296 -rolesForObject:objectinContext:context]): test for
3297 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
3299 * SoObjects/Appointments/SOGoCalendarComponent.m
3300 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
3301 returns the roles of the user on the container object if the event
3304 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3306 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
3307 alternativeViewer a multipart/related message is being handled.
3309 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
3312 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
3313 text/html component before text/plain.
3315 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3316 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
3317 fetching of HTML parts.
3319 * SoObjects/Appointments/SOGoCalendarComponent.m
3320 ([SOGoCalendarComponent -componentTag]): new template method that
3321 returns the vcalendar tag of the current object.
3322 ([SOGoCalendarComponent -component]): new method that returns the
3323 first object matching [self componentTag] within the current
3324 calendar object. This method replaces 'firstEventInCalendar:' as
3325 well as "firstTaskInCalendar:".
3326 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
3327 moved method from SOGoAppointmentObject.m.
3329 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3331 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
3332 module which shows each selected user's calendar in a different
3333 column instead of mixing their events together.
3335 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
3336 replaced use of [NSString stringByTrimmingWhiteSpaces] with
3337 [NSString stringByTrimmingSpaces].
3339 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
3340 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
3343 * UI/Scheduler/UIxCalDayOverview.m,
3344 UI/Scheduler/UIxCalDayChartview.m,
3345 UI/Scheduler/UIxCalDayListview.m,
3346 UI/Scheduler/UIxCalWeekOverview.m,
3347 UI/Scheduler/UIxCalWeekChartview.m,
3348 UI/Scheduler/UIxCalWeekListview.m,
3349 UI/Scheduler/UIxCalInlineMonthOverview.m,
3350 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
3352 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3354 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3355 -appendPersonalSourcesInContext:context]): release connectoin
3356 channel when everything is done.
3358 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3359 -newAbAction]): new action method to crate a new contact folder
3362 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
3363 that requests the folder manager to create a folder table with the
3364 specified type at the specified path. The type is taken from [self
3367 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3368 -folderType]): implemented.
3370 * SoObjects/Appointments/SOGoAppointmentFolder.m
3371 ([SOGoAppointmentFolder -folderType]): implemented.
3373 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3374 -appendPersonalSourcesInContext:context]): we now fetch all
3375 folders with type "Contact" that belong to the current user.
3376 ([SOGoContactFolders -newFolderWithName:name]): new method to
3377 create a new contact folder.
3379 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
3380 resulting url with [NSString+Utilities hostlessURL] instead of
3381 using NSURL. This is because the url in question sometimes has a
3382 hostname and sometimes not. "hostlessURL" ensure the hostname is
3384 ([UIxComponent -applicationPath]): same as above.
3386 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
3388 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
3389 folders before doing the one on messages.
3391 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3393 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
3394 makeObjectsPerform:withObject:withObject: for GNUstep
3397 * OGoContentStore/GNUmakefile, Protocols/common.make,
3398 SoObjects/common.make, UI/common.make: install in
3399 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
3401 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
3403 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
3406 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3408 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
3409 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
3412 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3413 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
3414 password would be accepted anyway as long as its length was > 0.
3415 This can be the case ONLY when LDAP is disabled otherwise we have
3416 a serious security issue...
3418 * SoObjects/Appointments/SOGoAppointmentObject.m
3419 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
3420 user is not an organizer nor a participant, he is declared as
3421 "Owner" if he owns the calendar the entry where the entry is
3422 contained. Other cases should not be possible.
3424 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3426 * UI/Contacts/UIxContactEditor.m: display and handle the new
3429 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3430 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
3433 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3434 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
3437 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3439 * SoObjects/Appointments/SOGoCalendarComponent.m
3440 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
3441 returns the value of ud "SOGoAppointmentSendEMailNotifications"
3443 ([SOGoCalendarComponent
3444 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
3446 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3448 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3449 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
3450 so that the mailbox cache is refreshed everytime the user presses
3451 on "get mail". I doubt a mailbox cache really is useful in general
3454 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3456 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3457 -userInContext:]): if the lookup is on "freebusy.ifb" and the
3458 username is "anonymous" the user is automatically set to
3461 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3463 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3464 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
3465 user with password "freebusy".
3467 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
3468 -contentAsString]): the default timerange is now 14 days before
3469 currentday and 1 month after.
3471 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3473 * SoObjects/Appointments/SOGoAppointmentFolder.m
3474 ([SOGoAppointmentFolder
3475 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
3476 escape the record string in a way suitable with XML encoding.
3478 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3480 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
3481 calendar view would not be updated properly.
3483 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3485 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3486 -newStartDate]): fix the handling of the component start date
3487 depending on the "hm" and the "day" parameters.
3489 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3490 -roleOfUser:uidinContext:context]): set role of current user to
3491 "Assistant" if the object that is accessed is "freebusy.ifb".
3493 * SoObjects/Appointments/SOGoAppointmentFolder.m
3494 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
3495 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
3496 ([SOGoAppointmentFolder
3497 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
3498 lookupCalendarFolderForUID: method, which doesn't do security
3501 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3503 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
3504 accessor that returns the comma-separated list of users with role
3506 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
3507 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
3508 "checkedUsers". Instead, each user is either classified in the
3509 list of assistants or the list of delegates.
3511 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3513 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
3514 -composeAction]): method imported from removed container modules.
3515 ([UIxMailMainFrame -mailFolderName]): method imported from removed
3518 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
3519 for wrapping UIxMailView with the "popupview" action.
3521 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
3522 since its the component that displays the same splash screen than
3523 the one in Thunderbird/Icedove.
3525 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
3526 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
3527 UI/MailerUI/UIxMailListViewContainer.[hm],
3528 UI/MailerUI/UIxMailViewContainer.[hm]: removed
3530 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3532 * UI/WebServerResources/HTMLElement.js: replaced the functional
3533 selectNode() and deselectNode() functions with select() and
3534 deselect() methods of HTMLElement.
3536 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
3537 events are initialized from here now instead of in the HTML code.
3539 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3540 -checkRightsAction]): new method similar to the one with the same
3541 name in UIxCalMainView.m.
3543 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
3544 code to handle the publishing of freebusy information.
3546 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3548 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3549 -checkRightsAction]): new action method that returns a
3550 comma-separated list of boolean values matching the right of the
3551 current user to "view" (as a permission) each foreign calendar
3552 stored in his preferences.
3554 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
3555 new method that sets a customOwner, which can be returned with
3556 ownerInContext it set.
3558 * SoObjects/Appointments/SOGoAppointmentFolder.m
3559 ([SOGoAppointmentFolder
3560 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
3562 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3564 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
3565 below, but for the Contacts and Calendar collections.
3567 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
3568 new acl facilities method from sope-gdl/GCSFolder.m.
3570 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3571 -roleOfUser:uidinContext:context]): new method that returns
3572 SOGoRole_Assistant when the user is an assistant or a delegate on
3573 the "personal" ab object. This is so that setting roles on the
3574 SOGoContactFolders object is not required.
3576 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3578 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
3580 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
3581 to the handling of the user selection for the acls.
3583 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
3584 values from SoPermissions with ones specific to SOGo.
3586 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
3587 handles the storage for the acls.
3589 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
3590 class for SOGoAppointmentObject and SOGoTaskObject.
3592 * UI/Common/UIxAclEditor.[hm]: new component that provides a
3593 general editor for folder acls.
3595 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
3597 ([NSString -davMethodToObjC]): method that returns the method name
3598 for a DAV property implementation.
3600 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
3602 ([NSArray -stringsWithFormat:format]): new method that returns
3603 formatted occurences of the strings stored in the array.
3605 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
3606 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
3607 subclass module of SoWebDAVValue that supports collections of
3608 properties of the same type.
3610 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3612 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3613 -lookupFolder:ofClassNamed:inContext:]): added the ability to
3614 configure the name of the SOGoDraftFolders with the ud var
3615 "SOGoDraftsFolderName".
3617 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3619 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
3620 -userTimeZone:username]): new method that returns the timezone for
3621 the specified user depending on his preferences and the server
3624 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3625 -stringForData:partInfo:]): take the encoding into account and
3626 translate the text to "normal" before processing the charset data.
3628 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3630 * UI/WebServerResources/generic.js: the progress indicator is on
3631 when loading the page so we turn it off, and we turn it back on
3632 whenever we switch to another module...
3634 * UI/WebServerResources/SchedulerUI.js: make sure the day view
3635 synchronization mechanism works everywhere.
3637 * UI/WebServerResources/generic.js: the log window is not only
3638 visible when UIxDebugEnabled is set.
3640 * UI/WebServerResources/SchedulerUI.js: the month overview's day
3641 cells are now initialized with the DOM event interface methods
3642 instead of with html attributes.
3644 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
3645 headers (should be made configurable at some point)...
3647 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
3648 "not null" constraint on startdate, enddate, isopaque,
3649 participants and partmails.
3651 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3653 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3654 -hoursToDisplay]): prevent a crash by retaining the
3655 "hoursToDisplay" array after it's created.
3656 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
3657 clickable hours DIV.
3659 * UI/WebServerResources/SchedulerUI.js: made the event
3660 participation status modification asynchronous, which also fixes a
3661 bug where the window would sometimes close before the accept or
3662 decline action was completed. Also, adapted the event handling
3663 related to the days or weeks view with the new DIV-based layout.
3665 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
3667 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
3668 DIV-based presentation of the days and weeks.
3670 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
3672 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
3673 might return an exception so we have to handle it if we don't
3676 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3678 * UI/WebServerResources/SchedulerUI.js: updated the list
3679 initialization code to use the new event management scheme, adding
3680 what was missing to be able to delete events and tasks again.
3682 * UI/WebServerResources/MailerUI.js: added code to activate the
3683 "Get mails" button. Fixed a bug which prevented messages to be
3686 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
3687 navigation and focus handling of INPUTs.
3689 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3691 * UI/WebServerResources/MailerUI.js: added code to handle the
3692 possible drag and drop events to manager in the mail module.
3693 Moving messages, opening parent folders, ...
3695 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
3696 the drag and drop manager as well as the interface to HTMLElement
3697 to trigger drag and drop events.
3699 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
3700 action to move the current message to the mailbox named after the
3701 value of parameter "tofolder".
3703 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3704 -moveToFolderNamed:folderNameinContext:]): new method base on
3707 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3709 * UI/WebServerResources/generic.js: added and activated many
3710 "load" handlers to configure generic widgets used across the
3711 modules. More events are now handled in a DOM-fashion way instead
3712 of by setting the relative attributes in the templates.
3714 * UI/Templates/UIxSortableTableHeader.wox: all the events are
3715 declared from the javascript DOM onload handlers.
3717 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
3720 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
3721 declared from the javascript DOM onload handlers.
3723 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
3724 we want everything to be separated from each other, as much as
3727 * UI/WebServerResources/SOGoDragHandles.js: new module containing
3728 the "SOGoDragHandlesInterface", implementing methods that can be
3729 attributed to DIV so that they can be used as drag handles.
3731 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3732 -asQPSubjectString]): initialize the tmp strings with '0' to make
3733 sure they don't contain garbage.
3735 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3737 * UI/WebServerResources/MailerUI.js: register the messageList
3738 table as a dragging source and the leaf of the navigation tree as
3739 dnd destinations to the DNDManager.
3741 * UI/WebServerResources/generic.js: initialize tabs from the
3742 "unload" event listener that is added programmatically instead of
3743 from the template... Also, added the new DNDManager object.
3745 * UI/WebServerResources/HTMLTableElement.js: added code to
3746 simulate XUL drag n drop events. This code will possibly be moved
3747 to HTMLElement.js instead later...
3749 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3750 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
3753 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3754 -_qualifierForFilter:filter]): only search records which starts
3755 with the specified pattern.
3757 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3759 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3760 -asQPSubjectString]): new method that returns the special QP
3761 string with its qp declaration for email subjects.
3762 ([SOGoDraftObject -bodyPartForText])
3763 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
3764 double-encode data in UTF-8.
3766 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3767 -newStartDate]): new method to determine the start date depending
3768 on the URL parameters, the current day and the current time.
3769 ([UIxComponentEditor -toolbar]): new method to determine the
3770 filename of the toolbar that should be drawn depending on the
3771 ownership and the list of attendees of the task/event wrt to the
3774 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3775 -setDayStartHour:aStartHour]): adjust the minutes to the next
3776 quarter of hour, if not already set to a quarter.
3778 * UI/WebServerResources/UIxAppointmentEditor.js,
3779 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
3782 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3784 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3785 -loadValuesFromComponent:component]): handles access class
3786 (privacy) and status.
3788 * UI/Contacts/UIxContactsListViewContainer.m
3789 ([UIxContactsListViewContainer -additionalFolders]): return nil if
3790 [self additionalAddressBooks] returns an empty string.
3792 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3794 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
3795 rangesOf7Days]): enhanced and debugged algorithm to feed the array
3796 with slices where the first day is still in the requested month.
3798 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
3801 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
3802 of events in the day boxes of the calendar's monthly view.
3804 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
3805 -davContentType]): declare "text/calendar".
3807 * SoObjects/Appointments/SOGoAppointmentObject.m
3808 ([SOGoAppointmentObject -davContentType]): declare
3811 * SoObjects/Appointments/SOGoAppointmentFolder.m
3812 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
3813 HTTP methods are handled by SOPE and requires nil to be returned,
3814 this method now invokes the new
3815 "requestNamedIsHandledLater:inContext:" method to check that.
3816 ([SOGoAppointmentFolder
3817 -requestNamedIsHandledLater:nameinContext:context]): new methods
3818 that returns "YES" only for the "OPTIONS" http method (for now...).
3819 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
3820 overloaded method to append the "access-control" and
3821 "calendar-access" DAV abilities to the initial declaration.
3823 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
3824 imitate the look of Sunbird/Lightning's monthly view.
3826 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
3827 UIxCalMonthViewOld.[hm].
3829 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3831 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
3832 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
3834 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
3835 returns an image name based on the participation status of the
3838 * UI/WebServerResources/SchedulerUI.js: same strip down as for
3841 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
3842 ([UIxContactsListViewContainer -additionalFolders])
3843 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
3844 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
3845 methods to handle the external addressbooks a user has subscribed
3846 too, by retriving them from his preferences.
3848 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3849 -updateAdditionalAddressBooksAction]): new method that updates the
3850 user settings with the list of addressbook he has subscribed to.
3852 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
3853 module for the address book selector.
3855 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
3856 a toolbar with two buttons ("add" and "remove") to manage the
3857 additional addressbooks a user might subscribe to.
3859 * UI/WebServerResources/ContactsUI.js: added code to handle
3860 "external addressbooks" from the Javascript point-of-view, by
3861 extending existing methods and adding code for the "add ab" and
3862 "remove ab" buttons.
3864 * UI/WebServerResources/generic.js: moved extensions methods to
3865 DOM elements to separate files for better clarity.
3867 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
3868 new method that returns "pageContent" as class, but also "popup"
3869 for the DIV where the page content lies, so that we can manipulate
3870 the content of popup's with CSS identifiers.
3872 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3874 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3875 -displayStyle]): new method that returns a string containing the
3876 css style relative to the current appointment cell. This code is
3877 currently inactive but might be reused later.
3879 * UI/WebServerResources/SchedulerUI.js: added code to handle the
3880 display of the selected day (the day pointed by the mouse, or the
3881 current day when changing the view).
3883 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3884 -dayCellClasses]): new method that returns a string containing the
3885 css classes applicable to the current cell, depending on the
3886 position of the day in the week, the day of today and the
3889 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
3890 -currentContactAptBorder]): new method that returns the
3891 appropriate border color for the specified user.
3893 * SoObjects/Appointments/SOGoAppointmentObject.m
3894 ([SOGoAppointmentObject
3895 -saveContentString:contentStringbaseVersion:baseVersion]):
3896 overloaded method that parse new events and detects if they have
3897 an organizer or not. If they are new and have no organizer set
3898 (Sunbird/Lightning...), the owner of the event is set as
3901 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
3902 category that provides facility methods and interfaces to the
3905 * SoObjects/Contacts/product.plist: give full access to ANY
3906 authenticated user, not just the owner (to every objects...).
3908 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3910 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
3911 every replica widgets are declared as such to their master
3912 counterpart. Take the days into account when displaying the time
3913 range taken by the appointment.
3915 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3916 -getICalPersonsFromValue:selectorValue]): method taken from
3917 UIxFreeBusyUserSelector, that is shared both by
3918 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
3920 * SoObjects/Appointments/SOGoAppointmentFolder.m
3921 ([SOGoAppointmentFolder
3922 -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.
3924 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
3925 derived and taken as a subset of UIxFreeBusyUserSelector that
3926 implements the table part of the FreeBusy view. Most of the
3927 methods of UIxFreeBusyUserSelector relative to that table were
3928 moved into UIxFreeBusyUserSelectorTable, which can also be used as
3929 a standalone view for AJAX operations.
3931 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3933 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3934 -vCard]): change reverted.
3936 * UI/Contacts/UIxContactEditor.m: check whether the client contact
3937 folder has selector "globallyUniqueObjectId" before calling that
3940 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3941 -vCard]): the "setVClass" NGVCard method really is "setClass"
3944 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3945 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
3946 request the "streetAddress" instead of the "streetaddress".
3947 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
3948 mails that *contain*, and not just *start with* the search
3951 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3952 -vCard]): mark address returned from LDAP as the work address.
3954 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
3955 span covered with the anchor, not only the textual information
3958 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
3959 argument (event or task) to newEvent in the appointmentListMenu.
3960 Make the appointmentsListView display the appointmentsListMenu.
3962 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
3963 12 to 50 before displaying "...".
3964 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
3965 if its length > 0, whether location itself is nil or not...
3966 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
3967 of which the length > 0.
3969 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3971 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
3972 french and ISO dates.
3974 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
3975 from UIxContactSelector to handle contact lists (current and
3976 additional contacts).
3978 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3979 -_freeBusyAsText]): added handling of an "additional"-named query
3980 parameter that describe the number of additional days after
3981 enddate that should be returned.
3983 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3984 -_responseForResults:results]): give priority to results with
3985 "c_uid" fields. If none returned, use the first contact received.
3987 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3988 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
3989 2 and "CANCELLED" to 0.
3991 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3993 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
3994 of start and end dates to short string dates.
3996 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3997 -readFreeBusyAction]): new method that returns an array of numbers
3998 corresponding to the state in the freebusy of each "quarter of an
3999 hour" between the "sday" and "eday" date parameters passed in the
4000 url. This permits to handle the display of the freebusy with Ajax
4002 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
4003 since the free busy displays 2 days ahead.
4005 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4006 -contactSearchAction]): new action that returns the uid and the
4007 username + email of the user whose name contain the value of the
4008 "search" url parameter.
4010 * SoObjects/Appointments/SOGoAppointmentFolder.m
4011 ([SOGoAppointmentFolder
4012 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
4013 useful for the computing of the status of the freebusy.
4015 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
4016 -init]): new component that incarnates a user selector for events
4017 inspired by the new one found in Thunderbird Lightning.
4019 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4021 * UI/WebServerResources/generic.js: added code to enable or
4022 disable anchor visually (following our internal algorithm).
4024 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
4025 added new "url" ivar with its classic accessors.
4026 ([UIxComponentEditor -urlButtonClasses]): new method that returns
4027 the class strings for the url button on the appointment/task
4028 editor (depending on the validity of the url).
4030 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
4031 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
4032 the template to match the Lightning's new task/appointment editor.
4034 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
4036 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
4038 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4040 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4041 ([SOGoContactLDAPFolder
4042 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
4044 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
4045 iCalEntityObject instances instead of just iCalEvent's.
4047 * SoObjects/Appointments/SOGoAppointmentFolder.m
4048 ([SOGoAppointmentFolder
4049 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
4051 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
4052 bad way of handling ownership that way.
4054 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4055 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
4056 on "cn", just like Mozilla.
4058 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4060 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
4061 "to" should be retained, otherwise it will be autoreleased and a
4064 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4065 -writeAction]): updated method to fetch the card before initing
4068 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4069 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
4072 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
4073 -iCalStringTemplate]): start and due date are now optional.
4075 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4076 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
4077 appropriate accessors to be settable through the templates.
4079 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
4080 new "isDisabled" ivar with appropriate accessors to be
4081 settable through the templates.
4083 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
4084 -availableCalendars]): new method that list the calendars to which
4085 the user has subscribed.
4086 ([UIxComponentEditor -componentOwner]): returns the owner of the
4089 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4090 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
4091 quickentries to null whenever each or all of them are null, by
4092 providing an impossible timestamp from with NSNotFound as value.
4094 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4096 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
4097 that handles the creation of new fields with the new APIs and the
4098 new node structure on the page.
4100 * UI/Scheduler/UIxAppointmentEditor.m,
4101 UI/Scheduler/UIxTaskEditor.m:
4102 refactored to user UIxComponentEditor as parent class.
4104 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
4105 containing the methods common to the UIxTaskEditor and the
4106 UIxAppointmentEditor.
4108 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4110 * SoObjects/Appointments/SOGoAppointmentFolder.m
4111 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
4112 the handling of time-ranges.
4114 * UI/WebServerResources/ContactsUI.js: specify a notification type as
4115 parameters when onConfirmContactSelection in invoked.
4117 * UI/WebServerResources/generic.js: specify a notification type as
4118 parameters when onContactRemove in invoked.
4120 * UI/WebServerResources/SchedulerUI.js: when the user deselects
4121 all calendars, select his entry.
4123 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4125 * UI/WebServerResources/SchedulerUI.js: edit and delete events
4126 with their owner-relative urls. Generate a correct entry in the
4127 css color table when a user is added to the calendars list. Put
4128 the same color next to the user id.
4130 * UI/WebServerResources/generic.js: implemented some new helper
4133 * SoObjects/Appointments/SOGoAppointmentFolder.m
4134 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
4135 entries if their owner is not the current user.
4137 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
4138 -displayClasses]): return the correct class for the current event
4139 representation depending on its owner.
4141 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
4142 and associate a color for each user login depending on its
4143 position in the list.
4145 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
4146 -currentRowCSSClass]): return the correct class for the current
4147 row depending on the owner of the event.
4149 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4150 -setColors:colors]): new method to associate a color table with
4151 each user in the list.
4153 * SoObjects/Appointments/SOGoAppointmentFolder.m
4154 ([SOGoAppointmentFolder
4155 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
4157 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
4158 NSObject to associate an instance with a user.
4160 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4162 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
4165 * UI/WebServerResources/ContactsUI.js: added handling of
4166 notification of changes to contact selectors.
4168 * UI/WebServerResources/generic.js: added handling of notification
4169 of changes to contact selectors.
4171 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4172 -updateCalendarsAction]): proxy method to update the user
4173 preference table with the new selected calendar uids.
4175 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
4176 -calendarsContactsAction]): new method.
4178 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
4179 ([UIxContactSelector -setHasCheckBoxes:aBool])
4180 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
4181 permit the drawing of checkboxes instead of card icons.
4183 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
4184 wrap a selector the the "Calendars" tab.
4186 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
4187 new user calendar selector.
4189 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4191 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
4192 may cover hour 0 to hour 23.
4194 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4195 -iCalStringFromQueryParameter:format:]): dates explicitly set to
4198 * UI/WebServerResources/SchedulerUI.js: manage both lists of
4199 objects wrt to the toolbar actions.
4201 * UI/WebServerResources/generic.js: added code to the "String"
4202 class to decode number-encoded char entities.
4204 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
4205 -batchDeleteAction]): new method to delete selected entries in the
4208 * SoObjects/Appointments/SOGoAppointmentFolder.m
4209 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
4210 that delete identified entries in batch.
4212 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4213 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
4215 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
4216 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4217 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
4218 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4220 return a UIxJSClose component if everything went fine.
4222 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
4225 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
4226 UIxAppointmentEditor.m.
4228 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
4229 a very light page with javascript code to close a window, by
4230 calling a method on the opener if specified. This component is
4231 designed to work as a response to form postings.
4233 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4235 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
4236 SOGoAppointmentObject adapted for the handling of tasks.
4238 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
4239 extracted from SOGoAppointmentObject.
4241 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
4242 -saveUrl]): returns the url needed to POST the new form to.
4243 redirect the user to <aptid>/editAsAppointment instead of /edit,
4244 so that SOGoAppointmentFolder can return the correct object type.
4246 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
4247 -compareAptsAscending:_other]): accept empty start or end dates.
4249 * SoObjects/Appointments/SOGoAppointmentFolder.m
4250 ([SOGoAppointmentFolder
4251 -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.
4252 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
4253 components of type "vtodo" as well as "vevent".
4254 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
4255 url specified ends with AsTask or AsAppointment, returns the
4256 an object of the appropriate class, otherwise deduce it from its
4257 content if the HTTP method is "PUT", otherwise read its type from
4260 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
4261 -extractQuickFieldsFromTodo:_task]): extract quick fields from
4264 * UI/Scheduler/UIxCalView.m ([UIxCalView
4265 -fetchCoreAppointmentsInfos]): replacement methods for
4266 fetchCoreInfos but by retrieving object with component "vevent".
4267 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
4270 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
4271 UIxCalAptListView adapted for the handling of tasks.
4273 * UI/Scheduler/UIxTaskProposal.[hm],
4274 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
4275 clones of the UIxAppointment* classes for the handling of tasks.
4277 * UI/WebServerResources/UIxTaskEditor.js: clone of
4278 UIxAppointmentEditor adapted for the handling of tasks.
4280 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
4281 Scroll the daily view to the appropriate hour when an appointment
4282 is selected in the appointments list.
4284 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4286 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4287 -setDayStartHour:aStartHour]): specifies the user timezone on the
4290 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
4293 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
4294 ([NSCalendarDate -driftedDate]): methods made useless by a better
4295 comprehension of the NSTimeZone API...
4297 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4299 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
4300 new methods from the NSCalendarDate methods.
4302 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
4303 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
4305 +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).
4306 ([NSCalendarDate -adjustedDate]): this method returns another
4307 instance set to the correct hour after the original date was set
4308 from a non-GMT timezone. This date can be used for storage.
4309 ([NSCalendarDate -driftedDate]): this method does exactly the
4310 opposite of -adjutedDate, that is, it enables the method
4311 hourOfDay, minuteOfHour etc... to return the values according to
4312 the original date's timezone. This date CANNOT be used for storage.
4314 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
4315 -shortDateString]): new method that will return a "short date
4316 string" (yyyymmdd) from a calendar date object.
4318 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4319 -_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.
4321 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
4322 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
4324 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4326 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
4327 view of the day at the height of hour 8:00.
4329 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
4330 ([UIxCalView -dayEndHour]): returns 24.
4332 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
4333 ([UIxContactFoldersView -newAction]): invoke
4334 _selectActionForApplication: on self with the proper attribute too.
4336 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
4337 we now use the action mechanism in UIxContactsListView to keep the
4338 same view for the contact selectors and the regular contact view.
4340 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
4341 UIxContactsListViewContainerBase.[hm]
4343 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
4345 * UI/WebServerResources/generic.js: generalized emailstring
4346 handling functions. Generalized address book access functions.
4348 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4349 -isPopup]): return YES if the "popup" query parameter is set.
4351 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4352 -defaultAction]): keep the url parameters when redirecting.
4353 ([UIxContactFoldersView -selectForSchedulerAction])
4354 ([UIxContactFoldersView -selectForMailerAction]): new action
4355 methods for the /scheduler-contacts and /mailer-contacts invocations.
4357 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
4358 newly available NSString+URL category.
4360 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
4361 -asURLParameters]): handle dictionary entries which could be
4362 instances of NSArray rather than NSString.
4364 * SoObjects/SOGo/NSString+URL.m ([NSString
4365 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
4366 ([NSString -urlWithoutParameters]): new method that returns the
4367 url without its parameters.
4369 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
4371 * SoObjects/SOGo/NSDictionary+URL.[hm],
4372 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
4374 * UI/WebServerResources/UIxMailEditor.js: add support for
4375 additions of different types (to, cc, bcc) of recipients from the
4378 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
4381 * UI/Contacts/UIxContactsMailerSelection.m,
4382 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
4383 UI/Contacts/UIxContactsSelectionView.m to provide a different set
4384 of widgets depending on the application invoking the contact list.
4386 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4388 * UI/WebServerResources/ContactsUI.js: hide the current contact
4389 whenever the user changes of contact folder.
4391 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
4392 now provided by the template when loading the page.
4394 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4395 -iCalPersonWithUid:uid]): new method taken from removed module
4398 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4400 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
4401 -categoriesAsString]): same as below.
4403 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
4404 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
4406 * SoObjects/Appointments/SOGoAppointmentObject.m
4407 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
4408 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
4411 * SoObjects/Appointments/SOGoAppointmentFolder.m
4412 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
4413 hackish test to detect whether the request concernes VEVENT's or
4414 anything else. Return events only in the former case.
4415 ([SOGoAppointmentFolder
4416 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
4417 c_name quickfield so that the calendar list can identify the
4418 appointments with their complete "filename".
4420 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
4421 groupsOfClass:fromSource: to parse the given vcalendar.
4423 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
4425 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
4427 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
4430 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
4432 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4434 * SoObjects/Appointments/SOGoAppointmentFolder.m
4435 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
4436 sensitive to the CalDAV method names.
4437 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
4438 "calendar-query" CalDAV method name.
4440 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
4441 code coming originally from MailerUI.js.
4443 * UI/WebServerResources/UIxContactEditor.js: imitate the
4444 Thunderbird address book by completing the display name with the
4445 content of the first and last name fields, until the display name
4446 is modified manually.
4448 * UI/WebServerResources/generic.js: added a "trim" method to the
4451 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4452 -displayName]): new method that returns the display name from "cn"
4453 or from the "displayName" key if found.
4455 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4456 -initSnapshot]): check if "[card n]" returns anything to avoid a
4459 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
4460 that returns an unparsed doctype definition for the pages.
4462 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4463 -vCard]): set the card's fn to attribute "displayName" if found
4466 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4468 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4469 -vCard]): handle the "streetAddress" and "l" fields.
4471 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
4472 header fields by converting the tables to DIVs and SPANs.
4474 * UI/WebServerResources/generic.css: attempted unification of font
4475 families and size across all the elements. changed the
4476 logConsole's "position" from "fixed" to "absolute" to avoid
4479 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4481 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
4482 empty the contact view when the current contact is being deleted.
4484 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
4485 parse the email field and provide the address full name if found
4486 as the "contactFN" parameter.
4488 * UI/WebServerResources/generic.js (openMailTo): do not give a
4489 name to the opened window so that serveral ones can be opened at
4492 * UI/MailPartViewers/UIxMailPartTextViewer.m
4493 ([UIxMailPartTextViewer -flatContentAsString]): override method by
4494 replacing carriage returns with "<br />" in the result string from
4495 super's implementation.
4497 * UI/Contacts/UIxContactView.m ([UIxContactView
4498 -_urlOfType:aType]): don't manage non-mailto urls through
4499 javascript, let the user decide what's best for him.
4501 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4502 -newAction]): transfer all the query parameters by using the
4503 "asURLParameters"'s result string from [self queryParameters].
4505 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4506 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
4507 query parameters and put their values (if any) into the snapshot.
4509 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
4510 carriage-returns to "<br />".
4511 ([UIxContactView -workCompany]): explicitly initialize company to
4512 nil if org is nil or empty.
4514 * UI/WebServerResources/UIxContactEditor.js: updated validation
4515 code after we added and renamed some fields.
4517 * UI/WebServerResources/ContactsUI.js: added code to cache contact
4518 cards and to handle card updates.
4520 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4522 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
4523 test the length of the returned string since they will never be
4526 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
4527 return self if the process went successful, returns an exception
4528 otherwise (and only otherwise...).
4530 * OGoContentStore/OCSContactFieldExtractor.m
4531 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
4532 adapted method to the new VCard api. Since the cards are stored in
4533 vcard format, we no longer deal with a dictionary but with a
4536 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4538 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
4539 return a string with a "mailto" url.
4540 ([UIxContactView -_urlOfType:aType]): generic method to return a
4541 url string with a html anchor pointing to it.
4543 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
4544 since subclass "UIxContactEditor" did nothing. Implemented code to
4545 display and modify the values parsed from the vcards, displayed in
4546 a way similar to the Thunderbird addressbook.
4548 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4549 -save]): new dummy method.
4551 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4552 -save]): made method void.
4554 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4556 * UI/Contacts/UIxContactView.m: added many wrapper methods to
4557 display blocks of data à la Thunderbird Addressbook. If data is
4558 available, those wrappers (around the NGVCard methods) will
4559 enclose the results in a proper HTML output with the correct label
4560 (if present), otherwise it will return an empty string.
4561 ([UIxContactView -vcardAction]): new action to return the contact
4562 as text/vcard (for exporting).
4564 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4565 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
4567 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4568 -vCard]): create a new NGVCard instance when no data is available
4570 ([SOGoContactGCSEntry -save]): save the vCard using the new
4571 "versitString" API method/message.
4573 * UI/Contacts/UIxContactView.h: separated interface from
4576 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
4577 views and display them beneath the list.
4579 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4581 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
4582 the timezone even when it's the server timezone.
4584 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4585 -privateContacts:inContext:]): no long configure the calendar
4586 object with the user's timezone since it's now accessible
4587 application-wide throught the SOGoObject methods.
4589 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
4590 method. Removed the "backendTimeZone" method.
4592 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
4593 instead of SoComponent.
4595 * SoObjects/Appointments/SOGoAppointmentObject.m:
4596 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
4597 [self serverTimeZone] instead of "EST" (which was removed).
4599 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
4600 "timeZone" ivar and its accessors.
4602 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
4603 centralized method returing the timezone configured in the
4604 userdefaults db or "Canada/Eastern" if missing.
4605 ([SOGoObject -userTimeZone]): new centralized method returing the
4606 timezone of the current user or the server timezone if missing
4607 from the user configuration table.
4609 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4611 * UI/WebServerResources/SchedulerUI.js: implemented caching of
4614 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
4615 return a path based on the object's context instead of the first
4616 level in SOGo's object hierarchy...
4618 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4620 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
4623 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
4624 timezone ([self viewTimeZone]) to the WEMonthOverview component to
4625 avoid a confusion with the days.
4627 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
4630 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
4631 imitate Sunbird's synchronization between the 3 visible views.
4633 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
4634 sure the numbers in dateString are formatted so as to take 4 chars
4635 for the year and 2 for the day and the month, otherwise
4636 NSCalendarDate will return a nil date.
4637 ([UIxComponent -applicationPath]): return a path based on the
4638 object's context instead of the second level in SOGo's object
4641 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4643 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
4644 user's timezone abbreviation to the date string passed as parameter to
4645 NSCalendarDate to generate an accurate date instance. Do the same
4646 when no date is specified and today is chosen.
4648 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
4649 form's time values to integers before comparing them.
4651 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
4652 ([UIxCalAptListView -currentEndTime]): initialize the resulting
4653 dates timezone with [self viewTimeZone].
4655 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
4656 "viewTimeZone" ivar destined to hold an instance of the user's
4658 ([UIxComponent -viewTimeZone]): take the timezone from the user's
4661 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4663 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
4664 rearranged the layout.
4666 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
4667 manage showing and hiding appointment details.
4669 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4670 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
4671 timezone by taking the current user's timezone setting.
4673 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
4675 * SoObjects/Appointments/SOGoAppointmentObject.m
4676 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
4677 set default timezone to EST, although this code should be
4678 rewritten to handle a system and a user default value.
4680 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4681 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
4682 take the values from the hour and minute INPUTs when data is
4683 POSTed since we no longer use the UIxTimeSelector component.
4684 ([UIxTimeDateControl -selectableHours])
4685 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
4686 template SELECTs to display reasonable and acceptable values
4687 instead of all the possibilities.
4689 * UI/WebServerResources/generic.js: adapted code for the new
4690 implementation of the UIxContactSelector component (added a
4691 "remove" button, removed the previous INPUT and replaced them with
4692 links of class "button").
4694 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
4695 UIxTimeDateControl.m.
4697 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
4698 ([UIxCalDayTable -currentAppointmentHour]): new methods that
4699 returns correctly formatted values used as attributes for JS code.
4701 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4702 -initialContactsAsString]): renamed implementation of
4703 initialParticipants.
4704 ([UIxContactSelector -currentContactId])
4705 ([UIxContactSelector -currentContactName]): new methods used when
4706 listing the initial contacts in the widget. Currently, both return
4707 the person's cn but the latter should ultimately return a user
4710 * UI/Contacts/UIxContactSelector.h: separated interface from
4711 UIxContactSelector.m.
4713 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
4714 all javascript code is now put in Scheduler.js/generic.js.
4716 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
4717 moved into NSCalendarDate+Scheduler instead.
4719 * SoObjects/Appointments/SOGoAppointmentFolder.m
4720 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
4721 configure the timezone from SOGoUserFolder when the instance is
4723 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
4724 the value of the new "timezone" ivar.
4726 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4728 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
4729 the date selector in the first page and the container of the
4730 future calendar selector in the second page.
4732 * UI/WebServerResources/generic.js: added code for handling tabbed
4735 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
4736 returns the bundle name associated to the current running product.
4738 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4740 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
4741 exception by invoking a timeout on the opener rather than invoking
4742 the list refresh method.
4744 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
4747 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
4748 ([UIxCalWeekView -prevWeekQueryParameters])
4749 ([UIxCalWeekView -nextWeekQueryParameters])
4750 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
4751 that return the dates relatively to the current day.
4752 ([UIxCalWeekView -lastWeekName])
4753 ([UIxCalWeekView -currentWeekName])
4754 ([UIxCalWeekView -nextWeekName])
4755 ([UIxCalWeekView -weekAfterNextWeekName])
4756 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
4757 methods that returns the label for the corresponding weeks.
4759 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
4760 used by UIxCalDayView and UIxCalWeekView to display the events
4761 occuring in one or more days.
4763 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4765 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
4766 entries in the new "monthMenu" and "yearMenu".
4768 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
4769 method to return the current day as a string formatted depending
4770 on the current locale.
4772 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4773 ([UIxCalAptListView -endDate]): "today" is now the default filter
4774 for displayed events.
4775 ([UIxCalAptListView -currentSerialDay]): new method returning the
4776 date of the current enumerated appointment in serial form
4779 * UI/WebServerResources/SchedulerUI.js: added code to select the
4780 relevant day when an appointment is selected. Added code to popup
4781 a month and a year menu whenever the header entries are clicked in
4782 the calendar widget.
4784 * UI/WebServerResources/generic.js: made addClassName and
4785 removeClassName methods of HTMLElement.
4787 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4789 * UI/WebServerResources/MailerUI.js: fixed the contact creation
4790 from email addresses.
4792 * UI/WebServerResources/generic.js: centralized the search-related
4793 functions here since the same code was used across the 3
4796 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4797 ([UIxCalAptListView -endDate]): return the required dates needed
4798 depending on the value given to the "filterpopup" url parameter.
4800 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
4801 code by invoking UIxComponent's labelForKey:.
4803 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
4804 [self pageResourceManager] instead of [self resourceManager].
4806 * UI/Contacts/UIxContactEditorBase.m: invokes
4807 globallyUniqueObjectId on the clientobject's class instead of the
4808 hardcoded "SOGoFolder".
4810 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4811 -newAction]): redirect the "new" action to the personal (default)
4814 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
4815 +objectWithName:inContainer:]): new constructor.
4817 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4818 -lookupContactWithId:recordId]): always create a contact object,
4819 even if it does not exist.
4821 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4823 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
4824 component that lays out the different components of SOGoCalendar.
4825 Only serves as an Objective-C counterpart to its xml template.
4827 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
4830 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
4831 display a widget to handle the information displayed in the
4832 appointments list. Not currently used, lacks implementation.
4834 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
4835 display a calendar as a dynamic widget from where one can select
4836 the current visible day.
4838 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
4839 extracted from UIxCalInlineMonthOverview.m.
4841 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
4842 calendarPageURL methods. The javascript code is handled by .js
4843 files as much as possible...
4845 * UI/WebServerResources/ContactsUI.js,
4846 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
4849 * UI/WebServerResources/SchedulerUI.js: implemented functions to
4850 handle the new widgets. XmlHTTPRequest code taken from
4853 * UI/WebServerResources/generic.js: put some functions related to
4854 element selections as methods to HTMLElement and HTMLTableElement.
4856 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
4857 display the list of appointments (embodies the code-size of
4858 UIxCalAptListView; answers to the "aptlist" method).
4860 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4862 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
4863 -correctURLAction]): new short action method replacing the method
4864 below by taking far less code.
4866 * SoObjects/Appointments/SOGoAppointmentFolder.m
4867 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
4868 with an action in the view-related code.
4870 * UI/Scheduler/UIxAppointmentEditor.m: invoke
4871 "stringByEscapingHTMLString" on the resulting value to avoid
4872 issues with accented characters.
4873 ([-jsCode]): removed method since the javascript code was merged
4874 into SchedulerUI.js.
4876 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4878 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
4879 new class method that returns an iCalPerson based on the UID given
4882 * UI/Contacts/UIxContactsListViewContainerBase.m:
4883 UIxContactsListViewContainer renamed to serve as a base class for
4884 the contact lists in both the contact editor and the contact
4887 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4888 ([SOGoContactLDAPFolder
4889 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
4890 setUserIdentifier:setRootDN:]): an LDAP field specifying the
4891 loginname of the users can now be specified.
4893 * UI/WebServerResources/generic.js: added code to manage contact
4894 lists through the new implementation of the UIxContactSelector.
4896 * UI/Templates: put the templates related to SchedulerUI in its
4899 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4900 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
4901 entry for "uid" with the field name representing the login name of
4902 the user in the corresponding LDAP branch.
4904 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4906 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4907 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
4908 request is a PUT, always create an entry, even if we're not sure
4911 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4913 * UI/WebServerResources/ContactsUI.js: implemented live-search.
4915 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
4916 -appendSystemSourcesInContext:context]): populated method with
4917 code that creates entries mapped to instances SOGoContactFolder,
4918 based on the configuration found in the NSUserDefaults under the
4919 key "SOGoLDAPAddressBooks".
4920 ([SOGoContactFolders
4921 -lookupName:nameinContext:contextacquire:acquire]):
4922 "contactsources" do not exist anymore, SOGoContactFolder was split
4923 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
4924 and one protocol: SOGOContactFolder, instead.
4925 ([SOGoContactFolders -contactFolders]): new accessor used by the
4926 views of SOGoContactXXXFolder to list the possible sources.
4928 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
4929 defines the methods that UIxContactsView, ..Editor and so on...
4932 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
4933 defines the methods that UIxContactsListViewBase expects as well
4934 as the data fields returned in the contact lists.
4936 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
4937 returns entries an LDAP server. Conforms to the new
4938 SOGOContactFolder protocol.
4940 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
4941 returns a vCard based on contact entries from an LDAP server.
4942 Conforms to the new SOGOContactObject protocol.
4944 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
4945 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
4946 entry for the textual representation of the vCard.
4948 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
4951 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
4952 "SOGoContactObject".
4954 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
4955 method that generates a textual representation of the vcard.
4957 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
4959 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
4960 "SOGoContactFolder".
4962 * SoObjects/Contacts/SOGoContactSource.h,
4963 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
4966 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4967 -singleAttributeWithName:key]): new method that returns the first
4968 object associated with an ldap key (where generally one value is
4971 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
4972 map the entry into an NSDictionary for processing by
4973 UIxContactsListViewBase.m with the least possible overhead.
4975 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
4978 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4980 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4981 -privateContacts:inContext:]): now returns an instance of
4984 * UI/Contacts/UIxContactsListViewContainer.m
4985 ([UIxContactsListViewContainer -contactFolderName]): new method to
4986 return the absolute path to the current contact folder, called
4987 from within the template.
4989 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
4990 JS code to initialize the 'currentContactFolder' generic var.
4992 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
4993 +contactFolderWithSource:inContainer:andName:]): new class
4994 method meant to return an instance connected to the specified
4995 source. Currently useless but won't be anymore in the next few
4998 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
4999 the "lookupFreeBusyObject" method since it does not exist.
5001 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
5002 as a "view" for the SOGoContactFolders object. Does nothing but
5003 redirect the browser to the URL of the personal address book of
5004 the user. It does not even have a template.
5006 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
5007 implementing the SOGoContactSource protocol. Does nothing
5008 currently but will be used to implement access to the personal
5009 address book of the user stored in the SOGo database.
5011 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
5012 protocol defining an API common to all possible types of contact
5015 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
5016 serving as the root of the contact folders available to the
5017 current user. Correctly lists the contact sources in webdav.
5019 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5021 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
5022 -composeAction]): new action method that permits external object
5023 to write a message from the default (primary) account.
5025 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5026 -initSnapshot]): new method with code taken from "defaultAction"
5027 but needed for others.
5028 ([UIxContactEditorBase -writeAction]): new action designed to
5029 compose the correct URL needed to obtain the MailerUI's email
5030 editor with the correct "mailto" parameter.
5032 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
5033 Common so that other modules can use it.
5035 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
5036 easier to manage both ajax and non-ajax requests.
5038 * UI/Contacts/UIxContactsFilterPanel.m: clone of
5039 UIxMailFilterPanel, but applicable to contact lists.
5041 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
5042 -vcardContentFromSOGoContactRecord]): use the new standard methods
5043 created for each type of entry. If a line is determined to not
5044 contain information, it will be skipped.
5046 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
5047 +initialize]): init defaultMailDomain with the user default
5048 "SOGoDefaultMailDomain".
5050 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5052 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5053 -saveAction]): reorganized methods to only have ONE return point.
5054 Invoke saveRecord: directly on the clientObject instead of
5055 saveContentString, which does the same thing anyway.
5057 * SoObjects/Contacts/NSDictionary+Contact.m
5058 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
5059 method to convert the dictionary returned with the user submission
5060 to a record in VCARD format to be stored in the database.
5062 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5064 * UI/WebServerResources/MailerUI.js: when opening the context menu
5065 of the message list, select the message below the mouse cursor and
5066 deselect the other selected messages temporarily. This mimics the
5067 behaviour of Thunderbird for that matter and was already
5068 implemented for the entries of the folder tree.
5070 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
5071 -iconForMenuItem]): new method that returns the fully qualified
5072 relative URL to the icon representing the mailbox, or the default
5073 mailbox icon if needed.
5075 * UI/SOGoUI/UIxComponent.m ([UIxComponent
5076 -urlForResourceFilename:filename]): automatically return an empty
5077 string whenever the filename passed as argument is nil.
5079 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
5080 "desc" parameter set to 1 so that they are sorted in descending
5081 order by default. Also, added "onHeaderClick()", triggered by
5082 clicking on the message list header elements.
5084 * UI/MailerUI/UIxMailSortableTableHeader.m
5085 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
5087 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5088 -isSortedDescending]): defaults to "YES" when the sort order is
5091 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5093 * UI/WebServerResources/MailerUI.js:
5094 - message cache: set the max num of cached messages to 20. Limit
5095 the cached message size to 30000 bytes.
5096 - ajax: when a message request is called while one is already
5097 being performed, the latter will be cancelled. Idem when
5098 retrieving the content of a mailbox.
5099 - folder tree: when a mailbox is selected because of the URL
5100 requested (initMailboxSelection), the dtree is expanded throughout
5101 the mailbox entry's parent hierarchy to ensure it is made visible
5102 when the page is being displayed. (new function: expandUpperTree).
5103 - mailbox loading: when loading a mailbox where a message was
5104 previously selected, we invoke its url with the "pageforuid"
5105 parameter correctly specified. During callback processing, we scan
5106 the table for the related row and reselect it.
5107 Also, the message area is set blank before loading any mailbox.
5109 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
5110 -defaultAction]): if the "pageforuid" parameter is passed in the
5111 url, take its value and invoke [self firstMessageOfPageFor:]
5112 consequently to deduce the first message to display. Otherwise,
5113 set it to "idx", otherwise set it to 0.
5114 ([UIxMailListView -firstMessageOfPageFor:]): new method
5115 that determines the first message of the page where the message
5116 passed as parameter is contained.
5118 * UI/WebServerResources/UIxMailListView.js: removed this module,
5119 its code was put in MailerUI.js instead.
5121 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5123 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
5124 which returns the nodes for the parent specified in "parentMenu".
5125 Used to generate the javascript code for the folder dtree.
5127 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
5128 using that container-template are now using UIxMailMainFrame
5129 since UIxMailPanelFrame had no real interest. File removed.
5131 * UI/WebServerResources/dtree.{css,js}: new files to handle
5132 javascript-generated mailbox tree. Modified from original version
5133 by integrating the previous code with the one we are using for
5134 selections and mailbox handling. Minor visual enhancements too...
5136 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5138 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
5139 returned, put it in an NSArray before returning it (fixes
5142 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5144 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
5145 that returns a url string stripped from its "http://hostname"
5148 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
5150 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
5152 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5154 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
5155 -mailDateFormatter]): retrieve the timezone from the user settings
5156 and pass it to the returned dateFormatter. Also, the dateFormatter
5157 is kept in a static variable to avoid useless
5158 creations/destructions.
5160 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
5161 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
5163 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
5164 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
5165 s/Criteria/Text/ to handle the "criteria" form parameter.
5167 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5169 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
5170 to integrate better with the firefox look&feel. Added entries for
5171 the new "menu" DIV class (popup menus).
5173 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
5174 takes any chunk of text as param, detects the user email and the
5175 optional first and last names and return them in a well-formatted
5176 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
5177 namespace conflict. Added "onMenuClick(node, event, menuId)" to
5178 handle popup menus through "onclick" element attributes (node =
5179 this, event = event and menuId = name of the menu DIV id to
5182 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
5183 -snapshot]): add an entry for "email" into the snapshot
5184 dictionary if a "contactEmail" URL parameter was detected and if
5185 the entry for "email" is empty.
5187 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
5188 button now invokes the newContact() js function in ContactsUI.js
5189 instead of opening "new" directly. newContact() pops up a window
5190 stripped from its navigation bar.
5192 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
5193 bundle (AddressBook).
5195 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
5196 "menu" and id "addressMenu" have the header email addresses
5197 display it with the new menu code in generic.js.
5199 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
5200 replaced the body tables with a div of class "pageContent"
5201 (standardization across the page templates).
5203 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
5204 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
5205 those are now inherited from UIxPageFrame.
5207 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
5209 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
5210 a "mailto" URL parameter is detected and the "to" array is empty,
5211 initialize "to" with the value of "mailto" before returning it.
5213 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
5214 -composeAction]): rewrote method in a cleaner way and with usage
5215 of the URL extensions to NSString and NSDictionary (see below).
5216 Also, if a "mailto" url parameter is detected, pass it to the
5219 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
5222 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
5223 returns a parameter string to add to a base URL.
5225 * UI/Common/NSString+URL.m ([NSString
5226 -composeURLWithAction:parameters:andHash:useHash]): new method to
5227 compose a complete URL from an object URL with parameters and an
5228 optional '#' character.
5230 * UI/Common/UIxPageFrame.h: separated interface from
5233 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
5235 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
5237 * UI/WebServerResources/generic.js: added code to manage
5238 selections within HTML containers.
5240 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
5241 added method to determine the possible URL for a product-specific
5242 javascript filename of the forme <productname>.js.
5243 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
5244 ([UIxPageFrame -isPopup]): new method to determine whether the
5245 application navigator bar should be displayed (main page) or not
5248 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
5249 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
5250 the user through LDAP.
5252 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5254 * The toolbar code from the MailerUI product was taken, renamed as
5255 "UIxToolBar" and put into UI/Common. Toolbar plists were created
5256 for the Contacts and Scheduler products and put in their respectir
5257 Toolbars/ subdirectories. Finally,
5258 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
5259 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
5260 and an invocation to the UIxToolbar component was put at the top
5261 of UI/Templaces/UIxPageFrame.wox.
5263 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
5264 within the templates whether a separator should be displayed.
5266 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
5267 that returns NO if the toolbar is empty.
5269 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
5271 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
5273 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
5274 new toolbar objects.
5276 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
5278 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
5279 linkbanner as a DIV instead of a TABLE.
5281 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
5283 returns 'YES' to request the display of the navigation bar between
5286 2006-06-15 ludovic@inverse.ca
5288 * It's now possible to set the default
5289 domain using for email using the
5290 SOGoDefaultMailDomain preference key.
5292 2006-06-15 ludovic@inverse.ca
5294 * Initial import of SOGo from trunk.