1 2007-11-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3 * UI/MailPartViewers/UIxMailPartTextViewer.m
4 ([UIxMailPartTextViewer -flatContentAsString]): re-added
5 conversion of line-break to sequences of HTML "BR", with a fast
8 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
9 -flatContentAsString]): simplified method now that we know
10 -[NSString stringWithData:usingEncodingNamed:] has a more robust
13 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
14 -showToAddress]): the answer is cached.
16 * UI/Common/UIxObjectActions.m ([UIxObjectActions +initialize]):
17 read "SOGoACLsSendEMailNotifications" from the user defaults to
18 determiner whether to send an email when a user is added or
19 removed from an object's acl.
21 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
22 -contentForEditing]): make sure the htmlContent flag is set to NO
23 when we select the textual part. Also we select only the relevant
26 * UI/MailerUI/WOContext+UIxMailer.m ([-mailSubjectFormatter]):
29 * UI/MailerUI/UIxMailView.m ([UIxMailView -messageSubject]): new
30 method replacing -objectTitle, written like the ones below.
32 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
33 -messageSubject]): rewrote method to act the one below.
35 * UI/MailPartViewers/UIxMailPartMessageViewer.m
36 ([UIxMailPartMessageViewer -messageSubject]): new method that
37 returns the decoded mail subject or "Untitled" if the subject is
40 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
41 -decodedSubject]): new method that invoke -decodedSubject from the
42 NSString and NSData class, depending on the identity of the
43 subject obtained from the envelope.
45 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
46 -subjectForReply]): take the value of -[SOGoMail decodedSubject]
47 instead of the subject of the envelope.
48 ([SOGoMailObject -filenameForForward]): same as above.
49 ([SOGoMailObject -subjectForForward]): same as above.
51 * SoObjects/Mailer/NSString+Mail.m ([NSString -decodedSubject]):
52 same as below for NSString.
54 * SoObjects/Mailer/NSData+Mail.m ([NSData -decodedSubject]): new
55 method that decodes the subject of a mail taken as an NSData
56 instance. Handling the exceptions and the badly formatted headers.
58 * UI/MailerUI/UIxSubjectFormatter.[hm]: dropped class module.
60 2007-11-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
62 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
63 -deleteEntriesWithIds:ids]): make sure the objects returned by
64 lookupName:... are not instances of NSException.
66 2007-11-03 Ludovic Marcotte <ludovic@inverse.ca>
68 * UI/Scheduler/UIxAppointmentEditor.m
69 Fixed monthly recurrences support.
71 2007-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
73 * SoObjects/Appointments/SOGoAppointmentObject.m
74 ([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
75 sent when modifying an event, when the event was considered
76 relevant. The same thing is now implemented for event deletion.
78 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
79 -primaryFetchProfile]): make sure that the deserialized "values"
80 is an instance of NSMutableDictionary, otherwise we override it
83 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
84 -contentForReply]): make use of the SOGoMailReply WO page.
86 * SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
87 from SOGoMailForward to handle mail replies instead. Only three
88 methods remaining: date, from and messageBody. The latter is
91 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
92 -fetchMailForForwarding:sourceMail]): fetch attachments for
95 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
96 -hasMessageAttachment]): initialize hasAttachment with "NO" to
97 avoid false positives.
99 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
100 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
101 set title to an empty string where the event/task summary is null.
103 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
104 -setHeaders:newHeaders]): make sure there is a message id in the
105 headers dictionary, if not, generate one.
106 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
107 message id from the existing draft.
108 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
109 message id in the header map.
111 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
112 -deleteFolderAction]): no longer prefix the target folder with
115 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
116 -listMailboxesAction]): base the folder type on the folder
119 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
120 -lookupName:_keyinContext:acquire:_acquire]): compare the full
121 traversal to the potential looked up folder with the special
122 folder names and return an object with the appropriate
123 SOGoMailFolder subclass.
125 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
126 -traversalFromMailAccount]): don't prepend the whole string with
129 * SoObjects/Mailer/SOGoMailAccount.m
130 ([-lookupSentFolder:_keyinContext:_ctx])
131 ([-lookupDraftsFolder:_keyinContext:_ctx])
132 ([-lookupTrashFolder:_keyinContext:_ctx])
133 ([-lookupFiltersFolder:_key:_ctx]): removed methods.
134 ([SOGoMailAccount -inboxFolderNameInContext:])
135 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
136 ([SOGoMailAccount -sentFolderNameInContext:])
137 ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
138 the resulting name with "prefix" since we might return a nested
140 ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
141 names with "/". Sorts the resulting folder list with
142 localizedCaseInsensitiveCompare: instead of
143 caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
144 that were removed, instead, we choose the appropriate class
145 depending on the folder name. And since we are in SOGoMailAccount,
146 we don't have to compute a traversal path to match the key with
149 -folderWithTraversal:traversalandClassName:className]): new method
150 that returns an instance of the specified SOGoMailFolder subclass,
151 based on the traversal path passed as parameter.
152 ([SOGoMailAccount -inboxFolderInContext:_ctx])
153 ([SOGoMailAccount -draftsFolderInContext:_ctx])
154 ([-sentFolderInContext:_ctx])
155 ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
156 -folderWithTraversal:andClassName: method described above.
158 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
159 -primaryFetchProfile]): make use of -[NSPropertyListSerialization
160 propertyListFromData:mutabilityOption:format:errorDescription:] to
161 deserialize the plist. Removed variant for libFoundation since it
162 should support the above.
163 ([AgenorUserDefaults -generateSQLForInsert])
164 ([AgenorUserDefaults -generateSQLForUpdate]): make use of
165 -[NSPropertyListSerialization
166 dataFromPropertyList:format:errorDescription:] to serialize the
167 plist. Removed variant for libFoundation since it should support
168 the above. Escape the backslashes from the resulting string.
170 2007-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
172 * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
173 SOGoMailFolder: SOGoMailSpecialFolder.
175 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
176 -traversalFromMailAccount]): overridden method that returns the
177 initialized mutable string.
178 ([SOGoMailAccount -allFolderPaths]): take the special folder paths
179 with -traversalFromMailAccount and reposition them at the
180 beginning of the list. By creating the special folders during that
181 request, we also make sure that the folder exists thanks to the
182 new initialisation method of the new "SOGoSpecialMailFolder"
184 ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
186 ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
188 ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
189 longer use lookupImap4Folder.
190 ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
193 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
194 -traversalFromMailAccount]): new method that returns the full
195 IMAP4 path to the object.
197 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
198 "superUsernames" after fetching it from the ud.
200 2007-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
202 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
203 -eventsListAction]): substitude the start and end date with their
204 UTC counterpart, taking into account the offset from UTC related
205 to those dates instead of the current one. This renders
206 -[UIxCalMainView -userUTCOffset] obsolete because the computings
207 that occured in javascript are now done server-side.
209 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
210 removed obsolete method.
212 * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
213 method converting html content to plain text.
215 * SoObjects/Mailer/NSString+Mail.[hm]: new category module
216 enhancing NSString with utility methods pertaining to mail handling.
218 * SoObjects/Mailer/SOGoMailObject.m
219 ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
221 -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
222 modified method to be always recursive and to take an array of the
223 accepted mime-types as parameter. The returned array now contains
224 the mime-type as well as the part keys.
226 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
227 -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
228 ([SOGoMailObject -contentForEditing]): rewrote method to take into
229 account the first text/plain part or the first text/html part
230 converted to text/plain with our new -[NSString htmlToText]
233 * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
234 "replyToAll:" with YES as parameter instead of NO.
236 2007-10-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
238 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
239 -davContentType]): ignore any possible parameter taken from the
240 mime-info of the body part.
242 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
243 -lastFirstMessageNumber]): new accessor that returns the first
244 message number of the last series of messages.
245 ([UIxMailListView -fetchKeys]): request the bodystructure for each
247 ([UIxMailListView -hasMessageAttachment]): extract the attachment
248 information from the message bodystructure.
250 2007-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
252 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
253 -GETAction:]): use the "application/octet-stream" mime type for
254 elements of type "application/x-xpinstall" to avoid confusing
257 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
258 ([UIxPreferences -itemMessageCheckText])
259 ([UIxPreferences -userMessageCheck])
260 ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
261 methods for handling the retrieval of new messages automatically.
263 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
264 that returns the interval of time between automatic message
267 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
268 -defaultAction]): now expunges the last folder marked for expunge.
270 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
271 -trashInContext:_ctx]): now marks the container folder for
274 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
275 -markForExpunge]): new method that marks the folder for the next
276 automatic expunge operation in the user settings.
277 ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
278 takes the last folder marked for expunge, expunges it and removes
279 it from the user settings, if it exists.
281 2007-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
283 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
284 -messageSubjectCellStyleClass]): added support for replied,
285 forwarded, forwarded and replied mails.
287 * SoObjects/Mailer/NSData+Mail.m ([NSData
288 -bodyDataFromEncoding:encoding]): new utility method that decodes
289 the NSData instance properly depending on the encoding string
292 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
293 -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
295 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
296 -stringForData:_datapartInfo:_info]): simplified by invoking
297 -bodyDataFromEncoding: from our new NSData category methods.
299 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
300 -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
301 where only the body part of the first of the keys fetched was
302 returned. Also decodes the body parts properly following their
305 * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
306 extends the NSData class with utility methods useful for handling
309 2007-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
311 * SoObjects/SOGo/NSArray+Utilities.m
312 ([NSArray -stringsWithFormat:format]): replace instances of NSNull
315 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
316 -keysWithFormat:keyFormat]): replace instances of NSNull with
319 * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
320 empty, use "c_cn" instead.
322 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
323 ([SOGoMailAccount -draftsFolderInContext:_ctx])
324 ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
325 of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
326 no always be specified from the root instead of sometimes from the
329 2007-10-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
331 * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
332 ([UIxPageFrame -productLocalizableStrings]): invoke the new
333 +[SOGoUser language] method if the user is nil.
335 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
336 that returns any generically-found language.
337 ([SoUser -language]): modified to call the above.
338 ([SOGoUser -language]): modified to call the above if the user
339 language has a null length.
341 * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
342 -davEntityTag]): modified to return the "hash" of the vCard string.
344 * UI/MailerUI/UIxMailActions.m ([UIxMailActions
345 -removeAllLabelsAction]): new method that removes all label flags
346 from the associated message.
347 ([UIxMailActions -addLabel1Action]
348 [UIxMailActions -addLabel2Action]
349 [UIxMailActions -addLabel3Action
350 [UIxMailActions -addLabel4Action]
351 [UIxMailActions -addLabel5Action]): new methods that adds label
352 flags to the associated message.
353 ([UIxMailActions -removeLabel1Action]
354 [UIxMailActions -removeLabel2Action]
355 [UIxMailActions -removeLabel3Action
356 [UIxMailActions -removeLabel4Action]
357 [UIxMailActions -removeLabel5Action]): new methods that removes
358 label flags from the associated message.
360 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
361 new accessor that returns the labels associated with the message.
363 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
364 -allFolderPaths]): new method that returns all the paths of all
365 the subfolders of the folder object.
366 ([SOGoMailFolder -allFolderURLs]): new method replacing
369 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
370 -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
371 role from its parent folder.
373 2007-10-19 Francis Lachapelle <flachapelle@inverse.ca>
375 * SoObjects/SOGo/SOGoUser.m
376 ([SOGoUser -rolesForObject:objectinContext:context]): allow
377 multiple super usernames to be defined. The user default
378 SOGoSuperUsername is renamed SOGoSuperUsernames and must be
381 2007-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
383 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
384 -userInContext:]): override the super method by returning
385 anonymous if the super returns nil.
387 * UI/Common/UIxPageFrame.m ([UIxPageFrame
388 -productLocalizableStrings]): new method that returns the
389 product-specific translation dictionary as a JSON hash.
390 ([UIxPageFrame -commonLocalizableStrings]): same as above but for
391 the "Common" framework.
392 ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
393 the requestor components to require additional Javascript files.
394 This is useful now that all the scripts are loaded at the end of
396 ([UIxPageFrame -additionalJSFiles]): new getter related to the
399 2007-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
401 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
402 implemented new web method.
404 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
405 -copyToFolderNamed:folderNameinContext:]): new method with the
406 code cut/pasted from -moveToFolderNamed:inContext:.
407 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
408 modified to use the code from -copyToFolderNamed:inContext:, which
409 is common between the two actions.
411 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
412 ([SOGoMailAccount -sentFolderNameInContext:])
413 ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
414 the user settings into account.
416 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
417 ([UIxMailFolderActions -setAsSentFolderAction])
418 ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
419 that change the purpose of the active folder to "Sent", "Drafts"
422 * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
423 returns the subject as quoted-printable.
425 * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
426 SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
427 the "aclMethod" method for the subsequent language-dependent
430 * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
431 returns the subject as quoted-printable.
433 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
434 -dealloc]): release item, aptStartDate and aptEndDate.
436 2007-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
438 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
439 -initWithName:newNameinContainer:newContainer]): the owner of a
440 shared folder is set to "nobody" by default.
442 * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
443 that returns whether the object has an owner or not.
445 2007-10-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
447 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
448 the folder even if the current user is not its owner.
450 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
452 * We now send advisory emails when folders
453 are created / deleted.
455 * Fixed the sending of advisory emails upon
456 ACL changes on folders.
458 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
460 * UI/Scheduler/UIxComponentEditor.m
461 Implemented event/task priority support.
463 * SoObjects/Contacts/SOGoContactGCSFolder.m
464 Added CardDAV support.
466 * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
467 Implemented From: based on LDAP results based on
468 the MailFieldNames attribute (an array) specified
469 in every LDAP-based authentication sources.
471 * UI/MailPartViewers/UIxMailPartTextViewer.m and
472 UI/WebServerResources/MailerUI.css
473 We avoid replacing "\r\n" and "\n" with <br /> and
474 rather use CSS capabilities for proper formatting.
475 This is _WAY_ faster on very large mails.
477 2007-10-10 Francis Lachapelle <flachapelle@inverse.ca>
479 * UI/Scheduler/UIxComponentEditor.m
480 ([UIxComponentEditor -componentCalendar]): returns the calendar
481 object of the current event.
483 2007-10-05 Ludovic Marcotte <ludovic@inverse.ca>
485 * UI/WebServerResources/MailerUI.js
486 We check if at least one message is selected
487 before performing a Reply/Reply All/Forward
489 * SoObjects/Appointments/SOGoAppointmentFolder.m
490 and others - implemented support for recurring
491 events (with some known limitations right now,
492 all soon to be fixed).
494 2007-10-04 Francis Lachapelle <flachapelle@inverse.ca>
496 * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
497 the constraint that a username can't start with a digit.
499 2007-10-02 Francis Lachapelle <flachapelle@inverse.ca>
501 * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
502 repository to Inverse's branch.
504 2007-09-28 Francis Lachapelle <flachapelle@inverse.ca>
506 * SoObjects/Mailer/SOGoDraftObject.m
507 ([SOGoDraftObject -isValidAttachmentName:_name]): removed
508 constraint on space in file name.
509 ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
510 now removes from file name all characters preceding a backslash.
511 This happens with IE7 because the complete attachment file path
514 2007-09-25 Francis Lachapelle <flachapelle@inverse.ca>
516 * SoObjects/Appointments/SOGoAptMailNotification.m
517 ([SOGoAptMailNotification -appointmentURL]): set personal as the
518 default calendar where to add the event.
520 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
521 activate the SOGoUIxDefaultModule user defaults.
523 2007-09-21 Francis Lachapelle <flachapelle@inverse.ca>
525 * UI/SOGoUI/UIxComponent.m
526 ([UIxComponent -shortUserNameForDisplay]): returns the string
527 "wrongusernamepassword" when authentication failed.
529 2007-09-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
531 * UI/MailPartViewers/UIxMailPartICalViewer.m
532 ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
533 entry of the Calendars parent folder.
535 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
536 -messageSubject]): new accessor method to work-around a problem
537 within SOPE where a subject could be returned as an NSData.
539 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
540 -appendPersonalSources]): make sure the value of the "c_path4" of
541 the returned rows are not NSNull, otherwise, discard them.
543 2007-09-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
545 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
546 -compare:otherFolder]): new overriden method that compares two
547 contact foldes based on their class and then transfer the control
548 to the super method in SOGoFolder.
550 * SoObjects/Contacts/SOGoContactLDAPFolder.m
551 ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
552 compare two contact folders based on their class and then their
555 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
556 new method for sorting folders. The folders are compared based on
557 their ownership, whether they are a main folder and finally
558 depending on their display name.
560 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
561 -pathArrayToSOGoObject]): do not reorder the paths if the third
562 element is an instance of NSNull.
564 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
565 -subFolders]): returns a sorted array using the "compare:"
568 2007-09-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
570 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
571 -calendars]): also returns the owner of the listed folders.
573 * SoObjects/Appointments/SOGoAppointmentFolder.m
574 ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
576 * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
577 method into UIxFolderActions.
579 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
580 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
581 freebusy info from the "personal" calendar.
583 * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
584 -createFolderAction]): new standardized method for requesting
585 folder creations among gcs-based modules.
587 * UI/Common/UIxParentFolderActions.[hm]: new action class module.
589 * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
590 module, equivalent to the SOGoParentFolder's child
591 SOGoContactFolders, but for calendars.
593 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
594 method that returns translated strings for controller bundles
595 (same as what UIxComponent does for view bundles).
596 ([SOGoObject -pathArrayToSOGoObject]): new method that returns
597 the real path to a subscribed folder (if subscribed).
598 ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
599 ([SOGoObject -globallyUniqueObjectId]): new instance method
600 calling its class equivalent.
602 2007-09-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
604 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
605 whether the user is logged in and if so, redirect to his/her
607 ([SOGoRootPage -appendToResponse:inContext:]): removed useless
610 2007-09-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
612 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
613 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
615 ([SOGoFolder -displayName]): new method.
616 ([SOGoFolder -delete]): accept to proceed only if nameInContainer
619 * SoObjects/Contacts/SOGoContactLDAPFolder.m
620 ([SOGoContactLDAPFolder
621 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
622 renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
624 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
625 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
626 removed method, reimplemented in SOGoFolder.
627 ([SOGoContactGCSFolder -displayName]): removed method,
628 reimplemented in SOGoFolder.
629 ([-delete]): removed method, modified in SOGoFolder.
631 * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
632 a subclass of SOGoParentFolder.
634 * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
635 from SOGoContactFolders and modified to be more content-independent.
637 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
638 ([UIxMailActions -markMessageReadAction]): new methods moved from
639 UIxMailListView and adapted to invoke the client object directly,
640 since the previous versions had to to a lookup from the parent
643 * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
644 method into UIxMailActions.
645 ([-markMessageReadAction]): same as above.
646 ([-viewAction]): removed useless method.
647 ([-javaScriptOK]): removed useless method.
648 ([-isJavaScriptRequest]): removed useless method.
649 ([-lookupActiveMessage]): removed useless method.
651 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
652 -responseWithStatus:status]): new method that returns a WOResponse
653 initialized with the specified status code.
654 ([WODirectAction -responseWith204]): new method that invokes the
655 above one with "204" as parameter.
656 ([WODirectAction -redirectToLocation:newLocation]): rewrote method
657 to make use of -responseWithStatus:.
659 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
660 method that returns a WOResponse initialized with the 204 status
663 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
664 always use a "not deleted" search qualifier along with the user
665 qualifier (if present).
667 2007-09-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
669 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
670 -contactSearchAction]): only return the records which have an
673 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
674 -trashInContext:_ctx]): no longer expunge the mailbox after
675 marking a message deleted.
676 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
679 * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
680 ([-trashAction]): moved method into UIxMailActions.
681 ([-moveAction]): moved method into UIxMailActions.
683 2007-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
685 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
686 ([_UIxHTMLMailContentHandler
687 -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
688 comments from the CSS code, do not add the CSS code to the body
689 content and remove references of body from the CSS declarations.
690 ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
691 ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
692 common with cssContent in a different method and invoke it only
695 * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
696 instead of UIxPageFrame.
698 2007-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
700 * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
701 ([-appendToResponse:responseinContext:ctx]): commented out.
702 ([SOGoRootPage -connectURL]): new accessor that returns the full
703 url the the "connect" method.
704 ([-connectAction]): rewrote method to return a properly formatted
705 auth. cookie based on the username and password passed as
708 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
709 set the value of the cookie to "discard" and set its expiration
712 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
713 -preprocessCredentialsInContext:context]): consider the user
714 anonymous if the cookie value is "discard".
715 ([SOGoWebAuthenticator
716 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
717 set the expiration date of the cookie to yesterday.
719 * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
720 returns the path to the application if the clientObject is not a
723 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
724 moved the requirement of authentication from the SOGo application
727 * SoObjects/Appointments/SOGoAppointmentObject.m
728 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
729 check whether the new appointment object is still relevant before
730 sending a notification.
732 2007-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
734 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
735 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
736 render the login page through the SoDefaultRenderer.
738 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
739 -isPublicInContext:localContext]): new overriden method that
742 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
743 -currentCalendarLogin]): replace css-unsafe characters with _.
745 * UI/SOGoUI/UIxComponent.m ([UIxComponent
746 -shortUserNameForDisplay]): simplified method.
747 ([-user]): removed method since [context activeUser] is as useful.
749 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
751 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
752 set the cookie path to "/".
754 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
755 authenticator based on the request handler key. "dav" returns the
756 SOGoDAVAuthenticator, anything else returns the Web authenticator.
758 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
761 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
762 implementing a subclass of SoCookieAuthenticator, designed for
763 web-based cookie authentication of users.m
765 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
766 new method that resets the authentification cookie.
768 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
770 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
771 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
772 didBind to NO to make sure no false authentication is returned if
773 the bind operation is not executed.
775 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
777 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
778 "In-Reply-To" header field when replying.
780 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
781 table field names that are queried.
783 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
784 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
785 add the "c_" prefix to the quick table field names that are
788 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
790 * SoObjects/Appointments/SOGoAppointmentFolder.m
791 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
792 "personal" to the ocs path of the appointment folder.
794 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
795 -flatContentAsString]): use latin1 when the encoding is not
796 specified, and to reencode data chunk which were not correctly
797 decoded with the original charset.
799 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
800 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
801 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
802 ([SOGoAppointmentFolder
803 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
804 override those methods to use the "personal" additional directory.
806 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
807 append "/personal" to the calendar path to simulate a single
808 calendar in a choice of many.
810 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
811 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
812 methods back here. Moved the folder existence check here, and do
813 it on self only when the lookup happens for a non-folder object.
814 This permits to accept entries for folders with parents who
817 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
819 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
820 -shouldTakeValuesFromRequest:requestinContext:context]): same as
823 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
824 -shouldTakeValuesFromRequest:requestinContext:context]):
825 redesigned method since any method called can be received from a
826 POST or a GET. Instead we check the method call itself and we
827 accept only if it has the "save" prefix.
829 * SoObjects/Appointments/SOGoAptMailNotification.m
830 ([SOGoAptMailNotification -getSubject]): returns the subject an a
831 quoted-printable encoded string, if needed.
833 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
834 -asQPSubjectString:encoding]): moved method into
835 NSString+Utilities.m.
837 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
839 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
840 -messageForwardingList])
841 ([UIxPreferences -itemMessageForwardingText])D
842 ([UIxPreferences -userMessageForwarding])
843 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
844 new template methods for manage the user preference regarding
847 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
848 algorithm to return, in order, the user's defined language or the
849 first browser language or, finally, the default language.
850 ([SOGoUser -messageForwarding]): new method that returns the user
851 preference for message forwarding: "inline" or "attached",
852 defaulting to "attached".
854 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
855 -contentForInlineForward]): new method that returns the content of
856 the message for inline forwarding based on the SOGoMailForward
859 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
860 -fetchMailForForwarding:sourceMail]): check the user preference
861 for message forwarding and compose inline forwarded messages if required.
863 * SoObjects/Appointments/SOGoCalendarComponent.m
864 ([SOGoCalendarComponent
865 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
866 now use a template based on the language returned from the
869 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
870 a subclass of SOGoMailForward for English locale.
872 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
873 a subclass of SOGoMailForward for French locale.
875 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
876 helps build template for inline forwarded messages.
878 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
880 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
881 to handle "<var:if-ie>" template tags.
883 * UI/SOGoElements: new extension bundle containing sogo-specific
886 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
887 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
888 selected in the dialog.
889 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
890 first category, if ever, of the calendar entity.
892 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
893 -composeAction]): restored method since it is needed by the
896 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
897 -composeAction]): the address fields should be arrays and not
900 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
901 that returns the build date of SOGo in the template.
903 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
905 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
906 -_flattenedRecords:records]): when the c_cn field is empty,
907 returns set a formatted string with the concatenation of
908 c_givenname and c_sn as the displayName.
910 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
911 -isValidMailAccountName:_key]): prevent unknown accounts from
914 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
915 -pathToAttachmentObject]): we no longer need the filename
916 extension for SoLookup...
918 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
919 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
920 filename to have an extension, and thus accept any filename.
922 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
923 -currentCName]): new method that returns the c_name of the
924 contact, correctly escaped to be passed by url afterwards.
926 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
927 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
928 instance of [self decodedFlatContent] instead of the buggy
929 NSString from [super flatContentAsString] to the parser.
931 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
933 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
934 new category method to reponds to the "delete" web command on
936 ([UIxMailActions -deleteAttachmentAction]): new category method to
937 reponds to the "deleteAttachment" web command on drafts, taking
938 the "filename" url parameter into account.
940 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
941 -contentForEditing]): new method that retrieve the editable mail
943 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
944 returns the body keys for attached files (parts with a "filename"
947 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
948 -asQPSubjectString:encoding]): do not change the string if the
949 encoded string has the same length (which means it is already
951 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
952 that retrieve a draft along with its attachments for editing.
953 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
954 choke if the "to" header field is empty.
955 ([SOGoDraftObject -delete]): new method to delete the draft folder
956 whenever operations are done.
958 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
960 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
961 useless stub method, of which the intention was implemented in
963 ([-lookupSentFolderUsingAccount]): removed obsolete method.
964 ([-selectedMailIdentity]): removed obsolete method.
965 ([-lookupSentFolderUsingFrom]): removed obsolete method.
966 ([-storeMailInSentFolder:_path]): removed obsolete method, of
967 which the mechanism has been put in -[SOGoDraftObject sendMail]
969 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
970 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
971 adapted algorithms to the new SOGoDraftObject methods.
972 ([-deleteAction]): removed method since local draft objects cannot
973 be removed by the user.
975 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
976 -expungeAction]): new method replacing the one previously found in
978 ([UIxMailFolderActions -createFolderAction])
979 ([UIxMailFolderActions -renameFolderAction])
980 ([UIxMailFolderActions -deleteFolderAction])
981 ([UIxMailFolderActions -emptyTrashAction])
982 ([UIxMailFolderActions -subscribeAction])
983 ([UIxMailFolderActions -unsubscribeAction]): error situations
984 should have http return code 500 instead of 403.
986 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
987 -composeAction]): new method replacing the one previously in
990 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
991 -imap4URLString]): removed overriden method (see below).
993 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
994 cache the mailbox acl.
995 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
996 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
998 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
999 the new method of determining the users mail accounts.
1001 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
1002 longer adds a "/" at the end of the string (the default for
1003 folders), therefore this will be overriden in SOGoMailFolder
1004 rather than in SOGoMailObject.
1006 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
1007 method, moved into the new UIxMailActions module class.
1009 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
1010 -newDraft]): new method that returns a new SOGoDraftObject
1011 instance with a unique filename based on the current timestamp and
1012 the "newDraft" prefix.
1014 -lookupName:nameinContext:localContextacquire:acquire]): overriden
1015 method by detecting local drafts with their "newDraft" prefix.
1016 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
1018 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
1019 from scratch by making it a subclass of SOGoMailFolder.
1021 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
1024 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
1027 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
1030 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
1031 new method, initializing the new ivars: IMAP4ID, headers, text,
1032 sourceURL and sourceFlag.
1033 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
1034 ([-_ensureUserSpoolFolderPath])
1035 ([-saveMimeMessageToTemporaryFileWithHeaders:])
1036 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
1037 ([-deleteTemporaryMessageFile:], [-delete], [-content])
1038 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
1039 ([-uid], [-flags], [-size], [-envelope]): removed methods.
1040 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
1042 ([SOGoDraftObject -setSourceURL:newSourceURL])
1043 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
1044 methods to store the url of the original message between accesses
1045 so that, depending on the action taken (forward or reply), the
1046 correct flag can be given.
1047 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
1048 the imap4 id that is returned for the message whenever it is saved
1049 into the drafts folder.
1050 ([SOGoDraftObject -save]): new method that takes in charge the
1051 saving of the message in the IMAP drafts folder.
1052 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
1053 new method that fills the original data of the new message with
1054 the reply content of the original message.
1055 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
1056 above for message forwarding.
1057 ([-spoolFileManager]): removed useless method (only returned the
1058 default filemanager...)
1059 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
1060 the resulting message as an NSData chunk.
1062 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
1063 containing a rewrite of the mail action methods found in
1064 UI/Mailer/, that needed to be put in the SOGoMailObject class.
1065 ([SOGoMailObject -subjectForReply]): new method that returns a
1066 subject suitable for replies.
1067 ([SOGoMailObject -contentForReply]): new method that returns the
1068 textual content of an email, quoted for replying.
1069 ([SOGoMailObject -filenameForForward]): new method that returns
1070 the name of the filename that should contain the forwarded
1071 message, based on its subject.
1072 ([SOGoMailObject -subjectForForward]): explicit.
1074 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1076 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1077 -mailAccounts]): rewrote method to return the name of the mail
1078 accounts now available with the -[SOGoUser mailAccounts] method.
1079 ([UIxMailMainFrame -showLinkBanner]): removed method.
1080 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
1081 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
1082 ([UIxMailMainFrame -rootURL]): removed method.
1083 ([UIxMailMainFrame -userRootURL]): removed method.
1084 ([UIxMailMainFrame -calendarRootURL]): removed method.
1085 ([UIxMailMainFrame -contactsRootURL]): removed method.
1086 ([UIxMailMainFrame -hasErrorText])
1087 ([UIxMailMainFrame -errorText])
1088 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
1089 ([-composeAction]): removed method. Now provided by
1090 UIxMailAccountActions.
1091 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
1092 ([UIxMailMainFrame -hideFolderTree]): removed method.
1093 ([UIxMailMainFrame -treeRootClassName]): removed method.
1094 ([UIxMailMainFrame +initialize]): removed method.
1095 SOGoMailTreeRootClass userdefaults will no longer have any effect.
1097 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1098 -redirectToLocation:newLocation]): new method that implements the
1099 same functionality as WOComponent.
1101 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
1103 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
1104 method that returns whether the current mail is store in the
1105 drafts folder hierarchy.
1107 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
1108 ([-primaryEmail]): removed method.
1109 ([SOGoUser -primaryIMAP4AccountString]): removed method.
1110 ([SOGoUser -mailAccounts]): new method that returns an array
1111 containing description dictionaries for all the user mail
1112 accounts. Each account also contain the user's identities for that
1114 ([SOGoUser -allIdentities]): new utility method that returns all
1115 the user identities on all accounts.
1116 ([SOGoUser -primaryIdentity]): new method return the first
1117 identity of the first account.
1119 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
1121 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1122 -isInDraftsFolder]): returns NO.
1123 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
1125 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
1127 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1128 -isInDraftsFolder]): new method that detects if self is contained
1129 by the drafts folder by calling itself on the container object.
1131 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
1133 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
1134 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
1135 return the name of the mail accounts now available with the
1136 -[SOGoUser mailAccounts] method.
1138 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
1141 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
1144 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1145 -keysWithFormat:format]): method that forward the method of the
1146 same name to each member of the array, considering they all are
1147 instances of NSDictionary.
1148 ([NSArray -objectsForKey:key]): same principle as above.
1149 ([NSArray -flattenedArray]): new method that transforms an array
1150 of arrays into a single array containing all the elements of the
1153 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1154 -keysWithFormat:keyFormat]): new method inspired by the python
1155 string formatting system and which replaces occurences of "%{key}"
1156 by the corresponding keys.
1158 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1160 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
1161 sql script before the generic one when initializing mandatory
1164 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1166 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1167 -pureEMailAddress]): new utility method inspired by the
1168 "_rawSender" private method in SOGoDraftObject, which it now
1171 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
1172 provides a common API for sending emails, no matter what the
1175 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1177 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1178 -quotasAction]): invoke "relativeImap4Name" instead of
1179 "nameInContainer" since the latter also returns the "folder"
1182 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1183 -listMailboxesAction]): declare the output as text/plain in UTF-8.
1185 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1186 -deleteFolderAction]): fixed the url of the destination folder.
1188 * Main/SOGo.m ([SOGo +initialize]): show the build date and
1189 hostname at startup.
1191 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1193 * SoObjects/Appointments/SOGoCalendarComponent.m
1194 ([SOGoCalendarComponent
1195 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1196 set the mail date to the current date string returned by our
1197 rfc822DateString extension method.
1199 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1200 -_gcsFoldersFromFolder:): ignore the personal folders who are
1201 returned but don't really exist.
1203 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
1205 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
1206 has to return only one element.
1208 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1210 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1211 -content]): new method returning the decoded content of the
1212 corresponding attachment as an NSData instance.
1213 ([UIxMailPartViewer -filename]): if the "filename" parameter of
1214 the metadata parameterList is empty, try to find out the filename
1215 from the "disposition" metadata returned with the BODYSTRUCTURE
1218 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1219 -composeAction]): prefix the INBOX folder with "folder".
1221 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
1222 -relativeImap4Name]): return nameInContainer stripped from its
1223 first 6 characters since all folder names are prefixed with
1226 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1227 -imap4URLString]): invoke -relativeImap4Name instead of
1228 "nameInContainer" since the former will return the fixed IMAP4
1229 foldername and the latter the SoObject name.
1231 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1232 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
1234 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
1235 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1236 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
1237 ([SOGoMailAccount -sentFolderNameInContext:])
1238 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
1239 names with "folder".
1240 ([SOGoMailAccount -inboxFolderInContext:_ctx])
1241 ([SOGoMailAccount -sentFolderInContext:_ctx])
1242 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
1243 the folder names with "folder" since they are prefixed earlier.
1245 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1247 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1248 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
1249 all starts with "folder".
1251 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
1252 longer declare security info from here.
1254 * SoObjects/Mailer/SOGoMailFolder.m
1255 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
1256 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
1257 folder names now always start with "folder".
1259 * SoObjects/Mailer/SOGoMailAccount.m
1260 ([-lookupName:inContext:acquire:]): folder names now always start
1263 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1265 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
1266 -forwardAction]): adapted to the new saveAttachment:withMetadata:
1269 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
1270 code to save the attached filenames with the filename returned by
1271 the web server as well as their mime types.
1273 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
1274 ([UIxMailPartMessageViewer -toAddresses])
1275 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
1276 the corresponding fields separated with a ", " (if needed).
1278 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1279 -saveAttachment:_attachwithMetadata:metadata]): new method
1280 replacing -saveAttachment:withName: and which takes a dictionary
1281 as parameter with the filename and the mime type of the
1283 The mimetype is then saved in a hidden text file.
1284 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
1285 take the mime type from the hidden text file related to the
1288 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
1289 ([SOGoContactGCSFolder
1290 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1291 return records if the db records are > 0 and not just > 1...
1293 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1295 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
1297 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
1299 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1300 ([SOGoContactLDAPFolder
1301 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1302 translate the returned records to a normalized form.
1304 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1305 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1306 translate the returned records to a normalized form.
1308 * UI/Scheduler/UIxCalListingActions.m,
1309 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
1310 SoObjects/SOGo/AgenorUserDefaults.m,
1311 SoObjects/Contacts/SOGoContactGCSFolder.m,
1312 SoObjects/Appointments/SOGoAppointmentFolder.m,
1313 OGoContentStore/OCSiCalFieldExtractor.m,
1314 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
1315 table fields with "c_".
1317 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1319 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
1320 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
1321 the application settings. If set, both limit will influence the
1322 maximum size of the resultsets and the time taken to solve them.
1323 ([LDAPSource -_initLDAPConnection]): initialize the limits.
1325 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1327 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
1328 method that declares the DAV namespace related to CardDAV.
1329 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
1330 method that declares the "access-control" and "addressbook-access"
1331 classes to the list.
1333 * SoObjects/Appointments/SOGoAppointmentFolder.m
1334 ([-lookupActionForCalDAVMethod:]): removed method.
1335 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
1336 method that declares the DAV namespace related to CalDAV.
1338 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
1339 optional method for subclasses which handle specific extensions to
1340 the DAV protocol: CardDAV or CalDAV.
1342 -lookupName:lookupNameinContext:localContextacquire:acquire]):
1343 new overriden method that handles dav invocations for extensions
1344 to DAV by returning an appropriate SoSelectorInvocation.
1346 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1347 -asDavInvocation]): new method returning a dictionary with a "ns"
1348 key representing the dav namespace and a "method" key representing
1349 the dav method name of the request.
1351 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1352 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
1354 ([UIxPreferences -shouldDisplayPasswordChange]): new template
1355 method that returns the value of SOGoUIxUserCanChangePassword.
1357 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1358 scan the value of SOGoUIxDefaultModule. If not set, the default
1359 module defaults to "Calendar".
1360 ([SOGoUserHomePage -defaultAction]): redirect the user to the
1361 value of "SOGoUIxDefaultModule".
1363 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1365 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1366 -contactInfos]): cache the results to avoid multiple invocations.
1368 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1369 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
1370 really should return something or if we fake to return nil...
1372 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1374 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
1375 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
1376 default is set to "bypass".
1378 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1379 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
1380 when authMethod is set to "bypass" from now on. This would avoid a
1381 security concern with a default installation of SOGo.
1382 AuthentificationMethod is now prefixed with "SOGo" for better
1385 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1387 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1388 -quotasAction]): new method that returns a json representation of
1391 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1393 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1394 -imap4URL]): rewrote method to support accented mailbox names.
1395 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
1396 SOGoAuthenticator's passwordInContext:.
1398 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1399 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
1400 start and due dates to nil if hasStartDate and hasDueDate are
1403 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1404 -passwordInContext:context]): made method public.
1406 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1407 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
1408 to false to avoid a null violation.
1410 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1412 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1413 -contentAsString]): returns the message encoded in ISO Latin 1
1416 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
1417 SOGoSuperUsername user defaults.
1418 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
1420 ([SOGoUser -rolesForObject:objectinContext:context]): if the
1421 current user is the superuser, grant him/her the "owner" role.
1423 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1424 the folder only if the current user is the owner of the future
1427 * SoObjects/Appointments/SOGoCalendarComponent.m
1428 ([SOGoCalendarComponent -contentAsString]): we return the content
1429 based on the permissions returned by the security manager instead
1430 of by looking at the user roles.
1432 * SoObjects/Appointments/SOGoAppointmentFolder.m
1433 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
1434 folders of the user to whom this folder belongs instead of the
1435 active user. This way, a delegate user will be able to have the
1436 same view that the original user has if he connects from his user
1439 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
1440 user exists before creating the SOGoUserFolder instance. If not,
1443 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
1444 return the message source code in plain text.
1446 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1447 -contentAsString]): returns the message encoded in UTF8.
1449 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1451 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
1452 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
1453 leading tagname into account when serializing the element values.
1455 * Main/SOGoProductLoader.m: only load bundle directories ending
1456 with the "SOGo" extension.
1458 * Main/SOGo.m ([SOGo
1459 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
1460 result set if the query has caused no exception. Otherwise we get
1461 an "evaluation is in progress exception".
1463 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1465 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1466 -generateSQLForInsert]): initialize error to nil before the
1467 serialization. Otherwise the method can get confused if it ever is
1468 initialized to something else.
1470 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
1471 -folderIsMandatory]): returns NO unconditionnally.
1473 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1474 -appendPersonalSources]): add the "personal" folder to the list of
1475 user folders even if it doesn't exist, so that it is created when
1476 the user accesses it.
1478 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1479 -folderIsMandatory]): returns YES if nameInContainer is set to
1480 "personal", which is the default address book.
1482 * SoObjects/Appointments/SOGoAppointmentFolder.m
1483 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
1484 users must have one Calendar folder (one and only one).
1485 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
1486 escaping '\' so make the carriage return a real one. This way,
1487 PgSQL 8 won't complain about escaping the string.
1489 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
1490 method that create the folder if considered mandatory.
1491 ([SOGoFolder -folderIsMandatory]): new method that determines
1492 whether the folder should be created automatically or not. To be
1493 overriden by subclasses.
1495 * Main/SOGo.m ([SOGo -run]): override method and create the
1496 missing system tables if needed.
1498 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1500 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
1501 -mailDateFormatter]): returns the user's date formatter.
1503 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
1504 applies the user timezone to the date object before returning it.
1506 * UI/Common/UIxSortButton.m: removed useless class module.
1508 * UI/Common/UIxSortableTableHeader.m: removed useless class
1511 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1512 -contactInfos]): use the "asc" url parameter instead of "desc" to
1513 determine the ordering.
1514 ([-sortOrdering]): removed method.
1515 ([UIxContactsListView -init]): removed the "searchText" ivar.
1516 (general): the template no longer use the UIxSortableTableHeader
1519 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1520 -defaultSortKey]): default sort following the messages arrival
1521 instead of their date.
1522 ([-isSortedDescending]): removed method.
1523 ([-imap4SortOrdering]): use the "asc" url parameter instead of
1524 "desc" to determine the ordering.
1525 (general): the template no longer use the UIxSortableTableHeader
1528 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1530 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
1532 ([-setQualifier:_msg], [-qualifier]): removed methods.
1533 ([UIxMailListView -defaultAction]): added code to handle the
1534 search criteria and value passed as url parameters. Also, we now
1535 handle the same search criterias as Thunderbird/Icedove.
1537 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1539 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
1540 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
1541 the string instead of the string itself.
1542 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
1544 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
1545 bool var "acceptAnyUser" that is set when the AuthenticationMethod
1546 user default is nil.
1547 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
1548 unconditionnally returns an instance whenever acceptAnyUser is set.
1550 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1552 * Main/sogod.m (main): prevent SOGo from running as root.
1554 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1556 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
1557 -setCurrentPassword:newPassword]): new stub method.
1558 ([SOGoUser -dateFormatterInContext:context]): new method that
1559 returns an instance of SOGoDateFormatter configured based on the
1562 * UI/Common/UIxPageFrame.m ([UIxPageFrame
1563 -relativePreferencesPath]): new method.
1565 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
1566 removed useless method.
1568 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
1569 different configurable formats (long and short date + time).
1571 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
1573 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1574 -isInternetRequest]): removed method.
1576 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1577 -jsonRepresentation]): new method with an explicit name.
1579 * UI/PreferencesUI/product.plist: new bundle that provides a web
1580 ui for handling user defaults.
1582 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
1584 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
1586 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
1588 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1590 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
1592 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1594 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
1595 -compareEventsAscending:otherEvent]): no longer use compare: on
1596 the time objects since one of them could be an NSNull, which
1597 crashes when comparing with anything.
1599 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1600 -eventsListAction]): sort events from here.
1601 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
1603 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
1604 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
1606 * SoObjects/Appointments/SOGoAppointmentFolder.m
1607 ([SOGoAppointmentFolder
1608 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
1609 no longer sort elements from here.
1611 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1613 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1614 -aclsForUser:uid]): implemented method by forwarding the request
1615 to the container. This fixes a bug where users could no longer
1616 read emails from shared folders.
1618 * SoObjects/Appointments/SOGoCalendarComponent.m
1619 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
1620 here, but rather in its parent class.
1622 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
1623 -stringForSecondsSinceThe70s:seconds]): new utility method.
1625 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1626 -eventsListAction]): no longer reduce the end day of one day for
1627 all day events since everything has been fixed in
1628 OCSiCalFieldExtractor.
1630 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1631 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
1632 the end date of all day events of 1 so that they stay on their
1635 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1637 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
1639 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
1641 ([-fetchCoreTasksInfos]): removed method.
1643 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1644 -init]): initialize an instance of SOGoDateFormatter.
1645 ([UIxCalListingActions -eventsListAction]): the display start and
1646 end dates are added to the listing for each event.
1648 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
1650 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1651 -isAllDay]): returns YES if the "hm" url parameter is set to
1653 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
1654 is displayed one day earlier.
1656 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1658 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1659 -_setupContext]): take the range of dates specified by the popup
1662 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
1663 WODirectAction that returns WOResponse objects with the events or
1664 todos satisfying the parameters passed in the url.
1666 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1667 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
1668 "isAllDay" into account and compute the amount of days to pass to
1671 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
1673 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
1674 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
1675 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
1676 new method that returns a json-formatted array of the visible tasks
1677 for the current user.
1679 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1681 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
1682 object must be present in the list of UIDs we delete the object
1683 from. Otherwise Calendar objects having no organizer and no
1684 attendees will remain in their owner's Calendar.
1686 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1687 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
1688 first 3 elements of the path array if the url returned by
1689 baseURLInContext: returns a hostname.
1691 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1692 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
1693 nil, in which case a crash happens when calling hasPrefix:.
1694 ([SOGoMailFolder -_sharesACLs]): same as above.
1695 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
1696 otherUsersFolderName is nil, we return nil.
1697 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
1698 nil from [self otherUsersPathToFolder], we return nil too.
1700 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1702 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1703 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
1704 the result of [self baseURLInContext:] to avoid a double escaping
1705 in the resulting string.
1707 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
1708 the user has the "ObjectReader" role on the parent container, then
1709 he is granted the "ObjectViewer" role on this object. Same for
1710 "ObjectEraser", although this might change later.
1712 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1713 -toolbar]): determine the toolbar filename based on the
1714 permissions declared by the securitymanager. The role mechanism
1715 has been adjusted on a lowerlevel so we can simplify the code.
1717 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1718 -initWithName:newNameinContainer:newContainer]): read the content
1719 directly from here. That way we can determine whether the object
1721 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
1722 the ObjectCreator role is enabled, we also grant the ObjectEditor
1723 role to the current user.
1725 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
1726 changed the method paradigm to only return HTTP code 204. Not test
1727 is done whatsoever since the security manager does it for us.
1729 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
1730 removed method because the same exists in UIxFolderActions.m
1732 * UI/Contacts/UIxContactsUserRightsEditor.m
1733 ([UIxContactsUserRightsEditor
1734 -setUserCanReadObjects:userCanReadObjects]): new method.
1736 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
1737 "FolderEraser" and special permission "Access Object". Removed
1738 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
1739 can be used instead. Removed "FolderReader" since it is useless.
1741 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
1742 -vCard]): directly use the "content" ivar since it is initialized
1743 during object creation.
1745 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1746 ([SOGoContactLDAPFolder -init]): no longer handle the
1747 nameInContainer no the container ivars. They were removed because
1748 this class is a descendant of SOGoObject which already has them.
1749 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
1750 returning "displayName".
1751 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
1754 * SoObjects/Appointments/SOGoCalendarComponent.m
1755 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
1756 ([SOGoCalendarComponent -findParticipant:user]): new name for
1757 method "participant:".
1758 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
1759 findparticipant but taking a uid string as parameter.
1760 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
1761 iCalendar automatically. Instead, this is done only when the user
1762 is a "date and time viewer".
1763 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
1764 (modifier and responder) into account by compiling them with the
1767 * SoObjects/Contacts/SOGoContactFolder.h: removed
1768 "nameInContainer" from the list of required methods.
1770 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1771 -davContentType]): returns "text/calendar".
1773 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1774 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
1775 groupdav resource-type.
1777 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1778 -davContentType]): same as below.
1780 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1781 -initWithName:newNameinContainer:newContainer]): new overriden
1782 method setting the custom owner directly.
1784 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1785 -davContentType]): same as below.
1787 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1788 -davContentType]): same as below.
1790 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
1791 declare "httpd/unix-directory".
1793 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
1794 "UTC" as fallback timezone instead of "Canada/Eastern".
1795 ([-hasEmail:email]): make use of the new NSArray's
1796 containsCaseInsensitiveString: method.
1798 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1799 -davContentType]): declare "message/rfc822" as content type.
1801 * SoObjects/Appointments/SOGoAppointmentFolder.m
1802 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
1804 ([SOGoAppointmentFolder
1805 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
1806 ([-fetchContentObjectNames]): commented out method since it was
1807 usefull only for testing Funambol.
1809 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1810 -containsCaseInsensitiveString:match]): an enhanced version of
1813 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
1815 ([-showMarkDeletedButton]): removed useless method.
1816 ([-showTrashButton]): removed useless method.
1818 * SoObjects/Appointments/iCalEntityObject+SOGo.m
1819 ([iCalEntityObject -userIsParticipant:user]): new proxy method
1820 that invoked isParticipant on self for each possible email
1821 addresses of the user passed as parameter.
1822 ([iCalEntityObject -userIsOrganizer:user]): same as above.
1824 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
1827 * SoObjects/Appointments/SOGoAppointmentObject.m
1828 ([SOGoAppointmentObject
1829 -saveContentString:contentStringbaseVersion:baseVersion]): remove
1830 method since an event may not have an organizer.
1832 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1833 -GETAction:localContext]): clarified method. Added support for
1834 content-type (thanks to Helge Hess).
1835 ([SOGoObject -initWithName:_nameinContainer:_container]):
1836 initialize and retain the owner.
1837 ([SOGoObject -davContentType]): returns "text/plain".
1839 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1841 * UI/Common/UIxObjectActions.m ([UIxObjectActions
1842 -addUserInAclsAction]): send an acl addition mail.
1843 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
1846 * UI/Common/UIxFolderActions.m ([UIxFolderActions
1847 -_realActionWithFolderName:folderDict]): handle the possible
1848 presence of the "mail-invitation" url parameter. If present, the
1849 user will be redirected to the relevant folder.
1851 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
1852 ([SOGoUser -language]): new method that returns the user's
1853 preferred language, or the system's if none has been set yet.
1855 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
1856 that returns the full dav url to self.
1857 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
1858 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
1859 returns the full so url to the base of the SOGo module to which
1860 self belongs, and for the specified user.
1861 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
1862 but for the current user.
1863 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
1864 required by the acl advisory templates and which returns a link
1865 the target user can click to activate its new subscription.
1866 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
1867 but for inclusion of the application/x-sogo-notification part,
1868 which will be handled by the Lightning enhancer plugin.
1870 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
1871 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
1872 do nothing yet since imap folder subscription is not handled yet.
1874 * SoObjects/SOGo/SOGoContentObject.m
1875 ([-hasSupportForDefaultRoles]): removed method.
1877 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
1878 -getFullEmailForUID:uid]): new method that returns the username +
1881 * SoObjects/Appointments/SOGoCalendarComponent.m
1882 ([SOGoCalendarComponent +initialize]): the default language for
1883 mail templates is now set to English.
1885 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
1886 SOGoACLAdvisory implementing the french template for user removal
1889 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
1890 SOGoACLAdvisory implementing the french template for user
1893 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
1894 SOGoACLAdvisory implementing the english template for user removal
1897 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
1898 SOGoACLAdvisory implementing the english template for user
1901 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
1902 supercall of all the acl advistory templates. The model is based
1903 on SOGoAptMailNotification except that the template encapsulates
1904 the message to be sent. Later, we might create a superclass common
1905 to all template-based emails.
1907 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
1908 -addRange:newRange]): new method that store a string
1909 representation of the NSRange passed as parameter.
1910 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
1911 any range contained in self intersect with the one passed as parameter.
1913 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
1914 store ranges in an array to prevent them from intersecting with
1915 each other during the passes.
1917 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1919 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1920 -primaryFetchMailboxInfo]): useless method. Removed.
1922 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1924 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1925 -toManyRelationshipKeys]): invoke [self subfolders].
1926 ([SOGoMailFolder -subfolders]): new method containing what used to
1927 be in toManyRelationshipKeys.
1928 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
1931 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1932 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
1933 named and at the beginning of which we put the predefined folders.
1935 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1936 -emptyTrashAction]): new method inspired by a similar one from
1937 UIxMailListView, to which we added the ability to remove
1940 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
1941 method. Replaced with a similar one in UIxMailFolderActions.
1943 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1944 -renameFolderAction]): implemented method.
1945 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
1946 specified folder. Instead, we put it in the trash folder.
1948 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
1949 method, replaced with a similar method in the new
1950 UIxMailFolderAction class module.
1951 ([-deleteFolderAction]): idem.
1953 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1954 -createFolderAction]): new method implementing subfolder creation.
1955 ([UIxMailFolderActions -renameFolderAction]): new method
1956 implementing subfolder renaming (basic implementation to be
1958 ([UIxMailFolderActions -deleteFolderAction]): new method
1959 implementing folder deletion.
1961 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
1962 web actions related to the handling of imap folder.
1964 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1966 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1967 -ownerInContext:localContext]): overriden method because we are an
1968 IMAP4 client and we need a bit more intelligence to deduce the
1969 owner of the current folder.
1970 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
1971 return an NSException so we need to be careful here to avoid a
1973 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
1974 NSException so we need to be careful here to avoid a crash.
1976 * SoObjects/Mailer/SOGoMailAccounts.m
1977 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
1978 there is no longer any concept of Intranet or Internet connection
1981 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1982 -sharedFolderName]): new method.
1983 ([SOGoMailAccount -otherUsersFolderName]): new method.
1985 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
1986 new javascript code and the new UIxMailAccountActions class.
1988 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
1989 javascript code and the new UIxMailAccountActions class.
1991 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
1992 new javascript code and the new UIxMailAccountActions class.
1994 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1995 -listMailboxesAction]): new method that returns a json-formatted
1996 tree of all the mailboxes available to the current user.
1998 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
1999 web actions related to the handling of mail accounts.
2001 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
2004 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
2005 -jsonRepresentation]): new interface method meant to be overriden
2006 by the primitive classes.
2008 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2010 * UI/MailerUI/UIxMailSplashView.m: removed.
2012 * SoObjects/Appointments/SOGoCalendarComponent.m
2013 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
2014 the uid to the list only when the user email is recognized by the
2017 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2019 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2020 -isDeletionAllowed]): completed method with the new imap acl api.
2022 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
2025 * SoObjects/SOGo/SOGoPermissions.m: added the new role
2026 "SOGoMailRole_MessageEraser".
2028 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
2029 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
2030 "defaultUserID" method into account.
2032 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
2033 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
2034 "defaultUserID" method into account.
2036 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
2037 methods to support the IMAP acls mentionned in the RFC 4314,
2038 removed the ones specific to Cyrus.
2040 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
2041 mandatory method for subclasses. Removed the SOGoDefaultUserID
2044 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
2045 overriden method to return @"<default>".
2047 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2048 -defaultUserID]): overriden method to return @"<default>".
2050 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2051 -aclsForUser:uid]): overriden method.
2052 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
2053 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
2054 ([SOGoMailFolder -defaultUserID]): overriden method.
2055 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
2057 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2059 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2060 -aclUsersForObjectAtPath:objectPathArray]): new method that being
2061 forwarded the calles to aclUsers for the GCS-based subclasses of
2064 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
2065 methods that would have been used to support IMAP acls. Replaced
2066 them with the new protocol for them that has been implemented in
2067 SOGo during the last few weeks.
2069 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2070 -hasSupportForDefaultRoles]): override method by returning "YES".
2072 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2073 -addObjectUniquely:object]): new method with an explicit name.
2075 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
2076 "acl" to "aclUsers". Now designed to return only the uid of the
2077 users involved in an ACL.
2078 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
2079 "NO" by default. To indicate to the acl editor that we don't want
2080 to handle a default user.
2082 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
2083 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
2086 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
2087 provides a view to the IMAP acls.
2089 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
2091 * UI/WebServerResources/MailerUI.js: replaced all invocations of
2092 addEventListener to the use of prototype's Event object. Also,
2093 configured all menus programmatically following descriptions lists
2094 containing their callbacks, or nulls, submenus id or separators.
2096 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2098 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2099 -addUserInAclsAction]): save the previous roles of the user
2100 (unlikely) or the default roles, or None instead of saving the
2101 roles that should appear the first time in the role editor when no
2102 default has been set...
2104 * SoObjects/SOGo/SOGoObject.m: defined a new constant
2105 "SOGoDefaultUserID".
2107 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2108 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
2109 ignore the "AuthorizedSubscriber" role and add the "None" role
2110 when no other role is found.
2112 * UI/Common/UIxAclEditor.m: added a button for the new default
2115 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2116 -_initRights]): don't take the "None" role into account when
2117 initializing the list of current roles.
2119 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
2122 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2124 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2125 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
2126 There is no need to subscract the start from the length if a space
2127 is not found since the range has not changed either. Finally, the
2128 first character before the url might also be a tab or a cr, so we
2129 match it against the "urlAfterEndingChars" custom NSCharacterSet.
2130 ([NSString -stringByDetectingURLs]): modified to handle email
2131 addresses and add a correct "mailto:" link.
2133 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2135 * SoObjects/Appointments/SOGoAppointmentFolder.m
2136 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
2137 method to return the events in the range of 2 weeks ago up to 4
2140 * UI/MailPartViewers/UIxMailPartTextViewer.m
2141 ([UIxMailPartTextViewer -flatContentAsString]): use the new
2142 "stringByDetectingURLs" method to offer clickable urls.
2144 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2145 -stringByDetectingURLs]): this new method replaces passive URLS
2146 with active ones for HTML resolution of the text.
2148 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2150 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2151 -asQPSubjectString:encoding]): simplified method.
2152 The headers indicates "utf-8" again thank to our fix in
2155 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
2158 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2160 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2161 -removeUserFromAclsAction]): implemented this method which was
2162 missing and is required to remove users from ACLs.
2164 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2165 -subscribeAction]): folderDict was not autoreleased, resulting in
2168 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2169 -primaryFetchProfile]): when building with libFoundation, don't
2170 use the "propertyList" method from NSString. Rather, we convert
2171 the string to an NSData instance and passit as parameter to
2172 NSDeserializer. This way, we obtain a mutable dictionary rather
2173 than an immutable one.
2175 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
2176 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
2177 constant string "contentTypeValue".
2178 contentTypeValue is now set back to iso-8859-1 since NGMime
2179 converts extracts the data in that encoding.
2181 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2183 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2184 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
2185 "bindFields" value is present in the user defaults, use the
2186 specified fields to find the dn of the user to bind.
2187 ([LDAPSource -allEntryIDs])
2188 ([LDAPSource -fetchContactsMatching:match])
2189 ([LDAPSource -lookupContactEntry:entryID])
2190 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
2191 bind and unbind the connection on each request.
2193 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
2195 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2196 -contactSearchAction]): simplified method to use the facilities
2197 provided by the LDAPUserManager. No longer takes care of the
2198 "ldap-only" url parameter since all requests are handled by the
2201 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2202 -primaryFetchProfile]): check that the value returned is not null
2203 before interpreting it.
2205 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2206 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
2207 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
2208 system email is already present, remove it before adding it.
2210 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2211 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
2212 loginToCheck is not empty.
2213 ([LDAPSource -fetchContactsMatching:match]): check that match is
2215 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
2217 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
2220 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2222 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
2224 ([SOGoUser -systemEmail]): returns the email formed from the
2225 username and the default mail domain.
2226 ([SOGoUser -hasEmail:email]): test whether the user has the
2227 specified email, in a case-insensitive way.
2229 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2230 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
2231 check login information.
2233 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2234 ([SOGoContactLDAPFolder
2235 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
2236 no longer manage LDAP connections. The requests are forwarded to
2237 the relevant LDAPSource instead.
2239 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2240 -appendSystemSources]): pass LDAPSource objects to
2241 SOGoContactLDAPFolder instances.
2243 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
2244 address of the "from" field before sending the message. Otherwise,
2245 sending the mail won't work.
2247 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
2248 rewrote this method to request all the available email identities
2249 for the current user. Also, the from field also contains the full
2250 name of the user, not just his/her email address.
2252 * SoObjects/Appointments/SOGoCalendarComponent.m
2253 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
2254 from the previous module iCalEntityObject+Agenor.
2255 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
2256 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
2259 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
2260 replacing the SOGoContactLDAPEntry module. It was renamed as such
2261 because it now receives a dictionary instead of an NGLdapEntry.
2262 It thus can now handle data from any source of LDIF data, not
2263 only coming from LDAP.
2265 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
2266 implementing most of what used to be the AgenorUserManager class.
2267 The difference is that users are cached in the forme of
2268 dictionaries and many sources are used. Also, it can be used to
2269 search LDAP contacts.
2271 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
2272 the concept of "ldap source", to be used by all the classes
2273 needing access to LDAP-provided information: addressbooks and the
2274 user manager. Most the method thereing are transcriptions of
2275 methods previously found in SOGoContactLDAPFolder. It also contain
2276 utility methods for user matching and authentification.
2278 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
2279 module, rendered useless by code refactoring.
2281 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
2282 with the freshly written "LDAPUserManager".
2284 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2286 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
2287 SOGOContactLDIFEntry.
2289 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
2290 module, obsoleted by code in SOGo/LDAPSource.[hm].
2292 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2294 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
2295 new method with an explicit name.
2297 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2299 * SoObjects/Appointments/SOGoCalendarComponent.m
2300 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
2301 replacing "isOrganizer:orOwner:" by taking only one instance of
2302 SOGoUser as parameter.
2303 ([SOGoCalendarComponent -participant:user]): new method replacing
2304 the previous "isParticipant" boolean method by returning the first
2305 participant matching the user passed as parameter. This method is
2306 used so that both the regular email address and the "system email
2307 address" of the user are matched against the participants emails.
2309 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2310 -getSystemEMailForUID:uid]): new method that returns the email
2311 formed with the user's uid and the default mail domain.
2313 * SoObjects/Appointments/SOGoCalendarComponent.m
2314 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
2315 was previously commented out.
2317 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
2318 forwared to [AgenorUserManager getSystemEmailForUID:].
2320 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2321 -toolbar]): method replacing the one with the same name in the
2322 task and appointment editor classes. This method makes also use of
2323 the new method "isOrganizerOrOwner:" and "participant:" in
2324 SOGoCalendarComponent.
2326 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2327 -toolbar]): removed method, replaced with a method with the same
2328 name in UIxComponentEditor.
2330 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
2331 method, replaced with a method with the same name in
2334 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2335 -primaryFetchProfile]): the values returned from the database are
2336 converted to a put dictionary first, since the dictionary returned
2337 is actually an immutable one, which can cause a crash afterwards.
2339 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2341 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
2342 and "SOGoRole_ObjectEditor".
2344 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2345 -prepareRightsForm]): this method is no longer mandatory.
2347 * UI/Contacts/UIxContactsUserRightsEditor.m
2348 ([UIxContactsUserRightsEditor
2349 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
2350 module to handle acls related to the address books. Partial
2353 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2354 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
2357 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
2358 specified roles from cache.
2359 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2360 put resulting roles in cache.
2362 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
2363 initWithName:inContainer:. Instead, directly initialize the ivars
2364 as it is supposed to be to avoid an infinite loop whenever one of
2365 those two methods are overriden.
2367 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
2370 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2371 -aclsForUser:uid]): override method so that SOGo won't crash when
2372 loading the contact card.
2374 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2376 * SoObjects/Appointments/SOGoAppointmentFolder.m
2377 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
2378 "freebusy" special user should only require opaque elements.
2380 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2382 * SoObjects/Appointments/SOGoAppointmentFolder.m
2383 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
2384 our double declaration where the resulting XML would be screwed.
2385 There is only one collection per namespace.
2387 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
2388 rfc822DateString]): new method that returns a string conform to
2389 rfc 822 and suitable for email headers.
2391 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
2392 "rfc822DateString" category method on the date we put in the
2395 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2397 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
2398 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
2399 which should never be overriden.
2400 ([UIxUserRightsEditor -appendRight:newRight])
2401 ([UIxUserRightsEditor -removeRight:right])
2402 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
2403 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
2404 methods that can be used by the subclasses.
2405 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
2406 mandatorily be overriden to prepare the elements of the subclassed
2408 ([UIxUserRightsEditor -updateRights]): new method that should
2409 mandatorily be overriden to update the user rights from the
2410 elements of the subclassed form.
2412 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
2413 check if the uid is already listed before adding it to our array.
2414 This is because the acl table can contain more than one record per
2415 user/object relationship.
2417 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2418 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
2419 "roles" parameter is now an NSArray instead of a string. Therefore
2420 we loop throughout the array to populate the table. All the
2421 relevant records are removed prior to the addition of the new
2424 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2425 -aclsForUser:uid]): new override that returns nil until we add
2426 support for IMAP acls.
2428 * SoObjects/Mailer/SOGoMailAccounts.m
2429 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
2431 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2432 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
2434 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2435 -aclsForUser:uid]): override this method which will always return
2438 * SoObjects/SOGo/SOGoPermissions.[hm]: added
2439 [Public,Private,Confidential]
2440 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
2441 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
2442 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
2444 * SoObjects/Appointments/SOGoAppointmentFolder.m
2445 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
2446 that defines default roles for new elements in the acl.
2448 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
2449 module and subclass of UIxUserRightsEditor specific to the
2450 handling of user rights on calendar folders.
2452 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2454 * SoObjects/Appointments/SOGoAppointmentFolder.m
2455 ([SOGoAppointmentFolder -groupDavResourceType]): return both
2456 "vevent-collection" and "vtodo-collection".
2458 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
2459 that implements the detailed editor of user rights per-object.
2461 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2463 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2464 -rolesForObject:objectinContext:context]): no longer query objects
2465 for "roleForUser:". Instead, all objects should implement
2468 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
2469 new method to comply with the new acl "protocol" in SOGoObject.
2470 Uses SOGoFolder's new facilities for ACLS.
2471 ([SOGoContentObject -aclsForUser:uid]): idem.
2472 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
2473 ([SOGoContentObject -removeAclsForUsers:users]): idem.
2475 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2476 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
2477 based folders. This method is derived from the code that was in
2478 UIxAclFolder before its removal.
2479 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2482 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
2484 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
2485 ([SOGoFolder -setRoleForUsers:uidsto:role])
2486 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
2488 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
2489 that requires overriding by subclasses.
2490 ([SOGoObject -aclsForUser:uid]): idem.
2491 ([SOGoObject -defaultAclRoles]): idem.
2492 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
2493 ([SOGoObject -removeAclsForUsers:users]): idem.
2495 * UI/Common/UIxObjectActions.m: new module implementing the web
2496 actions common to SOGoObject and all its subclasses.
2497 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
2498 user with the clientObject defaults user rights to the object's
2501 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
2502 to the point where it will only list the users (and their name)
2503 associated with an object acl.
2505 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
2506 methods have been moved into SOGoObject and SOGoFolder during a
2509 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2510 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
2511 method made useless by the programmatic handling of iCalendar
2513 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
2514 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
2515 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
2517 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
2518 drop on all folder nodes, not just on leaves.
2520 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2521 ([SOGoContactLDAPFolder
2522 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
2524 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2526 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
2527 debugging facilities when the SOGoDebugObjectAllocation user
2530 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2532 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
2533 method that SOGo will need with non-gnustep Foundation
2535 ([NSString -stringByAppendingPathComponent:component]): new method
2536 that SOGo will need when building with libFoundation. Method
2537 removed later since it is available from
2538 Foundation/NSPathUtilities.h.
2540 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
2543 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
2544 every subclass to access [WOApplication context] without having to
2545 invoke it more than once.
2547 * SoObjects/Appointments/SOGoCalendarComponent.m
2548 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
2549 moved method from SOGoTaskObject and SOGoAppointmentObject up to
2552 * UI/Scheduler/UIxCalSelectTab.m: removed module.
2554 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2556 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2557 -vCard]): test the prefix of the card in a case-independent way.
2559 * OGoContentStore/OCSContactFieldExtractor.m
2560 ([OCSContactFieldExtractor
2561 -extractQuickFieldsFromContent:content]): we no longer accept
2562 records in a format other than versit vCard so we can get rid of a
2565 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2567 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2568 -selectorComponentClass]): restored method.
2570 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2572 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
2573 -shouldDisplayCurrentTask]): the current task is not displayed if
2574 it is NOT completed or if the "showCompletedTasks" flag is set.
2575 The logic was inverted in Lightning and is now in SOGo too.
2577 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2579 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
2580 want the "work" url instead of the "home".
2582 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
2583 -_saveSnapshot]): save url values from snapshot.
2584 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
2586 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2587 -calendarList]): new method replacing "availableCalendars".
2589 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
2590 -calendarFolders]): we now take the list of subscribed calendar
2593 * SoObjects/Appointments/SOGoAppointmentFolder.m
2594 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
2595 method derived from and replacing [UIxCalView calendarFolders].
2597 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2599 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2600 -toManyRelationshipKeys]): don't put the predefined folders in the
2601 list if they are returned by the server.
2603 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
2604 longer store the "flattenedBlocks" in a dictionary since the
2605 object will be deleted anyway and we don't need to put the folders
2608 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
2609 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
2610 attachment path into account when computing the part urls.
2612 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2614 * UI/Contacts/UIxContactsListViewContainer.m
2615 ([UIxContactsListViewContainer -additionalFolders]): take the list
2616 of subscribed folders from the new property list used for the user
2617 settings. The value of its key is SubscribedFolders for the
2618 dictionary entry named "Contacts".
2620 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2621 -canAccessContentAction]): new method to override the one from
2622 UIxFoldersActions by taking into account the fact that, this time,
2623 the clientObject is an ldap folder. Removed many method that used
2624 to be related to the handling of the user selector.
2626 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
2627 to make sure they can be removed.
2629 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
2630 populate the calendar entries based on the user settings plist.
2632 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2633 -selectForMailerAction]): restored method.
2635 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
2636 from a simplified version of the old UIxContactEditor (removed).
2638 * UI/Contacts/UIxContactsUserFolders.m: new template module for
2639 selecting users or user folders through an LDAP search of which
2640 the results are displayed as a tree.
2642 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
2643 method "onContactAdd" here since the Mailer is now the only module
2644 to use it when composing emails.
2646 * UI/WebServerResources/generic.js: added code for handling the
2647 new scheme used for describing SOGo folders, common code to handle
2648 folder addition or removal.
2650 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2651 -activateFolderAction]): new method that change the "active"
2652 settings in the folder-related fields in the user settings.
2653 ([UIxFolderActions -deactivateFolderAction]): see above.
2655 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2656 -checkRightsAction]): removed method.
2658 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2659 -updateAdditionalAddressBooksAction]): removed method.
2661 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2662 -updateCalendarsAction]): removed method.
2664 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2666 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2667 -checkRightsAction]): removed method.
2669 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2670 -canAccessContentAction]): new method designed to replace
2671 [UIxCalMainView checkRightsAction] in a more universal way.
2673 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2675 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2676 -roleOfUser:uidinContext:context]): take all the subkeys into
2677 account, not only the "personal" folder.
2679 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2680 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
2681 to the new components.
2683 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
2686 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2687 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
2688 field of the sogo_user_profile table, where the user-customizable
2689 changes will be saved.
2690 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
2691 similar to the one above, using the "settings" field where the
2692 automatic settings will be saved.
2694 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
2695 module to bind the userdefaults to a property list contained in a
2696 specified field of the sogo_user_profile table.
2697 ([AgenorUserDefaults
2698 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
2699 added a "fieldName" parameter.
2701 * UI/Common/UIxFolderActions.m: new module implementing web
2702 actions common to all GCS-based folders.
2704 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2706 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
2707 put a carriage return after the day name.
2709 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2710 -readFreeBusyAction]): restored method.
2712 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2714 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2715 -defaultAction]): remade module to redirect automatically to the
2718 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
2720 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2722 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2723 -deleteAction]): new web method to delete personal addressbook
2726 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2727 -delete]): override method to refuse the deletion of the folder if
2728 its nameInContainer is "personal".
2730 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
2731 that forwards the deletion request to the folder manager.
2733 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2735 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
2736 -zoomList]): new method that returns the list of available zoom factors.
2738 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2739 -changeStatusAction]): rewrote method.
2741 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2742 -_handleAttendeesEdition]): make sure "attendeesNames" has a
2743 length > 0 before computing the attendees. Otherwise there will be
2744 an invalid empty entry.
2745 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
2746 organizer when there are attendees and remove it when the
2747 attendees are removed.
2749 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2751 * UI/Scheduler/UIxAttendeesEditor.m): new component.
2753 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
2754 the task and appointment editors. Now a container component
2755 handling the common elements of tasks and events.
2757 * UI/Scheduler/UIxTaskEditor.m: same as below.
2759 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
2760 a subclass of UIxComponentEditor but a subcomponent of it.
2762 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
2763 toolbar can have the special value "none" to indicate there is
2764 none attached to the window.
2766 * SoObjects/Appointments/SOGoCalendarComponent.m
2767 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
2769 ([SOGoCalendarComponent -isParticipant:email]): new method.
2770 ([SOGoCalendarComponent -calendar:create]): takes one parameter
2771 "create" which is a boolean indicating whether we want to create
2772 the calendar if it does not exist.
2774 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2776 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
2777 of a table, the same way the dayly and weekly views have been for
2780 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
2782 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
2785 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
2786 property to point at the user folder
2788 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2790 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2791 -userInContext:]): returns "SOGoUser".
2793 * SoObjects/Appointments/SOGoCalendarComponent.m
2794 ([SOGoCalendarComponent -contentAsString]): overriden method that
2795 takes the privacy into account and discard the relevant fields if
2796 needed by generating a new content string and caching it.
2797 ([SOGoCalendarComponent
2798 -saveContentString:contentStringbaseVersion:baseVersion]): if the
2799 new method above has cached a content string, release it and set
2800 it to nil so that it will have to be regenerated in the case it is
2802 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
2803 discard the fields that have to be hidden when the card is
2806 * SoObjects/Appointments/SOGoAppointmentFolder.m
2807 ([SOGoAppointmentFolder
2808 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
2809 sure the cards are now handled as instances of
2810 SOGoCalendarComponent instead of SOGoContentObject so that their
2811 content string is taking the privacy classifiction into account.
2812 ([SOGoAppointmentFolder -_privacySqlString]): new method that
2813 generates a query to determine what information can be given and
2814 if the card itself has to be shown.
2816 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
2817 -getICalPersonsFromValue:selectorValue]): removed useless
2818 "isAccessRestricted" method.
2820 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
2821 -setStyle:_style]): test whether the values of orgmail and
2822 partmails are null before manipulating them, otherwise SOGo sends
2823 a "rangeOfString:" message to an NSNull, which makes it crashes.
2825 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2826 -extractQuickFieldsFromEvent:_event]): we now use the new
2827 "symbolicAccessClass" method from iCalEntity to determine the
2828 value of the "classifiction" field.
2829 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
2832 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2834 * SoObjects/Appointments/SOGoAppointmentFolder.m
2835 ([SOGoAppointmentFolder
2836 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
2837 see below, the query is adapted consequently.
2839 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2840 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
2841 renamed to "classification" and can any integer as value.
2842 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
2845 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2847 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
2848 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
2849 don't prepend anything to the class and id named. Instead, we
2850 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
2853 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2855 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2856 -rolesOfUser:logininContext:context]): if object does not exists
2857 (for example when it's being created), the current user has the
2858 same rights on it than he/she has on its parent container.
2860 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2861 -nameExistsInFolder:objectName]): methods that tests if a c_name
2862 corresponding to the name passed as parameter is present in the db
2865 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2867 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2868 -rolesForObject:objectinContext:context]): test for
2869 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
2871 * SoObjects/Appointments/SOGoCalendarComponent.m
2872 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
2873 returns the roles of the user on the container object if the event
2876 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2878 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
2879 alternativeViewer a multipart/related message is being handled.
2881 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
2884 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
2885 text/html component before text/plain.
2887 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2888 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
2889 fetching of HTML parts.
2891 * SoObjects/Appointments/SOGoCalendarComponent.m
2892 ([SOGoCalendarComponent -componentTag]): new template method that
2893 returns the vcalendar tag of the current object.
2894 ([SOGoCalendarComponent -component]): new method that returns the
2895 first object matching [self componentTag] within the current
2896 calendar object. This method replaces 'firstEventInCalendar:' as
2897 well as "firstTaskInCalendar:".
2898 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
2899 moved method from SOGoAppointmentObject.m.
2901 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2903 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
2904 module which shows each selected user's calendar in a different
2905 column instead of mixing their events together.
2907 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
2908 replaced use of [NSString stringByTrimmingWhiteSpaces] with
2909 [NSString stringByTrimmingSpaces].
2911 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
2912 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
2915 * UI/Scheduler/UIxCalDayOverview.m,
2916 UI/Scheduler/UIxCalDayChartview.m,
2917 UI/Scheduler/UIxCalDayListview.m,
2918 UI/Scheduler/UIxCalWeekOverview.m,
2919 UI/Scheduler/UIxCalWeekChartview.m,
2920 UI/Scheduler/UIxCalWeekListview.m,
2921 UI/Scheduler/UIxCalInlineMonthOverview.m,
2922 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
2924 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2926 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2927 -appendPersonalSourcesInContext:context]): release connectoin
2928 channel when everything is done.
2930 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2931 -newAbAction]): new action method to crate a new contact folder
2934 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
2935 that requests the folder manager to create a folder table with the
2936 specified type at the specified path. The type is taken from [self
2939 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2940 -folderType]): implemented.
2942 * SoObjects/Appointments/SOGoAppointmentFolder.m
2943 ([SOGoAppointmentFolder -folderType]): implemented.
2945 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2946 -appendPersonalSourcesInContext:context]): we now fetch all
2947 folders with type "Contact" that belong to the current user.
2948 ([SOGoContactFolders -newFolderWithName:name]): new method to
2949 create a new contact folder.
2951 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
2952 resulting url with [NSString+Utilities hostlessURL] instead of
2953 using NSURL. This is because the url in question sometimes has a
2954 hostname and sometimes not. "hostlessURL" ensure the hostname is
2956 ([UIxComponent -applicationPath]): same as above.
2958 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
2960 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
2961 folders before doing the one on messages.
2963 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2965 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
2966 makeObjectsPerform:withObject:withObject: for GNUstep
2969 * OGoContentStore/GNUmakefile, Protocols/common.make,
2970 SoObjects/common.make, UI/common.make: install in
2971 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
2973 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
2975 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
2978 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2980 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
2981 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
2984 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2985 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
2986 password would be accepted anyway as long as its length was > 0.
2987 This can be the case ONLY when LDAP is disabled otherwise we have
2988 a serious security issue...
2990 * SoObjects/Appointments/SOGoAppointmentObject.m
2991 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
2992 user is not an organizer nor a participant, he is declared as
2993 "Owner" if he owns the calendar the entry where the entry is
2994 contained. Other cases should not be possible.
2996 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2998 * UI/Contacts/UIxContactEditor.m: display and handle the new
3001 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3002 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
3005 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3006 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
3009 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3011 * SoObjects/Appointments/SOGoCalendarComponent.m
3012 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
3013 returns the value of ud "SOGoAppointmentSendEMailNotifications"
3015 ([SOGoCalendarComponent
3016 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
3018 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3020 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3021 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
3022 so that the mailbox cache is refreshed everytime the user presses
3023 on "get mail". I doubt a mailbox cache really is useful in general
3026 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3028 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3029 -userInContext:]): if the lookup is on "freebusy.ifb" and the
3030 username is "anonymous" the user is automatically set to
3033 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3035 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3036 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
3037 user with password "freebusy".
3039 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
3040 -contentAsString]): the default timerange is now 14 days before
3041 currentday and 1 month after.
3043 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3045 * SoObjects/Appointments/SOGoAppointmentFolder.m
3046 ([SOGoAppointmentFolder
3047 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
3048 escape the record string in a way suitable with XML encoding.
3050 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3052 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
3053 calendar view would not be updated properly.
3055 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3057 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3058 -newStartDate]): fix the handling of the component start date
3059 depending on the "hm" and the "day" parameters.
3061 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3062 -roleOfUser:uidinContext:context]): set role of current user to
3063 "Assistant" if the object that is accessed is "freebusy.ifb".
3065 * SoObjects/Appointments/SOGoAppointmentFolder.m
3066 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
3067 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
3068 ([SOGoAppointmentFolder
3069 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
3070 lookupCalendarFolderForUID: method, which doesn't do security
3073 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3075 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
3076 accessor that returns the comma-separated list of users with role
3078 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
3079 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
3080 "checkedUsers". Instead, each user is either classified in the
3081 list of assistants or the list of delegates.
3083 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3085 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
3086 -composeAction]): method imported from removed container modules.
3087 ([UIxMailMainFrame -mailFolderName]): method imported from removed
3090 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
3091 for wrapping UIxMailView with the "popupview" action.
3093 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
3094 since its the component that displays the same splash screen than
3095 the one in Thunderbird/Icedove.
3097 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
3098 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
3099 UI/MailerUI/UIxMailListViewContainer.[hm],
3100 UI/MailerUI/UIxMailViewContainer.[hm]: removed
3102 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3104 * UI/WebServerResources/HTMLElement.js: replaced the functional
3105 selectNode() and deselectNode() functions with select() and
3106 deselect() methods of HTMLElement.
3108 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
3109 events are initialized from here now instead of in the HTML code.
3111 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3112 -checkRightsAction]): new method similar to the one with the same
3113 name in UIxCalMainView.m.
3115 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
3116 code to handle the publishing of freebusy information.
3118 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3120 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3121 -checkRightsAction]): new action method that returns a
3122 comma-separated list of boolean values matching the right of the
3123 current user to "view" (as a permission) each foreign calendar
3124 stored in his preferences.
3126 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
3127 new method that sets a customOwner, which can be returned with
3128 ownerInContext it set.
3130 * SoObjects/Appointments/SOGoAppointmentFolder.m
3131 ([SOGoAppointmentFolder
3132 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
3134 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3136 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
3137 below, but for the Contacts and Calendar collections.
3139 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
3140 new acl facilities method from sope-gdl/GCSFolder.m.
3142 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3143 -roleOfUser:uidinContext:context]): new method that returns
3144 SOGoRole_Assistant when the user is an assistant or a delegate on
3145 the "personal" ab object. This is so that setting roles on the
3146 SOGoContactFolders object is not required.
3148 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3150 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
3152 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
3153 to the handling of the user selection for the acls.
3155 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
3156 values from SoPermissions with ones specific to SOGo.
3158 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
3159 handles the storage for the acls.
3161 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
3162 class for SOGoAppointmentObject and SOGoTaskObject.
3164 * UI/Common/UIxAclEditor.[hm]: new component that provides a
3165 general editor for folder acls.
3167 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
3169 ([NSString -davMethodToObjC]): method that returns the method name
3170 for a DAV property implementation.
3172 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
3174 ([NSArray -stringsWithFormat:format]): new method that returns
3175 formatted occurences of the strings stored in the array.
3177 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
3178 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
3179 subclass module of SoWebDAVValue that supports collections of
3180 properties of the same type.
3182 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3184 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3185 -lookupFolder:ofClassNamed:inContext:]): added the ability to
3186 configure the name of the SOGoDraftFolders with the ud var
3187 "SOGoDraftsFolderName".
3189 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3191 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
3192 -userTimeZone:username]): new method that returns the timezone for
3193 the specified user depending on his preferences and the server
3196 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3197 -stringForData:partInfo:]): take the encoding into account and
3198 translate the text to "normal" before processing the charset data.
3200 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3202 * UI/WebServerResources/generic.js: the progress indicator is on
3203 when loading the page so we turn it off, and we turn it back on
3204 whenever we switch to another module...
3206 * UI/WebServerResources/SchedulerUI.js: make sure the day view
3207 synchronization mechanism works everywhere.
3209 * UI/WebServerResources/generic.js: the log window is not only
3210 visible when UIxDebugEnabled is set.
3212 * UI/WebServerResources/SchedulerUI.js: the month overview's day
3213 cells are now initialized with the DOM event interface methods
3214 instead of with html attributes.
3216 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
3217 headers (should be made configurable at some point)...
3219 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
3220 "not null" constraint on startdate, enddate, isopaque,
3221 participants and partmails.
3223 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3225 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3226 -hoursToDisplay]): prevent a crash by retaining the
3227 "hoursToDisplay" array after it's created.
3228 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
3229 clickable hours DIV.
3231 * UI/WebServerResources/SchedulerUI.js: made the event
3232 participation status modification asynchronous, which also fixes a
3233 bug where the window would sometimes close before the accept or
3234 decline action was completed. Also, adapted the event handling
3235 related to the days or weeks view with the new DIV-based layout.
3237 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
3239 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
3240 DIV-based presentation of the days and weeks.
3242 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
3244 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
3245 might return an exception so we have to handle it if we don't
3248 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3250 * UI/WebServerResources/SchedulerUI.js: updated the list
3251 initialization code to use the new event management scheme, adding
3252 what was missing to be able to delete events and tasks again.
3254 * UI/WebServerResources/MailerUI.js: added code to activate the
3255 "Get mails" button. Fixed a bug which prevented messages to be
3258 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
3259 navigation and focus handling of INPUTs.
3261 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3263 * UI/WebServerResources/MailerUI.js: added code to handle the
3264 possible drag and drop events to manager in the mail module.
3265 Moving messages, opening parent folders, ...
3267 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
3268 the drag and drop manager as well as the interface to HTMLElement
3269 to trigger drag and drop events.
3271 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
3272 action to move the current message to the mailbox named after the
3273 value of parameter "tofolder".
3275 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3276 -moveToFolderNamed:folderNameinContext:]): new method base on
3279 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3281 * UI/WebServerResources/generic.js: added and activated many
3282 "load" handlers to configure generic widgets used across the
3283 modules. More events are now handled in a DOM-fashion way instead
3284 of by setting the relative attributes in the templates.
3286 * UI/Templates/UIxSortableTableHeader.wox: all the events are
3287 declared from the javascript DOM onload handlers.
3289 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
3292 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
3293 declared from the javascript DOM onload handlers.
3295 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
3296 we want everything to be separated from each other, as much as
3299 * UI/WebServerResources/SOGoDragHandles.js: new module containing
3300 the "SOGoDragHandlesInterface", implementing methods that can be
3301 attributed to DIV so that they can be used as drag handles.
3303 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3304 -asQPSubjectString]): initialize the tmp strings with '0' to make
3305 sure they don't contain garbage.
3307 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3309 * UI/WebServerResources/MailerUI.js: register the messageList
3310 table as a dragging source and the leaf of the navigation tree as
3311 dnd destinations to the DNDManager.
3313 * UI/WebServerResources/generic.js: initialize tabs from the
3314 "unload" event listener that is added programmatically instead of
3315 from the template... Also, added the new DNDManager object.
3317 * UI/WebServerResources/HTMLTableElement.js: added code to
3318 simulate XUL drag n drop events. This code will possibly be moved
3319 to HTMLElement.js instead later...
3321 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3322 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
3325 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3326 -_qualifierForFilter:filter]): only search records which starts
3327 with the specified pattern.
3329 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3331 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3332 -asQPSubjectString]): new method that returns the special QP
3333 string with its qp declaration for email subjects.
3334 ([SOGoDraftObject -bodyPartForText])
3335 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
3336 double-encode data in UTF-8.
3338 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3339 -newStartDate]): new method to determine the start date depending
3340 on the URL parameters, the current day and the current time.
3341 ([UIxComponentEditor -toolbar]): new method to determine the
3342 filename of the toolbar that should be drawn depending on the
3343 ownership and the list of attendees of the task/event wrt to the
3346 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3347 -setDayStartHour:aStartHour]): adjust the minutes to the next
3348 quarter of hour, if not already set to a quarter.
3350 * UI/WebServerResources/UIxAppointmentEditor.js,
3351 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
3354 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3356 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3357 -loadValuesFromComponent:component]): handles access class
3358 (privacy) and status.
3360 * UI/Contacts/UIxContactsListViewContainer.m
3361 ([UIxContactsListViewContainer -additionalFolders]): return nil if
3362 [self additionalAddressBooks] returns an empty string.
3364 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3366 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
3367 rangesOf7Days]): enhanced and debugged algorithm to feed the array
3368 with slices where the first day is still in the requested month.
3370 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
3373 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
3374 of events in the day boxes of the calendar's monthly view.
3376 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
3377 -davContentType]): declare "text/calendar".
3379 * SoObjects/Appointments/SOGoAppointmentObject.m
3380 ([SOGoAppointmentObject -davContentType]): declare
3383 * SoObjects/Appointments/SOGoAppointmentFolder.m
3384 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
3385 HTTP methods are handled by SOPE and requires nil to be returned,
3386 this method now invokes the new
3387 "requestNamedIsHandledLater:inContext:" method to check that.
3388 ([SOGoAppointmentFolder
3389 -requestNamedIsHandledLater:nameinContext:context]): new methods
3390 that returns "YES" only for the "OPTIONS" http method (for now...).
3391 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
3392 overloaded method to append the "access-control" and
3393 "calendar-access" DAV abilities to the initial declaration.
3395 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
3396 imitate the look of Sunbird/Lightning's monthly view.
3398 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
3399 UIxCalMonthViewOld.[hm].
3401 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3403 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
3404 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
3406 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
3407 returns an image name based on the participation status of the
3410 * UI/WebServerResources/SchedulerUI.js: same strip down as for
3413 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
3414 ([UIxContactsListViewContainer -additionalFolders])
3415 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
3416 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
3417 methods to handle the external addressbooks a user has subscribed
3418 too, by retriving them from his preferences.
3420 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3421 -updateAdditionalAddressBooksAction]): new method that updates the
3422 user settings with the list of addressbook he has subscribed to.
3424 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
3425 module for the address book selector.
3427 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
3428 a toolbar with two buttons ("add" and "remove") to manage the
3429 additional addressbooks a user might subscribe to.
3431 * UI/WebServerResources/ContactsUI.js: added code to handle
3432 "external addressbooks" from the Javascript point-of-view, by
3433 extending existing methods and adding code for the "add ab" and
3434 "remove ab" buttons.
3436 * UI/WebServerResources/generic.js: moved extensions methods to
3437 DOM elements to separate files for better clarity.
3439 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
3440 new method that returns "pageContent" as class, but also "popup"
3441 for the DIV where the page content lies, so that we can manipulate
3442 the content of popup's with CSS identifiers.
3444 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3446 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3447 -displayStyle]): new method that returns a string containing the
3448 css style relative to the current appointment cell. This code is
3449 currently inactive but might be reused later.
3451 * UI/WebServerResources/SchedulerUI.js: added code to handle the
3452 display of the selected day (the day pointed by the mouse, or the
3453 current day when changing the view).
3455 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3456 -dayCellClasses]): new method that returns a string containing the
3457 css classes applicable to the current cell, depending on the
3458 position of the day in the week, the day of today and the
3461 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
3462 -currentContactAptBorder]): new method that returns the
3463 appropriate border color for the specified user.
3465 * SoObjects/Appointments/SOGoAppointmentObject.m
3466 ([SOGoAppointmentObject
3467 -saveContentString:contentStringbaseVersion:baseVersion]):
3468 overloaded method that parse new events and detects if they have
3469 an organizer or not. If they are new and have no organizer set
3470 (Sunbird/Lightning...), the owner of the event is set as
3473 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
3474 category that provides facility methods and interfaces to the
3477 * SoObjects/Contacts/product.plist: give full access to ANY
3478 authenticated user, not just the owner (to every objects...).
3480 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3482 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
3483 every replica widgets are declared as such to their master
3484 counterpart. Take the days into account when displaying the time
3485 range taken by the appointment.
3487 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3488 -getICalPersonsFromValue:selectorValue]): method taken from
3489 UIxFreeBusyUserSelector, that is shared both by
3490 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
3492 * SoObjects/Appointments/SOGoAppointmentFolder.m
3493 ([SOGoAppointmentFolder
3494 -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.
3496 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
3497 derived and taken as a subset of UIxFreeBusyUserSelector that
3498 implements the table part of the FreeBusy view. Most of the
3499 methods of UIxFreeBusyUserSelector relative to that table were
3500 moved into UIxFreeBusyUserSelectorTable, which can also be used as
3501 a standalone view for AJAX operations.
3503 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3505 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3506 -vCard]): change reverted.
3508 * UI/Contacts/UIxContactEditor.m: check whether the client contact
3509 folder has selector "globallyUniqueObjectId" before calling that
3512 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3513 -vCard]): the "setVClass" NGVCard method really is "setClass"
3516 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3517 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
3518 request the "streetAddress" instead of the "streetaddress".
3519 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
3520 mails that *contain*, and not just *start with* the search
3523 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3524 -vCard]): mark address returned from LDAP as the work address.
3526 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
3527 span covered with the anchor, not only the textual information
3530 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
3531 argument (event or task) to newEvent in the appointmentListMenu.
3532 Make the appointmentsListView display the appointmentsListMenu.
3534 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
3535 12 to 50 before displaying "...".
3536 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
3537 if its length > 0, whether location itself is nil or not...
3538 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
3539 of which the length > 0.
3541 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3543 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
3544 french and ISO dates.
3546 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
3547 from UIxContactSelector to handle contact lists (current and
3548 additional contacts).
3550 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3551 -_freeBusyAsText]): added handling of an "additional"-named query
3552 parameter that describe the number of additional days after
3553 enddate that should be returned.
3555 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3556 -_responseForResults:results]): give priority to results with
3557 "c_uid" fields. If none returned, use the first contact received.
3559 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3560 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
3561 2 and "CANCELLED" to 0.
3563 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3565 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
3566 of start and end dates to short string dates.
3568 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3569 -readFreeBusyAction]): new method that returns an array of numbers
3570 corresponding to the state in the freebusy of each "quarter of an
3571 hour" between the "sday" and "eday" date parameters passed in the
3572 url. This permits to handle the display of the freebusy with Ajax
3574 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
3575 since the free busy displays 2 days ahead.
3577 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3578 -contactSearchAction]): new action that returns the uid and the
3579 username + email of the user whose name contain the value of the
3580 "search" url parameter.
3582 * SoObjects/Appointments/SOGoAppointmentFolder.m
3583 ([SOGoAppointmentFolder
3584 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
3585 useful for the computing of the status of the freebusy.
3587 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
3588 -init]): new component that incarnates a user selector for events
3589 inspired by the new one found in Thunderbird Lightning.
3591 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3593 * UI/WebServerResources/generic.js: added code to enable or
3594 disable anchor visually (following our internal algorithm).
3596 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
3597 added new "url" ivar with its classic accessors.
3598 ([UIxComponentEditor -urlButtonClasses]): new method that returns
3599 the class strings for the url button on the appointment/task
3600 editor (depending on the validity of the url).
3602 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
3603 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
3604 the template to match the Lightning's new task/appointment editor.
3606 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
3608 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
3610 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3612 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3613 ([SOGoContactLDAPFolder
3614 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
3616 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
3617 iCalEntityObject instances instead of just iCalEvent's.
3619 * SoObjects/Appointments/SOGoAppointmentFolder.m
3620 ([SOGoAppointmentFolder
3621 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
3623 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
3624 bad way of handling ownership that way.
3626 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3627 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
3628 on "cn", just like Mozilla.
3630 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3632 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
3633 "to" should be retained, otherwise it will be autoreleased and a
3636 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3637 -writeAction]): updated method to fetch the card before initing
3640 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3641 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
3644 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3645 -iCalStringTemplate]): start and due date are now optional.
3647 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3648 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
3649 appropriate accessors to be settable through the templates.
3651 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
3652 new "isDisabled" ivar with appropriate accessors to be
3653 settable through the templates.
3655 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3656 -availableCalendars]): new method that list the calendars to which
3657 the user has subscribed.
3658 ([UIxComponentEditor -componentOwner]): returns the owner of the
3661 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3662 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
3663 quickentries to null whenever each or all of them are null, by
3664 providing an impossible timestamp from with NSNotFound as value.
3666 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3668 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
3669 that handles the creation of new fields with the new APIs and the
3670 new node structure on the page.
3672 * UI/Scheduler/UIxAppointmentEditor.m,
3673 UI/Scheduler/UIxTaskEditor.m:
3674 refactored to user UIxComponentEditor as parent class.
3676 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
3677 containing the methods common to the UIxTaskEditor and the
3678 UIxAppointmentEditor.
3680 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3682 * SoObjects/Appointments/SOGoAppointmentFolder.m
3683 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
3684 the handling of time-ranges.
3686 * UI/WebServerResources/ContactsUI.js: specify a notification type as
3687 parameters when onConfirmContactSelection in invoked.
3689 * UI/WebServerResources/generic.js: specify a notification type as
3690 parameters when onContactRemove in invoked.
3692 * UI/WebServerResources/SchedulerUI.js: when the user deselects
3693 all calendars, select his entry.
3695 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3697 * UI/WebServerResources/SchedulerUI.js: edit and delete events
3698 with their owner-relative urls. Generate a correct entry in the
3699 css color table when a user is added to the calendars list. Put
3700 the same color next to the user id.
3702 * UI/WebServerResources/generic.js: implemented some new helper
3705 * SoObjects/Appointments/SOGoAppointmentFolder.m
3706 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
3707 entries if their owner is not the current user.
3709 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3710 -displayClasses]): return the correct class for the current event
3711 representation depending on its owner.
3713 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
3714 and associate a color for each user login depending on its
3715 position in the list.
3717 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
3718 -currentRowCSSClass]): return the correct class for the current
3719 row depending on the owner of the event.
3721 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
3722 -setColors:colors]): new method to associate a color table with
3723 each user in the list.
3725 * SoObjects/Appointments/SOGoAppointmentFolder.m
3726 ([SOGoAppointmentFolder
3727 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
3729 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
3730 NSObject to associate an instance with a user.
3732 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3734 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
3737 * UI/WebServerResources/ContactsUI.js: added handling of
3738 notification of changes to contact selectors.
3740 * UI/WebServerResources/generic.js: added handling of notification
3741 of changes to contact selectors.
3743 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3744 -updateCalendarsAction]): proxy method to update the user
3745 preference table with the new selected calendar uids.
3747 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3748 -calendarsContactsAction]): new method.
3750 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
3751 ([UIxContactSelector -setHasCheckBoxes:aBool])
3752 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
3753 permit the drawing of checkboxes instead of card icons.
3755 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
3756 wrap a selector the the "Calendars" tab.
3758 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
3759 new user calendar selector.
3761 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3763 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
3764 may cover hour 0 to hour 23.
3766 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3767 -iCalStringFromQueryParameter:format:]): dates explicitly set to
3770 * UI/WebServerResources/SchedulerUI.js: manage both lists of
3771 objects wrt to the toolbar actions.
3773 * UI/WebServerResources/generic.js: added code to the "String"
3774 class to decode number-encoded char entities.
3776 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3777 -batchDeleteAction]): new method to delete selected entries in the
3780 * SoObjects/Appointments/SOGoAppointmentFolder.m
3781 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
3782 that delete identified entries in batch.
3784 * UI/SOGoUI/UIxComponent.m ([UIxComponent
3785 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
3787 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
3788 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3789 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
3790 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3792 return a UIxJSClose component if everything went fine.
3794 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
3797 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
3798 UIxAppointmentEditor.m.
3800 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
3801 a very light page with javascript code to close a window, by
3802 calling a method on the opener if specified. This component is
3803 designed to work as a response to form postings.
3805 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3807 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
3808 SOGoAppointmentObject adapted for the handling of tasks.
3810 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
3811 extracted from SOGoAppointmentObject.
3813 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3814 -saveUrl]): returns the url needed to POST the new form to.
3815 redirect the user to <aptid>/editAsAppointment instead of /edit,
3816 so that SOGoAppointmentFolder can return the correct object type.
3818 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
3819 -compareAptsAscending:_other]): accept empty start or end dates.
3821 * SoObjects/Appointments/SOGoAppointmentFolder.m
3822 ([SOGoAppointmentFolder
3823 -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.
3824 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
3825 components of type "vtodo" as well as "vevent".
3826 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
3827 url specified ends with AsTask or AsAppointment, returns the
3828 an object of the appropriate class, otherwise deduce it from its
3829 content if the HTTP method is "PUT", otherwise read its type from
3832 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3833 -extractQuickFieldsFromTodo:_task]): extract quick fields from
3836 * UI/Scheduler/UIxCalView.m ([UIxCalView
3837 -fetchCoreAppointmentsInfos]): replacement methods for
3838 fetchCoreInfos but by retrieving object with component "vevent".
3839 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
3842 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
3843 UIxCalAptListView adapted for the handling of tasks.
3845 * UI/Scheduler/UIxTaskProposal.[hm],
3846 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
3847 clones of the UIxAppointment* classes for the handling of tasks.
3849 * UI/WebServerResources/UIxTaskEditor.js: clone of
3850 UIxAppointmentEditor adapted for the handling of tasks.
3852 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
3853 Scroll the daily view to the appropriate hour when an appointment
3854 is selected in the appointments list.
3856 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3858 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3859 -setDayStartHour:aStartHour]): specifies the user timezone on the
3862 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
3865 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
3866 ([NSCalendarDate -driftedDate]): methods made useless by a better
3867 comprehension of the NSTimeZone API...
3869 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3871 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
3872 new methods from the NSCalendarDate methods.
3874 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
3875 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
3877 +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).
3878 ([NSCalendarDate -adjustedDate]): this method returns another
3879 instance set to the correct hour after the original date was set
3880 from a non-GMT timezone. This date can be used for storage.
3881 ([NSCalendarDate -driftedDate]): this method does exactly the
3882 opposite of -adjutedDate, that is, it enables the method
3883 hourOfDay, minuteOfHour etc... to return the values according to
3884 the original date's timezone. This date CANNOT be used for storage.
3886 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
3887 -shortDateString]): new method that will return a "short date
3888 string" (yyyymmdd) from a calendar date object.
3890 * UI/SOGoUI/UIxComponent.m ([UIxComponent
3891 -_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.
3893 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
3894 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
3896 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3898 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
3899 view of the day at the height of hour 8:00.
3901 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
3902 ([UIxCalView -dayEndHour]): returns 24.
3904 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
3905 ([UIxContactFoldersView -newAction]): invoke
3906 _selectActionForApplication: on self with the proper attribute too.
3908 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
3909 we now use the action mechanism in UIxContactsListView to keep the
3910 same view for the contact selectors and the regular contact view.
3912 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
3913 UIxContactsListViewContainerBase.[hm]
3915 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
3917 * UI/WebServerResources/generic.js: generalized emailstring
3918 handling functions. Generalized address book access functions.
3920 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
3921 -isPopup]): return YES if the "popup" query parameter is set.
3923 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3924 -defaultAction]): keep the url parameters when redirecting.
3925 ([UIxContactFoldersView -selectForSchedulerAction])
3926 ([UIxContactFoldersView -selectForMailerAction]): new action
3927 methods for the /scheduler-contacts and /mailer-contacts invocations.
3929 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
3930 newly available NSString+URL category.
3932 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
3933 -asURLParameters]): handle dictionary entries which could be
3934 instances of NSArray rather than NSString.
3936 * SoObjects/SOGo/NSString+URL.m ([NSString
3937 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
3938 ([NSString -urlWithoutParameters]): new method that returns the
3939 url without its parameters.
3941 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
3943 * SoObjects/SOGo/NSDictionary+URL.[hm],
3944 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
3946 * UI/WebServerResources/UIxMailEditor.js: add support for
3947 additions of different types (to, cc, bcc) of recipients from the
3950 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
3953 * UI/Contacts/UIxContactsMailerSelection.m,
3954 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
3955 UI/Contacts/UIxContactsSelectionView.m to provide a different set
3956 of widgets depending on the application invoking the contact list.
3958 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3960 * UI/WebServerResources/ContactsUI.js: hide the current contact
3961 whenever the user changes of contact folder.
3963 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
3964 now provided by the template when loading the page.
3966 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3967 -iCalPersonWithUid:uid]): new method taken from removed module
3970 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3972 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
3973 -categoriesAsString]): same as below.
3975 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
3976 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
3978 * SoObjects/Appointments/SOGoAppointmentObject.m
3979 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
3980 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
3983 * SoObjects/Appointments/SOGoAppointmentFolder.m
3984 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
3985 hackish test to detect whether the request concernes VEVENT's or
3986 anything else. Return events only in the former case.
3987 ([SOGoAppointmentFolder
3988 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
3989 c_name quickfield so that the calendar list can identify the
3990 appointments with their complete "filename".
3992 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
3993 groupsOfClass:fromSource: to parse the given vcalendar.
3995 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
3997 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
3999 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
4002 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
4004 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4006 * SoObjects/Appointments/SOGoAppointmentFolder.m
4007 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
4008 sensitive to the CalDAV method names.
4009 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
4010 "calendar-query" CalDAV method name.
4012 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
4013 code coming originally from MailerUI.js.
4015 * UI/WebServerResources/UIxContactEditor.js: imitate the
4016 Thunderbird address book by completing the display name with the
4017 content of the first and last name fields, until the display name
4018 is modified manually.
4020 * UI/WebServerResources/generic.js: added a "trim" method to the
4023 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4024 -displayName]): new method that returns the display name from "cn"
4025 or from the "displayName" key if found.
4027 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4028 -initSnapshot]): check if "[card n]" returns anything to avoid a
4031 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
4032 that returns an unparsed doctype definition for the pages.
4034 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4035 -vCard]): set the card's fn to attribute "displayName" if found
4038 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4040 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4041 -vCard]): handle the "streetAddress" and "l" fields.
4043 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
4044 header fields by converting the tables to DIVs and SPANs.
4046 * UI/WebServerResources/generic.css: attempted unification of font
4047 families and size across all the elements. changed the
4048 logConsole's "position" from "fixed" to "absolute" to avoid
4051 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4053 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
4054 empty the contact view when the current contact is being deleted.
4056 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
4057 parse the email field and provide the address full name if found
4058 as the "contactFN" parameter.
4060 * UI/WebServerResources/generic.js (openMailTo): do not give a
4061 name to the opened window so that serveral ones can be opened at
4064 * UI/MailPartViewers/UIxMailPartTextViewer.m
4065 ([UIxMailPartTextViewer -flatContentAsString]): override method by
4066 replacing carriage returns with "<br />" in the result string from
4067 super's implementation.
4069 * UI/Contacts/UIxContactView.m ([UIxContactView
4070 -_urlOfType:aType]): don't manage non-mailto urls through
4071 javascript, let the user decide what's best for him.
4073 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4074 -newAction]): transfer all the query parameters by using the
4075 "asURLParameters"'s result string from [self queryParameters].
4077 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4078 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
4079 query parameters and put their values (if any) into the snapshot.
4081 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
4082 carriage-returns to "<br />".
4083 ([UIxContactView -workCompany]): explicitly initialize company to
4084 nil if org is nil or empty.
4086 * UI/WebServerResources/UIxContactEditor.js: updated validation
4087 code after we added and renamed some fields.
4089 * UI/WebServerResources/ContactsUI.js: added code to cache contact
4090 cards and to handle card updates.
4092 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4094 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
4095 test the length of the returned string since they will never be
4098 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
4099 return self if the process went successful, returns an exception
4100 otherwise (and only otherwise...).
4102 * OGoContentStore/OCSContactFieldExtractor.m
4103 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
4104 adapted method to the new VCard api. Since the cards are stored in
4105 vcard format, we no longer deal with a dictionary but with a
4108 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4110 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
4111 return a string with a "mailto" url.
4112 ([UIxContactView -_urlOfType:aType]): generic method to return a
4113 url string with a html anchor pointing to it.
4115 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
4116 since subclass "UIxContactEditor" did nothing. Implemented code to
4117 display and modify the values parsed from the vcards, displayed in
4118 a way similar to the Thunderbird addressbook.
4120 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4121 -save]): new dummy method.
4123 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4124 -save]): made method void.
4126 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4128 * UI/Contacts/UIxContactView.m: added many wrapper methods to
4129 display blocks of data à la Thunderbird Addressbook. If data is
4130 available, those wrappers (around the NGVCard methods) will
4131 enclose the results in a proper HTML output with the correct label
4132 (if present), otherwise it will return an empty string.
4133 ([UIxContactView -vcardAction]): new action to return the contact
4134 as text/vcard (for exporting).
4136 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4137 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
4139 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4140 -vCard]): create a new NGVCard instance when no data is available
4142 ([SOGoContactGCSEntry -save]): save the vCard using the new
4143 "versitString" API method/message.
4145 * UI/Contacts/UIxContactView.h: separated interface from
4148 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
4149 views and display them beneath the list.
4151 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4153 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
4154 the timezone even when it's the server timezone.
4156 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4157 -privateContacts:inContext:]): no long configure the calendar
4158 object with the user's timezone since it's now accessible
4159 application-wide throught the SOGoObject methods.
4161 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
4162 method. Removed the "backendTimeZone" method.
4164 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
4165 instead of SoComponent.
4167 * SoObjects/Appointments/SOGoAppointmentObject.m:
4168 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
4169 [self serverTimeZone] instead of "EST" (which was removed).
4171 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
4172 "timeZone" ivar and its accessors.
4174 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
4175 centralized method returing the timezone configured in the
4176 userdefaults db or "Canada/Eastern" if missing.
4177 ([SOGoObject -userTimeZone]): new centralized method returing the
4178 timezone of the current user or the server timezone if missing
4179 from the user configuration table.
4181 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4183 * UI/WebServerResources/SchedulerUI.js: implemented caching of
4186 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
4187 return a path based on the object's context instead of the first
4188 level in SOGo's object hierarchy...
4190 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4192 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
4195 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
4196 timezone ([self viewTimeZone]) to the WEMonthOverview component to
4197 avoid a confusion with the days.
4199 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
4202 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
4203 imitate Sunbird's synchronization between the 3 visible views.
4205 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
4206 sure the numbers in dateString are formatted so as to take 4 chars
4207 for the year and 2 for the day and the month, otherwise
4208 NSCalendarDate will return a nil date.
4209 ([UIxComponent -applicationPath]): return a path based on the
4210 object's context instead of the second level in SOGo's object
4213 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4215 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
4216 user's timezone abbreviation to the date string passed as parameter to
4217 NSCalendarDate to generate an accurate date instance. Do the same
4218 when no date is specified and today is chosen.
4220 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
4221 form's time values to integers before comparing them.
4223 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
4224 ([UIxCalAptListView -currentEndTime]): initialize the resulting
4225 dates timezone with [self viewTimeZone].
4227 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
4228 "viewTimeZone" ivar destined to hold an instance of the user's
4230 ([UIxComponent -viewTimeZone]): take the timezone from the user's
4233 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4235 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
4236 rearranged the layout.
4238 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
4239 manage showing and hiding appointment details.
4241 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4242 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
4243 timezone by taking the current user's timezone setting.
4245 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
4247 * SoObjects/Appointments/SOGoAppointmentObject.m
4248 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
4249 set default timezone to EST, although this code should be
4250 rewritten to handle a system and a user default value.
4252 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4253 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
4254 take the values from the hour and minute INPUTs when data is
4255 POSTed since we no longer use the UIxTimeSelector component.
4256 ([UIxTimeDateControl -selectableHours])
4257 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
4258 template SELECTs to display reasonable and acceptable values
4259 instead of all the possibilities.
4261 * UI/WebServerResources/generic.js: adapted code for the new
4262 implementation of the UIxContactSelector component (added a
4263 "remove" button, removed the previous INPUT and replaced them with
4264 links of class "button").
4266 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
4267 UIxTimeDateControl.m.
4269 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
4270 ([UIxCalDayTable -currentAppointmentHour]): new methods that
4271 returns correctly formatted values used as attributes for JS code.
4273 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4274 -initialContactsAsString]): renamed implementation of
4275 initialParticipants.
4276 ([UIxContactSelector -currentContactId])
4277 ([UIxContactSelector -currentContactName]): new methods used when
4278 listing the initial contacts in the widget. Currently, both return
4279 the person's cn but the latter should ultimately return a user
4282 * UI/Contacts/UIxContactSelector.h: separated interface from
4283 UIxContactSelector.m.
4285 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
4286 all javascript code is now put in Scheduler.js/generic.js.
4288 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
4289 moved into NSCalendarDate+Scheduler instead.
4291 * SoObjects/Appointments/SOGoAppointmentFolder.m
4292 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
4293 configure the timezone from SOGoUserFolder when the instance is
4295 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
4296 the value of the new "timezone" ivar.
4298 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4300 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
4301 the date selector in the first page and the container of the
4302 future calendar selector in the second page.
4304 * UI/WebServerResources/generic.js: added code for handling tabbed
4307 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
4308 returns the bundle name associated to the current running product.
4310 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4312 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
4313 exception by invoking a timeout on the opener rather than invoking
4314 the list refresh method.
4316 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
4319 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
4320 ([UIxCalWeekView -prevWeekQueryParameters])
4321 ([UIxCalWeekView -nextWeekQueryParameters])
4322 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
4323 that return the dates relatively to the current day.
4324 ([UIxCalWeekView -lastWeekName])
4325 ([UIxCalWeekView -currentWeekName])
4326 ([UIxCalWeekView -nextWeekName])
4327 ([UIxCalWeekView -weekAfterNextWeekName])
4328 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
4329 methods that returns the label for the corresponding weeks.
4331 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
4332 used by UIxCalDayView and UIxCalWeekView to display the events
4333 occuring in one or more days.
4335 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4337 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
4338 entries in the new "monthMenu" and "yearMenu".
4340 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
4341 method to return the current day as a string formatted depending
4342 on the current locale.
4344 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4345 ([UIxCalAptListView -endDate]): "today" is now the default filter
4346 for displayed events.
4347 ([UIxCalAptListView -currentSerialDay]): new method returning the
4348 date of the current enumerated appointment in serial form
4351 * UI/WebServerResources/SchedulerUI.js: added code to select the
4352 relevant day when an appointment is selected. Added code to popup
4353 a month and a year menu whenever the header entries are clicked in
4354 the calendar widget.
4356 * UI/WebServerResources/generic.js: made addClassName and
4357 removeClassName methods of HTMLElement.
4359 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4361 * UI/WebServerResources/MailerUI.js: fixed the contact creation
4362 from email addresses.
4364 * UI/WebServerResources/generic.js: centralized the search-related
4365 functions here since the same code was used across the 3
4368 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4369 ([UIxCalAptListView -endDate]): return the required dates needed
4370 depending on the value given to the "filterpopup" url parameter.
4372 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
4373 code by invoking UIxComponent's labelForKey:.
4375 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
4376 [self pageResourceManager] instead of [self resourceManager].
4378 * UI/Contacts/UIxContactEditorBase.m: invokes
4379 globallyUniqueObjectId on the clientobject's class instead of the
4380 hardcoded "SOGoFolder".
4382 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4383 -newAction]): redirect the "new" action to the personal (default)
4386 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
4387 +objectWithName:inContainer:]): new constructor.
4389 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4390 -lookupContactWithId:recordId]): always create a contact object,
4391 even if it does not exist.
4393 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4395 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
4396 component that lays out the different components of SOGoCalendar.
4397 Only serves as an Objective-C counterpart to its xml template.
4399 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
4402 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
4403 display a widget to handle the information displayed in the
4404 appointments list. Not currently used, lacks implementation.
4406 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
4407 display a calendar as a dynamic widget from where one can select
4408 the current visible day.
4410 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
4411 extracted from UIxCalInlineMonthOverview.m.
4413 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
4414 calendarPageURL methods. The javascript code is handled by .js
4415 files as much as possible...
4417 * UI/WebServerResources/ContactsUI.js,
4418 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
4421 * UI/WebServerResources/SchedulerUI.js: implemented functions to
4422 handle the new widgets. XmlHTTPRequest code taken from
4425 * UI/WebServerResources/generic.js: put some functions related to
4426 element selections as methods to HTMLElement and HTMLTableElement.
4428 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
4429 display the list of appointments (embodies the code-size of
4430 UIxCalAptListView; answers to the "aptlist" method).
4432 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4434 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
4435 -correctURLAction]): new short action method replacing the method
4436 below by taking far less code.
4438 * SoObjects/Appointments/SOGoAppointmentFolder.m
4439 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
4440 with an action in the view-related code.
4442 * UI/Scheduler/UIxAppointmentEditor.m: invoke
4443 "stringByEscapingHTMLString" on the resulting value to avoid
4444 issues with accented characters.
4445 ([-jsCode]): removed method since the javascript code was merged
4446 into SchedulerUI.js.
4448 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4450 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
4451 new class method that returns an iCalPerson based on the UID given
4454 * UI/Contacts/UIxContactsListViewContainerBase.m:
4455 UIxContactsListViewContainer renamed to serve as a base class for
4456 the contact lists in both the contact editor and the contact
4459 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4460 ([SOGoContactLDAPFolder
4461 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
4462 setUserIdentifier:setRootDN:]): an LDAP field specifying the
4463 loginname of the users can now be specified.
4465 * UI/WebServerResources/generic.js: added code to manage contact
4466 lists through the new implementation of the UIxContactSelector.
4468 * UI/Templates: put the templates related to SchedulerUI in its
4471 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4472 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
4473 entry for "uid" with the field name representing the login name of
4474 the user in the corresponding LDAP branch.
4476 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4478 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4479 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
4480 request is a PUT, always create an entry, even if we're not sure
4483 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4485 * UI/WebServerResources/ContactsUI.js: implemented live-search.
4487 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
4488 -appendSystemSourcesInContext:context]): populated method with
4489 code that creates entries mapped to instances SOGoContactFolder,
4490 based on the configuration found in the NSUserDefaults under the
4491 key "SOGoLDAPAddressBooks".
4492 ([SOGoContactFolders
4493 -lookupName:nameinContext:contextacquire:acquire]):
4494 "contactsources" do not exist anymore, SOGoContactFolder was split
4495 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
4496 and one protocol: SOGOContactFolder, instead.
4497 ([SOGoContactFolders -contactFolders]): new accessor used by the
4498 views of SOGoContactXXXFolder to list the possible sources.
4500 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
4501 defines the methods that UIxContactsView, ..Editor and so on...
4504 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
4505 defines the methods that UIxContactsListViewBase expects as well
4506 as the data fields returned in the contact lists.
4508 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
4509 returns entries an LDAP server. Conforms to the new
4510 SOGOContactFolder protocol.
4512 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
4513 returns a vCard based on contact entries from an LDAP server.
4514 Conforms to the new SOGOContactObject protocol.
4516 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
4517 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
4518 entry for the textual representation of the vCard.
4520 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
4523 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
4524 "SOGoContactObject".
4526 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
4527 method that generates a textual representation of the vcard.
4529 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
4531 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
4532 "SOGoContactFolder".
4534 * SoObjects/Contacts/SOGoContactSource.h,
4535 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
4538 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4539 -singleAttributeWithName:key]): new method that returns the first
4540 object associated with an ldap key (where generally one value is
4543 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
4544 map the entry into an NSDictionary for processing by
4545 UIxContactsListViewBase.m with the least possible overhead.
4547 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
4550 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4552 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4553 -privateContacts:inContext:]): now returns an instance of
4556 * UI/Contacts/UIxContactsListViewContainer.m
4557 ([UIxContactsListViewContainer -contactFolderName]): new method to
4558 return the absolute path to the current contact folder, called
4559 from within the template.
4561 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
4562 JS code to initialize the 'currentContactFolder' generic var.
4564 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
4565 +contactFolderWithSource:inContainer:andName:]): new class
4566 method meant to return an instance connected to the specified
4567 source. Currently useless but won't be anymore in the next few
4570 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
4571 the "lookupFreeBusyObject" method since it does not exist.
4573 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
4574 as a "view" for the SOGoContactFolders object. Does nothing but
4575 redirect the browser to the URL of the personal address book of
4576 the user. It does not even have a template.
4578 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
4579 implementing the SOGoContactSource protocol. Does nothing
4580 currently but will be used to implement access to the personal
4581 address book of the user stored in the SOGo database.
4583 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
4584 protocol defining an API common to all possible types of contact
4587 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
4588 serving as the root of the contact folders available to the
4589 current user. Correctly lists the contact sources in webdav.
4591 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4593 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
4594 -composeAction]): new action method that permits external object
4595 to write a message from the default (primary) account.
4597 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4598 -initSnapshot]): new method with code taken from "defaultAction"
4599 but needed for others.
4600 ([UIxContactEditorBase -writeAction]): new action designed to
4601 compose the correct URL needed to obtain the MailerUI's email
4602 editor with the correct "mailto" parameter.
4604 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
4605 Common so that other modules can use it.
4607 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
4608 easier to manage both ajax and non-ajax requests.
4610 * UI/Contacts/UIxContactsFilterPanel.m: clone of
4611 UIxMailFilterPanel, but applicable to contact lists.
4613 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
4614 -vcardContentFromSOGoContactRecord]): use the new standard methods
4615 created for each type of entry. If a line is determined to not
4616 contain information, it will be skipped.
4618 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4619 +initialize]): init defaultMailDomain with the user default
4620 "SOGoDefaultMailDomain".
4622 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4624 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4625 -saveAction]): reorganized methods to only have ONE return point.
4626 Invoke saveRecord: directly on the clientObject instead of
4627 saveContentString, which does the same thing anyway.
4629 * SoObjects/Contacts/NSDictionary+Contact.m
4630 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
4631 method to convert the dictionary returned with the user submission
4632 to a record in VCARD format to be stored in the database.
4634 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4636 * UI/WebServerResources/MailerUI.js: when opening the context menu
4637 of the message list, select the message below the mouse cursor and
4638 deselect the other selected messages temporarily. This mimics the
4639 behaviour of Thunderbird for that matter and was already
4640 implemented for the entries of the folder tree.
4642 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
4643 -iconForMenuItem]): new method that returns the fully qualified
4644 relative URL to the icon representing the mailbox, or the default
4645 mailbox icon if needed.
4647 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4648 -urlForResourceFilename:filename]): automatically return an empty
4649 string whenever the filename passed as argument is nil.
4651 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
4652 "desc" parameter set to 1 so that they are sorted in descending
4653 order by default. Also, added "onHeaderClick()", triggered by
4654 clicking on the message list header elements.
4656 * UI/MailerUI/UIxMailSortableTableHeader.m
4657 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
4659 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
4660 -isSortedDescending]): defaults to "YES" when the sort order is
4663 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4665 * UI/WebServerResources/MailerUI.js:
4666 - message cache: set the max num of cached messages to 20. Limit
4667 the cached message size to 30000 bytes.
4668 - ajax: when a message request is called while one is already
4669 being performed, the latter will be cancelled. Idem when
4670 retrieving the content of a mailbox.
4671 - folder tree: when a mailbox is selected because of the URL
4672 requested (initMailboxSelection), the dtree is expanded throughout
4673 the mailbox entry's parent hierarchy to ensure it is made visible
4674 when the page is being displayed. (new function: expandUpperTree).
4675 - mailbox loading: when loading a mailbox where a message was
4676 previously selected, we invoke its url with the "pageforuid"
4677 parameter correctly specified. During callback processing, we scan
4678 the table for the related row and reselect it.
4679 Also, the message area is set blank before loading any mailbox.
4681 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
4682 -defaultAction]): if the "pageforuid" parameter is passed in the
4683 url, take its value and invoke [self firstMessageOfPageFor:]
4684 consequently to deduce the first message to display. Otherwise,
4685 set it to "idx", otherwise set it to 0.
4686 ([UIxMailListView -firstMessageOfPageFor:]): new method
4687 that determines the first message of the page where the message
4688 passed as parameter is contained.
4690 * UI/WebServerResources/UIxMailListView.js: removed this module,
4691 its code was put in MailerUI.js instead.
4693 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4695 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
4696 which returns the nodes for the parent specified in "parentMenu".
4697 Used to generate the javascript code for the folder dtree.
4699 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
4700 using that container-template are now using UIxMailMainFrame
4701 since UIxMailPanelFrame had no real interest. File removed.
4703 * UI/WebServerResources/dtree.{css,js}: new files to handle
4704 javascript-generated mailbox tree. Modified from original version
4705 by integrating the previous code with the one we are using for
4706 selections and mailbox handling. Minor visual enhancements too...
4708 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4710 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
4711 returned, put it in an NSArray before returning it (fixes
4714 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4716 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
4717 that returns a url string stripped from its "http://hostname"
4720 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
4722 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
4724 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4726 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
4727 -mailDateFormatter]): retrieve the timezone from the user settings
4728 and pass it to the returned dateFormatter. Also, the dateFormatter
4729 is kept in a static variable to avoid useless
4730 creations/destructions.
4732 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
4733 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
4735 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
4736 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
4737 s/Criteria/Text/ to handle the "criteria" form parameter.
4739 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4741 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
4742 to integrate better with the firefox look&feel. Added entries for
4743 the new "menu" DIV class (popup menus).
4745 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
4746 takes any chunk of text as param, detects the user email and the
4747 optional first and last names and return them in a well-formatted
4748 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
4749 namespace conflict. Added "onMenuClick(node, event, menuId)" to
4750 handle popup menus through "onclick" element attributes (node =
4751 this, event = event and menuId = name of the menu DIV id to
4754 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4755 -snapshot]): add an entry for "email" into the snapshot
4756 dictionary if a "contactEmail" URL parameter was detected and if
4757 the entry for "email" is empty.
4759 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
4760 button now invokes the newContact() js function in ContactsUI.js
4761 instead of opening "new" directly. newContact() pops up a window
4762 stripped from its navigation bar.
4764 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
4765 bundle (AddressBook).
4767 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
4768 "menu" and id "addressMenu" have the header email addresses
4769 display it with the new menu code in generic.js.
4771 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
4772 replaced the body tables with a div of class "pageContent"
4773 (standardization across the page templates).
4775 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
4776 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
4777 those are now inherited from UIxPageFrame.
4779 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
4781 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
4782 a "mailto" URL parameter is detected and the "to" array is empty,
4783 initialize "to" with the value of "mailto" before returning it.
4785 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
4786 -composeAction]): rewrote method in a cleaner way and with usage
4787 of the URL extensions to NSString and NSDictionary (see below).
4788 Also, if a "mailto" url parameter is detected, pass it to the
4791 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
4794 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
4795 returns a parameter string to add to a base URL.
4797 * UI/Common/NSString+URL.m ([NSString
4798 -composeURLWithAction:parameters:andHash:useHash]): new method to
4799 compose a complete URL from an object URL with parameters and an
4800 optional '#' character.
4802 * UI/Common/UIxPageFrame.h: separated interface from
4805 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
4807 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
4809 * UI/WebServerResources/generic.js: added code to manage
4810 selections within HTML containers.
4812 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
4813 added method to determine the possible URL for a product-specific
4814 javascript filename of the forme <productname>.js.
4815 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
4816 ([UIxPageFrame -isPopup]): new method to determine whether the
4817 application navigator bar should be displayed (main page) or not
4820 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
4821 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
4822 the user through LDAP.
4824 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4826 * The toolbar code from the MailerUI product was taken, renamed as
4827 "UIxToolBar" and put into UI/Common. Toolbar plists were created
4828 for the Contacts and Scheduler products and put in their respectir
4829 Toolbars/ subdirectories. Finally,
4830 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
4831 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
4832 and an invocation to the UIxToolbar component was put at the top
4833 of UI/Templaces/UIxPageFrame.wox.
4835 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
4836 within the templates whether a separator should be displayed.
4838 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
4839 that returns NO if the toolbar is empty.
4841 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4843 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
4845 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
4846 new toolbar objects.
4848 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
4850 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
4851 linkbanner as a DIV instead of a TABLE.
4853 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
4855 returns 'YES' to request the display of the navigation bar between
4858 2006-06-15 ludovic@inverse.ca
4860 * It's now possible to set the default
4861 domain using for email using the
4862 SOGoDefaultMailDomain preference key.
4864 2006-06-15 ludovic@inverse.ca
4866 * Initial import of SOGo from trunk.