1 2007-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3 * SoObjects/SOGo/SOGoParentFolder.m: no longer a subclass of
4 SOGoObject, but of SOGoFolder instead.
6 * SoObjects/SOGo/SOGoUserFolder.m: no longer a subclass of
7 SOGoGCSFolder, but of SOGoFolder instead.
9 * SoObjects/Appointments/SOGoAppointmentFolder.m
10 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): fixed
11 to take the new SOGoParentFolder class into account. Also, create
12 the personal folder if it doesn't exist.
14 * SoObjects/SOGo/SOGoFolder.[hm]: new class module implementing
15 the parent of all SOGo containers.
17 * SoObjects/SOGo/SOGoGCSFolder.[hm]: SOGoFolder class renamed to
20 2007-11-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
22 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection
23 -getAddressesFromFormValues:_dict]): take NSString and NSArray
24 values. Ignore addresses with a length of 0.
26 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -mailAccounts]): we now
27 fetch the accounts from the user defaults and create default
30 2007-11-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
32 * UI/MailPartViewers/UIxMailPartTextViewer.m
33 ([UIxMailPartTextViewer -flatContentAsString]): re-added
34 conversion of line-break to sequences of HTML "BR", with a fast
37 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
38 -flatContentAsString]): simplified method now that we know
39 -[NSString stringWithData:usingEncodingNamed:] has a more robust
42 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
43 -showToAddress]): the answer is cached.
45 * UI/Common/UIxObjectActions.m ([UIxObjectActions +initialize]):
46 read "SOGoACLsSendEMailNotifications" from the user defaults to
47 determiner whether to send an email when a user is added or
48 removed from an object's acl.
50 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
51 -contentForEditing]): make sure the htmlContent flag is set to NO
52 when we select the textual part. Also we select only the relevant
55 * UI/MailerUI/WOContext+UIxMailer.m ([-mailSubjectFormatter]):
58 * UI/MailerUI/UIxMailView.m ([UIxMailView -messageSubject]): new
59 method replacing -objectTitle, written like the ones below.
61 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
62 -messageSubject]): rewrote method to act the one below.
64 * UI/MailPartViewers/UIxMailPartMessageViewer.m
65 ([UIxMailPartMessageViewer -messageSubject]): new method that
66 returns the decoded mail subject or "Untitled" if the subject is
69 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
70 -decodedSubject]): new method that invoke -decodedSubject from the
71 NSString and NSData class, depending on the identity of the
72 subject obtained from the envelope.
74 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
75 -subjectForReply]): take the value of -[SOGoMail decodedSubject]
76 instead of the subject of the envelope.
77 ([SOGoMailObject -filenameForForward]): same as above.
78 ([SOGoMailObject -subjectForForward]): same as above.
80 * SoObjects/Mailer/NSString+Mail.m ([NSString -decodedSubject]):
81 same as below for NSString.
83 * SoObjects/Mailer/NSData+Mail.m ([NSData -decodedSubject]): new
84 method that decodes the subject of a mail taken as an NSData
85 instance. Handling the exceptions and the badly formatted headers.
87 * UI/MailerUI/UIxSubjectFormatter.[hm]: dropped class module.
89 2007-11-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
91 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
92 -deleteEntriesWithIds:ids]): make sure the objects returned by
93 lookupName:... are not instances of NSException.
95 2007-11-03 Ludovic Marcotte <ludovic@inverse.ca>
97 * UI/Scheduler/UIxAppointmentEditor.m
98 Fixed monthly recurrences support.
100 2007-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
102 * SoObjects/Appointments/SOGoAppointmentObject.m
103 ([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
104 sent when modifying an event, when the event was considered
105 relevant. The same thing is now implemented for event deletion.
107 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
108 -primaryFetchProfile]): make sure that the deserialized "values"
109 is an instance of NSMutableDictionary, otherwise we override it
112 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
113 -contentForReply]): make use of the SOGoMailReply WO page.
115 * SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
116 from SOGoMailForward to handle mail replies instead. Only three
117 methods remaining: date, from and messageBody. The latter is
120 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
121 -fetchMailForForwarding:sourceMail]): fetch attachments for
124 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
125 -hasMessageAttachment]): initialize hasAttachment with "NO" to
126 avoid false positives.
128 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
129 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
130 set title to an empty string where the event/task summary is null.
132 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
133 -setHeaders:newHeaders]): make sure there is a message id in the
134 headers dictionary, if not, generate one.
135 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
136 message id from the existing draft.
137 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
138 message id in the header map.
140 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
141 -deleteFolderAction]): no longer prefix the target folder with
144 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
145 -listMailboxesAction]): base the folder type on the folder
148 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
149 -lookupName:_keyinContext:acquire:_acquire]): compare the full
150 traversal to the potential looked up folder with the special
151 folder names and return an object with the appropriate
152 SOGoMailFolder subclass.
154 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
155 -traversalFromMailAccount]): don't prepend the whole string with
158 * SoObjects/Mailer/SOGoMailAccount.m
159 ([-lookupSentFolder:_keyinContext:_ctx])
160 ([-lookupDraftsFolder:_keyinContext:_ctx])
161 ([-lookupTrashFolder:_keyinContext:_ctx])
162 ([-lookupFiltersFolder:_key:_ctx]): removed methods.
163 ([SOGoMailAccount -inboxFolderNameInContext:])
164 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
165 ([SOGoMailAccount -sentFolderNameInContext:])
166 ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
167 the resulting name with "prefix" since we might return a nested
169 ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
170 names with "/". Sorts the resulting folder list with
171 localizedCaseInsensitiveCompare: instead of
172 caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
173 that were removed, instead, we choose the appropriate class
174 depending on the folder name. And since we are in SOGoMailAccount,
175 we don't have to compute a traversal path to match the key with
178 -folderWithTraversal:traversalandClassName:className]): new method
179 that returns an instance of the specified SOGoMailFolder subclass,
180 based on the traversal path passed as parameter.
181 ([SOGoMailAccount -inboxFolderInContext:_ctx])
182 ([SOGoMailAccount -draftsFolderInContext:_ctx])
183 ([-sentFolderInContext:_ctx])
184 ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
185 -folderWithTraversal:andClassName: method described above.
187 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
188 -primaryFetchProfile]): make use of -[NSPropertyListSerialization
189 propertyListFromData:mutabilityOption:format:errorDescription:] to
190 deserialize the plist. Removed variant for libFoundation since it
191 should support the above.
192 ([AgenorUserDefaults -generateSQLForInsert])
193 ([AgenorUserDefaults -generateSQLForUpdate]): make use of
194 -[NSPropertyListSerialization
195 dataFromPropertyList:format:errorDescription:] to serialize the
196 plist. Removed variant for libFoundation since it should support
197 the above. Escape the backslashes from the resulting string.
199 2007-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
201 * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
202 SOGoMailFolder: SOGoMailSpecialFolder.
204 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
205 -traversalFromMailAccount]): overridden method that returns the
206 initialized mutable string.
207 ([SOGoMailAccount -allFolderPaths]): take the special folder paths
208 with -traversalFromMailAccount and reposition them at the
209 beginning of the list. By creating the special folders during that
210 request, we also make sure that the folder exists thanks to the
211 new initialisation method of the new "SOGoSpecialMailFolder"
213 ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
215 ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
217 ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
218 longer use lookupImap4Folder.
219 ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
222 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
223 -traversalFromMailAccount]): new method that returns the full
224 IMAP4 path to the object.
226 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
227 "superUsernames" after fetching it from the ud.
229 2007-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
231 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
232 -eventsListAction]): substitude the start and end date with their
233 UTC counterpart, taking into account the offset from UTC related
234 to those dates instead of the current one. This renders
235 -[UIxCalMainView -userUTCOffset] obsolete because the computings
236 that occured in javascript are now done server-side.
238 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
239 removed obsolete method.
241 * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
242 method converting html content to plain text.
244 * SoObjects/Mailer/NSString+Mail.[hm]: new category module
245 enhancing NSString with utility methods pertaining to mail handling.
247 * SoObjects/Mailer/SOGoMailObject.m
248 ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
250 -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
251 modified method to be always recursive and to take an array of the
252 accepted mime-types as parameter. The returned array now contains
253 the mime-type as well as the part keys.
255 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
256 -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
257 ([SOGoMailObject -contentForEditing]): rewrote method to take into
258 account the first text/plain part or the first text/html part
259 converted to text/plain with our new -[NSString htmlToText]
262 * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
263 "replyToAll:" with YES as parameter instead of NO.
265 2007-10-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
267 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
268 -davContentType]): ignore any possible parameter taken from the
269 mime-info of the body part.
271 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
272 -lastFirstMessageNumber]): new accessor that returns the first
273 message number of the last series of messages.
274 ([UIxMailListView -fetchKeys]): request the bodystructure for each
276 ([UIxMailListView -hasMessageAttachment]): extract the attachment
277 information from the message bodystructure.
279 2007-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
281 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
282 -GETAction:]): use the "application/octet-stream" mime type for
283 elements of type "application/x-xpinstall" to avoid confusing
286 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
287 ([UIxPreferences -itemMessageCheckText])
288 ([UIxPreferences -userMessageCheck])
289 ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
290 methods for handling the retrieval of new messages automatically.
292 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
293 that returns the interval of time between automatic message
296 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
297 -defaultAction]): now expunges the last folder marked for expunge.
299 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
300 -trashInContext:_ctx]): now marks the container folder for
303 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
304 -markForExpunge]): new method that marks the folder for the next
305 automatic expunge operation in the user settings.
306 ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
307 takes the last folder marked for expunge, expunges it and removes
308 it from the user settings, if it exists.
310 2007-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
312 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
313 -messageSubjectCellStyleClass]): added support for replied,
314 forwarded, forwarded and replied mails.
316 * SoObjects/Mailer/NSData+Mail.m ([NSData
317 -bodyDataFromEncoding:encoding]): new utility method that decodes
318 the NSData instance properly depending on the encoding string
321 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
322 -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
324 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
325 -stringForData:_datapartInfo:_info]): simplified by invoking
326 -bodyDataFromEncoding: from our new NSData category methods.
328 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
329 -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
330 where only the body part of the first of the keys fetched was
331 returned. Also decodes the body parts properly following their
334 * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
335 extends the NSData class with utility methods useful for handling
338 2007-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
340 * SoObjects/SOGo/NSArray+Utilities.m
341 ([NSArray -stringsWithFormat:format]): replace instances of NSNull
344 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
345 -keysWithFormat:keyFormat]): replace instances of NSNull with
348 * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
349 empty, use "c_cn" instead.
351 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
352 ([SOGoMailAccount -draftsFolderInContext:_ctx])
353 ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
354 of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
355 no always be specified from the root instead of sometimes from the
358 2007-10-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
360 * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
361 ([UIxPageFrame -productLocalizableStrings]): invoke the new
362 +[SOGoUser language] method if the user is nil.
364 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
365 that returns any generically-found language.
366 ([SoUser -language]): modified to call the above.
367 ([SOGoUser -language]): modified to call the above if the user
368 language has a null length.
370 * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
371 -davEntityTag]): modified to return the "hash" of the vCard string.
373 * UI/MailerUI/UIxMailActions.m ([UIxMailActions
374 -removeAllLabelsAction]): new method that removes all label flags
375 from the associated message.
376 ([UIxMailActions -addLabel1Action]
377 [UIxMailActions -addLabel2Action]
378 [UIxMailActions -addLabel3Action
379 [UIxMailActions -addLabel4Action]
380 [UIxMailActions -addLabel5Action]): new methods that adds label
381 flags to the associated message.
382 ([UIxMailActions -removeLabel1Action]
383 [UIxMailActions -removeLabel2Action]
384 [UIxMailActions -removeLabel3Action
385 [UIxMailActions -removeLabel4Action]
386 [UIxMailActions -removeLabel5Action]): new methods that removes
387 label flags from the associated message.
389 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
390 new accessor that returns the labels associated with the message.
392 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
393 -allFolderPaths]): new method that returns all the paths of all
394 the subfolders of the folder object.
395 ([SOGoMailFolder -allFolderURLs]): new method replacing
398 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
399 -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
400 role from its parent folder.
402 2007-10-19 Francis Lachapelle <flachapelle@inverse.ca>
404 * SoObjects/SOGo/SOGoUser.m
405 ([SOGoUser -rolesForObject:objectinContext:context]): allow
406 multiple super usernames to be defined. The user default
407 SOGoSuperUsername is renamed SOGoSuperUsernames and must be
410 2007-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
412 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
413 -userInContext:]): override the super method by returning
414 anonymous if the super returns nil.
416 * UI/Common/UIxPageFrame.m ([UIxPageFrame
417 -productLocalizableStrings]): new method that returns the
418 product-specific translation dictionary as a JSON hash.
419 ([UIxPageFrame -commonLocalizableStrings]): same as above but for
420 the "Common" framework.
421 ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
422 the requestor components to require additional Javascript files.
423 This is useful now that all the scripts are loaded at the end of
425 ([UIxPageFrame -additionalJSFiles]): new getter related to the
428 2007-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
430 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
431 implemented new web method.
433 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
434 -copyToFolderNamed:folderNameinContext:]): new method with the
435 code cut/pasted from -moveToFolderNamed:inContext:.
436 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
437 modified to use the code from -copyToFolderNamed:inContext:, which
438 is common between the two actions.
440 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
441 ([SOGoMailAccount -sentFolderNameInContext:])
442 ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
443 the user settings into account.
445 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
446 ([UIxMailFolderActions -setAsSentFolderAction])
447 ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
448 that change the purpose of the active folder to "Sent", "Drafts"
451 * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
452 returns the subject as quoted-printable.
454 * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
455 SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
456 the "aclMethod" method for the subsequent language-dependent
459 * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
460 returns the subject as quoted-printable.
462 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
463 -dealloc]): release item, aptStartDate and aptEndDate.
465 2007-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
467 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
468 -initWithName:newNameinContainer:newContainer]): the owner of a
469 shared folder is set to "nobody" by default.
471 * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
472 that returns whether the object has an owner or not.
474 2007-10-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
476 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
477 the folder even if the current user is not its owner.
479 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
481 * We now send advisory emails when folders
482 are created / deleted.
484 * Fixed the sending of advisory emails upon
485 ACL changes on folders.
487 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
489 * UI/Scheduler/UIxComponentEditor.m
490 Implemented event/task priority support.
492 * SoObjects/Contacts/SOGoContactGCSFolder.m
493 Added CardDAV support.
495 * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
496 Implemented From: based on LDAP results based on
497 the MailFieldNames attribute (an array) specified
498 in every LDAP-based authentication sources.
500 * UI/MailPartViewers/UIxMailPartTextViewer.m and
501 UI/WebServerResources/MailerUI.css
502 We avoid replacing "\r\n" and "\n" with <br /> and
503 rather use CSS capabilities for proper formatting.
504 This is _WAY_ faster on very large mails.
506 2007-10-10 Francis Lachapelle <flachapelle@inverse.ca>
508 * UI/Scheduler/UIxComponentEditor.m
509 ([UIxComponentEditor -componentCalendar]): returns the calendar
510 object of the current event.
512 2007-10-05 Ludovic Marcotte <ludovic@inverse.ca>
514 * UI/WebServerResources/MailerUI.js
515 We check if at least one message is selected
516 before performing a Reply/Reply All/Forward
518 * SoObjects/Appointments/SOGoAppointmentFolder.m
519 and others - implemented support for recurring
520 events (with some known limitations right now,
521 all soon to be fixed).
523 2007-10-04 Francis Lachapelle <flachapelle@inverse.ca>
525 * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
526 the constraint that a username can't start with a digit.
528 2007-10-02 Francis Lachapelle <flachapelle@inverse.ca>
530 * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
531 repository to Inverse's branch.
533 2007-09-28 Francis Lachapelle <flachapelle@inverse.ca>
535 * SoObjects/Mailer/SOGoDraftObject.m
536 ([SOGoDraftObject -isValidAttachmentName:_name]): removed
537 constraint on space in file name.
538 ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
539 now removes from file name all characters preceding a backslash.
540 This happens with IE7 because the complete attachment file path
543 2007-09-25 Francis Lachapelle <flachapelle@inverse.ca>
545 * SoObjects/Appointments/SOGoAptMailNotification.m
546 ([SOGoAptMailNotification -appointmentURL]): set personal as the
547 default calendar where to add the event.
549 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
550 activate the SOGoUIxDefaultModule user defaults.
552 2007-09-21 Francis Lachapelle <flachapelle@inverse.ca>
554 * UI/SOGoUI/UIxComponent.m
555 ([UIxComponent -shortUserNameForDisplay]): returns the string
556 "wrongusernamepassword" when authentication failed.
558 2007-09-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
560 * UI/MailPartViewers/UIxMailPartICalViewer.m
561 ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
562 entry of the Calendars parent folder.
564 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
565 -messageSubject]): new accessor method to work-around a problem
566 within SOPE where a subject could be returned as an NSData.
568 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
569 -appendPersonalSources]): make sure the value of the "c_path4" of
570 the returned rows are not NSNull, otherwise, discard them.
572 2007-09-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
574 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
575 -compare:otherFolder]): new overriden method that compares two
576 contact foldes based on their class and then transfer the control
577 to the super method in SOGoFolder.
579 * SoObjects/Contacts/SOGoContactLDAPFolder.m
580 ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
581 compare two contact folders based on their class and then their
584 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
585 new method for sorting folders. The folders are compared based on
586 their ownership, whether they are a main folder and finally
587 depending on their display name.
589 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
590 -pathArrayToSOGoObject]): do not reorder the paths if the third
591 element is an instance of NSNull.
593 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
594 -subFolders]): returns a sorted array using the "compare:"
597 2007-09-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
599 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
600 -calendars]): also returns the owner of the listed folders.
602 * SoObjects/Appointments/SOGoAppointmentFolder.m
603 ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
605 * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
606 method into UIxFolderActions.
608 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
609 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
610 freebusy info from the "personal" calendar.
612 * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
613 -createFolderAction]): new standardized method for requesting
614 folder creations among gcs-based modules.
616 * UI/Common/UIxParentFolderActions.[hm]: new action class module.
618 * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
619 module, equivalent to the SOGoParentFolder's child
620 SOGoContactFolders, but for calendars.
622 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
623 method that returns translated strings for controller bundles
624 (same as what UIxComponent does for view bundles).
625 ([SOGoObject -pathArrayToSOGoObject]): new method that returns
626 the real path to a subscribed folder (if subscribed).
627 ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
628 ([SOGoObject -globallyUniqueObjectId]): new instance method
629 calling its class equivalent.
631 2007-09-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
633 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
634 whether the user is logged in and if so, redirect to his/her
636 ([SOGoRootPage -appendToResponse:inContext:]): removed useless
639 2007-09-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
641 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
642 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
644 ([SOGoFolder -displayName]): new method.
645 ([SOGoFolder -delete]): accept to proceed only if nameInContainer
648 * SoObjects/Contacts/SOGoContactLDAPFolder.m
649 ([SOGoContactLDAPFolder
650 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
651 renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
653 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
654 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
655 removed method, reimplemented in SOGoFolder.
656 ([SOGoContactGCSFolder -displayName]): removed method,
657 reimplemented in SOGoFolder.
658 ([-delete]): removed method, modified in SOGoFolder.
660 * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
661 a subclass of SOGoParentFolder.
663 * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
664 from SOGoContactFolders and modified to be more content-independent.
666 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
667 ([UIxMailActions -markMessageReadAction]): new methods moved from
668 UIxMailListView and adapted to invoke the client object directly,
669 since the previous versions had to to a lookup from the parent
672 * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
673 method into UIxMailActions.
674 ([-markMessageReadAction]): same as above.
675 ([-viewAction]): removed useless method.
676 ([-javaScriptOK]): removed useless method.
677 ([-isJavaScriptRequest]): removed useless method.
678 ([-lookupActiveMessage]): removed useless method.
680 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
681 -responseWithStatus:status]): new method that returns a WOResponse
682 initialized with the specified status code.
683 ([WODirectAction -responseWith204]): new method that invokes the
684 above one with "204" as parameter.
685 ([WODirectAction -redirectToLocation:newLocation]): rewrote method
686 to make use of -responseWithStatus:.
688 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
689 method that returns a WOResponse initialized with the 204 status
692 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
693 always use a "not deleted" search qualifier along with the user
694 qualifier (if present).
696 2007-09-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
698 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
699 -contactSearchAction]): only return the records which have an
702 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
703 -trashInContext:_ctx]): no longer expunge the mailbox after
704 marking a message deleted.
705 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
708 * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
709 ([-trashAction]): moved method into UIxMailActions.
710 ([-moveAction]): moved method into UIxMailActions.
712 2007-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
714 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
715 ([_UIxHTMLMailContentHandler
716 -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
717 comments from the CSS code, do not add the CSS code to the body
718 content and remove references of body from the CSS declarations.
719 ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
720 ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
721 common with cssContent in a different method and invoke it only
724 * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
725 instead of UIxPageFrame.
727 2007-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
729 * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
730 ([-appendToResponse:responseinContext:ctx]): commented out.
731 ([SOGoRootPage -connectURL]): new accessor that returns the full
732 url the the "connect" method.
733 ([-connectAction]): rewrote method to return a properly formatted
734 auth. cookie based on the username and password passed as
737 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
738 set the value of the cookie to "discard" and set its expiration
741 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
742 -preprocessCredentialsInContext:context]): consider the user
743 anonymous if the cookie value is "discard".
744 ([SOGoWebAuthenticator
745 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
746 set the expiration date of the cookie to yesterday.
748 * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
749 returns the path to the application if the clientObject is not a
752 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
753 moved the requirement of authentication from the SOGo application
756 * SoObjects/Appointments/SOGoAppointmentObject.m
757 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
758 check whether the new appointment object is still relevant before
759 sending a notification.
761 2007-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
763 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
764 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
765 render the login page through the SoDefaultRenderer.
767 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
768 -isPublicInContext:localContext]): new overriden method that
771 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
772 -currentCalendarLogin]): replace css-unsafe characters with _.
774 * UI/SOGoUI/UIxComponent.m ([UIxComponent
775 -shortUserNameForDisplay]): simplified method.
776 ([-user]): removed method since [context activeUser] is as useful.
778 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
780 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
781 set the cookie path to "/".
783 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
784 authenticator based on the request handler key. "dav" returns the
785 SOGoDAVAuthenticator, anything else returns the Web authenticator.
787 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
790 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
791 implementing a subclass of SoCookieAuthenticator, designed for
792 web-based cookie authentication of users.m
794 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
795 new method that resets the authentification cookie.
797 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
799 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
800 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
801 didBind to NO to make sure no false authentication is returned if
802 the bind operation is not executed.
804 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
806 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
807 "In-Reply-To" header field when replying.
809 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
810 table field names that are queried.
812 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
813 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
814 add the "c_" prefix to the quick table field names that are
817 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
819 * SoObjects/Appointments/SOGoAppointmentFolder.m
820 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
821 "personal" to the ocs path of the appointment folder.
823 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
824 -flatContentAsString]): use latin1 when the encoding is not
825 specified, and to reencode data chunk which were not correctly
826 decoded with the original charset.
828 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
829 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
830 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
831 ([SOGoAppointmentFolder
832 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
833 override those methods to use the "personal" additional directory.
835 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
836 append "/personal" to the calendar path to simulate a single
837 calendar in a choice of many.
839 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
840 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
841 methods back here. Moved the folder existence check here, and do
842 it on self only when the lookup happens for a non-folder object.
843 This permits to accept entries for folders with parents who
846 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
848 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
849 -shouldTakeValuesFromRequest:requestinContext:context]): same as
852 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
853 -shouldTakeValuesFromRequest:requestinContext:context]):
854 redesigned method since any method called can be received from a
855 POST or a GET. Instead we check the method call itself and we
856 accept only if it has the "save" prefix.
858 * SoObjects/Appointments/SOGoAptMailNotification.m
859 ([SOGoAptMailNotification -getSubject]): returns the subject an a
860 quoted-printable encoded string, if needed.
862 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
863 -asQPSubjectString:encoding]): moved method into
864 NSString+Utilities.m.
866 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
868 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
869 -messageForwardingList])
870 ([UIxPreferences -itemMessageForwardingText])D
871 ([UIxPreferences -userMessageForwarding])
872 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
873 new template methods for manage the user preference regarding
876 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
877 algorithm to return, in order, the user's defined language or the
878 first browser language or, finally, the default language.
879 ([SOGoUser -messageForwarding]): new method that returns the user
880 preference for message forwarding: "inline" or "attached",
881 defaulting to "attached".
883 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
884 -contentForInlineForward]): new method that returns the content of
885 the message for inline forwarding based on the SOGoMailForward
888 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
889 -fetchMailForForwarding:sourceMail]): check the user preference
890 for message forwarding and compose inline forwarded messages if required.
892 * SoObjects/Appointments/SOGoCalendarComponent.m
893 ([SOGoCalendarComponent
894 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
895 now use a template based on the language returned from the
898 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
899 a subclass of SOGoMailForward for English locale.
901 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
902 a subclass of SOGoMailForward for French locale.
904 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
905 helps build template for inline forwarded messages.
907 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
909 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
910 to handle "<var:if-ie>" template tags.
912 * UI/SOGoElements: new extension bundle containing sogo-specific
915 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
916 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
917 selected in the dialog.
918 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
919 first category, if ever, of the calendar entity.
921 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
922 -composeAction]): restored method since it is needed by the
925 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
926 -composeAction]): the address fields should be arrays and not
929 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
930 that returns the build date of SOGo in the template.
932 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
934 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
935 -_flattenedRecords:records]): when the c_cn field is empty,
936 returns set a formatted string with the concatenation of
937 c_givenname and c_sn as the displayName.
939 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
940 -isValidMailAccountName:_key]): prevent unknown accounts from
943 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
944 -pathToAttachmentObject]): we no longer need the filename
945 extension for SoLookup...
947 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
948 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
949 filename to have an extension, and thus accept any filename.
951 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
952 -currentCName]): new method that returns the c_name of the
953 contact, correctly escaped to be passed by url afterwards.
955 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
956 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
957 instance of [self decodedFlatContent] instead of the buggy
958 NSString from [super flatContentAsString] to the parser.
960 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
962 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
963 new category method to reponds to the "delete" web command on
965 ([UIxMailActions -deleteAttachmentAction]): new category method to
966 reponds to the "deleteAttachment" web command on drafts, taking
967 the "filename" url parameter into account.
969 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
970 -contentForEditing]): new method that retrieve the editable mail
972 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
973 returns the body keys for attached files (parts with a "filename"
976 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
977 -asQPSubjectString:encoding]): do not change the string if the
978 encoded string has the same length (which means it is already
980 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
981 that retrieve a draft along with its attachments for editing.
982 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
983 choke if the "to" header field is empty.
984 ([SOGoDraftObject -delete]): new method to delete the draft folder
985 whenever operations are done.
987 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
989 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
990 useless stub method, of which the intention was implemented in
992 ([-lookupSentFolderUsingAccount]): removed obsolete method.
993 ([-selectedMailIdentity]): removed obsolete method.
994 ([-lookupSentFolderUsingFrom]): removed obsolete method.
995 ([-storeMailInSentFolder:_path]): removed obsolete method, of
996 which the mechanism has been put in -[SOGoDraftObject sendMail]
998 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
999 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
1000 adapted algorithms to the new SOGoDraftObject methods.
1001 ([-deleteAction]): removed method since local draft objects cannot
1002 be removed by the user.
1004 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1005 -expungeAction]): new method replacing the one previously found in
1007 ([UIxMailFolderActions -createFolderAction])
1008 ([UIxMailFolderActions -renameFolderAction])
1009 ([UIxMailFolderActions -deleteFolderAction])
1010 ([UIxMailFolderActions -emptyTrashAction])
1011 ([UIxMailFolderActions -subscribeAction])
1012 ([UIxMailFolderActions -unsubscribeAction]): error situations
1013 should have http return code 500 instead of 403.
1015 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1016 -composeAction]): new method replacing the one previously in
1019 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1020 -imap4URLString]): removed overriden method (see below).
1022 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
1023 cache the mailbox acl.
1024 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
1025 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
1027 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
1028 the new method of determining the users mail accounts.
1030 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
1031 longer adds a "/" at the end of the string (the default for
1032 folders), therefore this will be overriden in SOGoMailFolder
1033 rather than in SOGoMailObject.
1035 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
1036 method, moved into the new UIxMailActions module class.
1038 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
1039 -newDraft]): new method that returns a new SOGoDraftObject
1040 instance with a unique filename based on the current timestamp and
1041 the "newDraft" prefix.
1043 -lookupName:nameinContext:localContextacquire:acquire]): overriden
1044 method by detecting local drafts with their "newDraft" prefix.
1045 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
1047 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
1048 from scratch by making it a subclass of SOGoMailFolder.
1050 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
1053 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
1056 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
1059 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
1060 new method, initializing the new ivars: IMAP4ID, headers, text,
1061 sourceURL and sourceFlag.
1062 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
1063 ([-_ensureUserSpoolFolderPath])
1064 ([-saveMimeMessageToTemporaryFileWithHeaders:])
1065 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
1066 ([-deleteTemporaryMessageFile:], [-delete], [-content])
1067 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
1068 ([-uid], [-flags], [-size], [-envelope]): removed methods.
1069 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
1071 ([SOGoDraftObject -setSourceURL:newSourceURL])
1072 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
1073 methods to store the url of the original message between accesses
1074 so that, depending on the action taken (forward or reply), the
1075 correct flag can be given.
1076 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
1077 the imap4 id that is returned for the message whenever it is saved
1078 into the drafts folder.
1079 ([SOGoDraftObject -save]): new method that takes in charge the
1080 saving of the message in the IMAP drafts folder.
1081 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
1082 new method that fills the original data of the new message with
1083 the reply content of the original message.
1084 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
1085 above for message forwarding.
1086 ([-spoolFileManager]): removed useless method (only returned the
1087 default filemanager...)
1088 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
1089 the resulting message as an NSData chunk.
1091 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
1092 containing a rewrite of the mail action methods found in
1093 UI/Mailer/, that needed to be put in the SOGoMailObject class.
1094 ([SOGoMailObject -subjectForReply]): new method that returns a
1095 subject suitable for replies.
1096 ([SOGoMailObject -contentForReply]): new method that returns the
1097 textual content of an email, quoted for replying.
1098 ([SOGoMailObject -filenameForForward]): new method that returns
1099 the name of the filename that should contain the forwarded
1100 message, based on its subject.
1101 ([SOGoMailObject -subjectForForward]): explicit.
1103 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1105 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1106 -mailAccounts]): rewrote method to return the name of the mail
1107 accounts now available with the -[SOGoUser mailAccounts] method.
1108 ([UIxMailMainFrame -showLinkBanner]): removed method.
1109 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
1110 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
1111 ([UIxMailMainFrame -rootURL]): removed method.
1112 ([UIxMailMainFrame -userRootURL]): removed method.
1113 ([UIxMailMainFrame -calendarRootURL]): removed method.
1114 ([UIxMailMainFrame -contactsRootURL]): removed method.
1115 ([UIxMailMainFrame -hasErrorText])
1116 ([UIxMailMainFrame -errorText])
1117 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
1118 ([-composeAction]): removed method. Now provided by
1119 UIxMailAccountActions.
1120 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
1121 ([UIxMailMainFrame -hideFolderTree]): removed method.
1122 ([UIxMailMainFrame -treeRootClassName]): removed method.
1123 ([UIxMailMainFrame +initialize]): removed method.
1124 SOGoMailTreeRootClass userdefaults will no longer have any effect.
1126 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1127 -redirectToLocation:newLocation]): new method that implements the
1128 same functionality as WOComponent.
1130 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
1132 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
1133 method that returns whether the current mail is store in the
1134 drafts folder hierarchy.
1136 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
1137 ([-primaryEmail]): removed method.
1138 ([SOGoUser -primaryIMAP4AccountString]): removed method.
1139 ([SOGoUser -mailAccounts]): new method that returns an array
1140 containing description dictionaries for all the user mail
1141 accounts. Each account also contain the user's identities for that
1143 ([SOGoUser -allIdentities]): new utility method that returns all
1144 the user identities on all accounts.
1145 ([SOGoUser -primaryIdentity]): new method return the first
1146 identity of the first account.
1148 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
1150 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1151 -isInDraftsFolder]): returns NO.
1152 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
1154 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
1156 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1157 -isInDraftsFolder]): new method that detects if self is contained
1158 by the drafts folder by calling itself on the container object.
1160 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
1162 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
1163 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
1164 return the name of the mail accounts now available with the
1165 -[SOGoUser mailAccounts] method.
1167 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
1170 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
1173 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1174 -keysWithFormat:format]): method that forward the method of the
1175 same name to each member of the array, considering they all are
1176 instances of NSDictionary.
1177 ([NSArray -objectsForKey:key]): same principle as above.
1178 ([NSArray -flattenedArray]): new method that transforms an array
1179 of arrays into a single array containing all the elements of the
1182 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1183 -keysWithFormat:keyFormat]): new method inspired by the python
1184 string formatting system and which replaces occurences of "%{key}"
1185 by the corresponding keys.
1187 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1189 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
1190 sql script before the generic one when initializing mandatory
1193 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1195 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1196 -pureEMailAddress]): new utility method inspired by the
1197 "_rawSender" private method in SOGoDraftObject, which it now
1200 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
1201 provides a common API for sending emails, no matter what the
1204 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1206 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1207 -quotasAction]): invoke "relativeImap4Name" instead of
1208 "nameInContainer" since the latter also returns the "folder"
1211 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1212 -listMailboxesAction]): declare the output as text/plain in UTF-8.
1214 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1215 -deleteFolderAction]): fixed the url of the destination folder.
1217 * Main/SOGo.m ([SOGo +initialize]): show the build date and
1218 hostname at startup.
1220 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1222 * SoObjects/Appointments/SOGoCalendarComponent.m
1223 ([SOGoCalendarComponent
1224 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1225 set the mail date to the current date string returned by our
1226 rfc822DateString extension method.
1228 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1229 -_gcsFoldersFromFolder:): ignore the personal folders who are
1230 returned but don't really exist.
1232 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
1234 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
1235 has to return only one element.
1237 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1239 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1240 -content]): new method returning the decoded content of the
1241 corresponding attachment as an NSData instance.
1242 ([UIxMailPartViewer -filename]): if the "filename" parameter of
1243 the metadata parameterList is empty, try to find out the filename
1244 from the "disposition" metadata returned with the BODYSTRUCTURE
1247 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1248 -composeAction]): prefix the INBOX folder with "folder".
1250 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
1251 -relativeImap4Name]): return nameInContainer stripped from its
1252 first 6 characters since all folder names are prefixed with
1255 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1256 -imap4URLString]): invoke -relativeImap4Name instead of
1257 "nameInContainer" since the former will return the fixed IMAP4
1258 foldername and the latter the SoObject name.
1260 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1261 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
1263 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
1264 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1265 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
1266 ([SOGoMailAccount -sentFolderNameInContext:])
1267 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
1268 names with "folder".
1269 ([SOGoMailAccount -inboxFolderInContext:_ctx])
1270 ([SOGoMailAccount -sentFolderInContext:_ctx])
1271 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
1272 the folder names with "folder" since they are prefixed earlier.
1274 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1276 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1277 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
1278 all starts with "folder".
1280 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
1281 longer declare security info from here.
1283 * SoObjects/Mailer/SOGoMailFolder.m
1284 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
1285 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
1286 folder names now always start with "folder".
1288 * SoObjects/Mailer/SOGoMailAccount.m
1289 ([-lookupName:inContext:acquire:]): folder names now always start
1292 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1294 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
1295 -forwardAction]): adapted to the new saveAttachment:withMetadata:
1298 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
1299 code to save the attached filenames with the filename returned by
1300 the web server as well as their mime types.
1302 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
1303 ([UIxMailPartMessageViewer -toAddresses])
1304 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
1305 the corresponding fields separated with a ", " (if needed).
1307 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1308 -saveAttachment:_attachwithMetadata:metadata]): new method
1309 replacing -saveAttachment:withName: and which takes a dictionary
1310 as parameter with the filename and the mime type of the
1312 The mimetype is then saved in a hidden text file.
1313 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
1314 take the mime type from the hidden text file related to the
1317 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
1318 ([SOGoContactGCSFolder
1319 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1320 return records if the db records are > 0 and not just > 1...
1322 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1324 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
1326 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
1328 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1329 ([SOGoContactLDAPFolder
1330 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1331 translate the returned records to a normalized form.
1333 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1334 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1335 translate the returned records to a normalized form.
1337 * UI/Scheduler/UIxCalListingActions.m,
1338 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
1339 SoObjects/SOGo/AgenorUserDefaults.m,
1340 SoObjects/Contacts/SOGoContactGCSFolder.m,
1341 SoObjects/Appointments/SOGoAppointmentFolder.m,
1342 OGoContentStore/OCSiCalFieldExtractor.m,
1343 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
1344 table fields with "c_".
1346 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1348 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
1349 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
1350 the application settings. If set, both limit will influence the
1351 maximum size of the resultsets and the time taken to solve them.
1352 ([LDAPSource -_initLDAPConnection]): initialize the limits.
1354 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1356 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
1357 method that declares the DAV namespace related to CardDAV.
1358 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
1359 method that declares the "access-control" and "addressbook-access"
1360 classes to the list.
1362 * SoObjects/Appointments/SOGoAppointmentFolder.m
1363 ([-lookupActionForCalDAVMethod:]): removed method.
1364 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
1365 method that declares the DAV namespace related to CalDAV.
1367 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
1368 optional method for subclasses which handle specific extensions to
1369 the DAV protocol: CardDAV or CalDAV.
1371 -lookupName:lookupNameinContext:localContextacquire:acquire]):
1372 new overriden method that handles dav invocations for extensions
1373 to DAV by returning an appropriate SoSelectorInvocation.
1375 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1376 -asDavInvocation]): new method returning a dictionary with a "ns"
1377 key representing the dav namespace and a "method" key representing
1378 the dav method name of the request.
1380 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1381 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
1383 ([UIxPreferences -shouldDisplayPasswordChange]): new template
1384 method that returns the value of SOGoUIxUserCanChangePassword.
1386 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1387 scan the value of SOGoUIxDefaultModule. If not set, the default
1388 module defaults to "Calendar".
1389 ([SOGoUserHomePage -defaultAction]): redirect the user to the
1390 value of "SOGoUIxDefaultModule".
1392 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1394 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1395 -contactInfos]): cache the results to avoid multiple invocations.
1397 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1398 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
1399 really should return something or if we fake to return nil...
1401 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1403 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
1404 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
1405 default is set to "bypass".
1407 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1408 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
1409 when authMethod is set to "bypass" from now on. This would avoid a
1410 security concern with a default installation of SOGo.
1411 AuthentificationMethod is now prefixed with "SOGo" for better
1414 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1416 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1417 -quotasAction]): new method that returns a json representation of
1420 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1422 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1423 -imap4URL]): rewrote method to support accented mailbox names.
1424 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
1425 SOGoAuthenticator's passwordInContext:.
1427 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1428 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
1429 start and due dates to nil if hasStartDate and hasDueDate are
1432 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1433 -passwordInContext:context]): made method public.
1435 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1436 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
1437 to false to avoid a null violation.
1439 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1441 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1442 -contentAsString]): returns the message encoded in ISO Latin 1
1445 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
1446 SOGoSuperUsername user defaults.
1447 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
1449 ([SOGoUser -rolesForObject:objectinContext:context]): if the
1450 current user is the superuser, grant him/her the "owner" role.
1452 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1453 the folder only if the current user is the owner of the future
1456 * SoObjects/Appointments/SOGoCalendarComponent.m
1457 ([SOGoCalendarComponent -contentAsString]): we return the content
1458 based on the permissions returned by the security manager instead
1459 of by looking at the user roles.
1461 * SoObjects/Appointments/SOGoAppointmentFolder.m
1462 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
1463 folders of the user to whom this folder belongs instead of the
1464 active user. This way, a delegate user will be able to have the
1465 same view that the original user has if he connects from his user
1468 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
1469 user exists before creating the SOGoUserFolder instance. If not,
1472 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
1473 return the message source code in plain text.
1475 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1476 -contentAsString]): returns the message encoded in UTF8.
1478 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1480 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
1481 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
1482 leading tagname into account when serializing the element values.
1484 * Main/SOGoProductLoader.m: only load bundle directories ending
1485 with the "SOGo" extension.
1487 * Main/SOGo.m ([SOGo
1488 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
1489 result set if the query has caused no exception. Otherwise we get
1490 an "evaluation is in progress exception".
1492 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1494 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1495 -generateSQLForInsert]): initialize error to nil before the
1496 serialization. Otherwise the method can get confused if it ever is
1497 initialized to something else.
1499 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
1500 -folderIsMandatory]): returns NO unconditionnally.
1502 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1503 -appendPersonalSources]): add the "personal" folder to the list of
1504 user folders even if it doesn't exist, so that it is created when
1505 the user accesses it.
1507 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1508 -folderIsMandatory]): returns YES if nameInContainer is set to
1509 "personal", which is the default address book.
1511 * SoObjects/Appointments/SOGoAppointmentFolder.m
1512 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
1513 users must have one Calendar folder (one and only one).
1514 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
1515 escaping '\' so make the carriage return a real one. This way,
1516 PgSQL 8 won't complain about escaping the string.
1518 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
1519 method that create the folder if considered mandatory.
1520 ([SOGoFolder -folderIsMandatory]): new method that determines
1521 whether the folder should be created automatically or not. To be
1522 overriden by subclasses.
1524 * Main/SOGo.m ([SOGo -run]): override method and create the
1525 missing system tables if needed.
1527 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1529 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
1530 -mailDateFormatter]): returns the user's date formatter.
1532 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
1533 applies the user timezone to the date object before returning it.
1535 * UI/Common/UIxSortButton.m: removed useless class module.
1537 * UI/Common/UIxSortableTableHeader.m: removed useless class
1540 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1541 -contactInfos]): use the "asc" url parameter instead of "desc" to
1542 determine the ordering.
1543 ([-sortOrdering]): removed method.
1544 ([UIxContactsListView -init]): removed the "searchText" ivar.
1545 (general): the template no longer use the UIxSortableTableHeader
1548 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1549 -defaultSortKey]): default sort following the messages arrival
1550 instead of their date.
1551 ([-isSortedDescending]): removed method.
1552 ([-imap4SortOrdering]): use the "asc" url parameter instead of
1553 "desc" to determine the ordering.
1554 (general): the template no longer use the UIxSortableTableHeader
1557 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1559 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
1561 ([-setQualifier:_msg], [-qualifier]): removed methods.
1562 ([UIxMailListView -defaultAction]): added code to handle the
1563 search criteria and value passed as url parameters. Also, we now
1564 handle the same search criterias as Thunderbird/Icedove.
1566 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1568 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
1569 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
1570 the string instead of the string itself.
1571 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
1573 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
1574 bool var "acceptAnyUser" that is set when the AuthenticationMethod
1575 user default is nil.
1576 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
1577 unconditionnally returns an instance whenever acceptAnyUser is set.
1579 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1581 * Main/sogod.m (main): prevent SOGo from running as root.
1583 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1585 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
1586 -setCurrentPassword:newPassword]): new stub method.
1587 ([SOGoUser -dateFormatterInContext:context]): new method that
1588 returns an instance of SOGoDateFormatter configured based on the
1591 * UI/Common/UIxPageFrame.m ([UIxPageFrame
1592 -relativePreferencesPath]): new method.
1594 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
1595 removed useless method.
1597 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
1598 different configurable formats (long and short date + time).
1600 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
1602 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1603 -isInternetRequest]): removed method.
1605 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1606 -jsonRepresentation]): new method with an explicit name.
1608 * UI/PreferencesUI/product.plist: new bundle that provides a web
1609 ui for handling user defaults.
1611 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
1613 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
1615 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
1617 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1619 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
1621 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1623 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
1624 -compareEventsAscending:otherEvent]): no longer use compare: on
1625 the time objects since one of them could be an NSNull, which
1626 crashes when comparing with anything.
1628 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1629 -eventsListAction]): sort events from here.
1630 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
1632 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
1633 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
1635 * SoObjects/Appointments/SOGoAppointmentFolder.m
1636 ([SOGoAppointmentFolder
1637 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
1638 no longer sort elements from here.
1640 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1642 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1643 -aclsForUser:uid]): implemented method by forwarding the request
1644 to the container. This fixes a bug where users could no longer
1645 read emails from shared folders.
1647 * SoObjects/Appointments/SOGoCalendarComponent.m
1648 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
1649 here, but rather in its parent class.
1651 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
1652 -stringForSecondsSinceThe70s:seconds]): new utility method.
1654 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1655 -eventsListAction]): no longer reduce the end day of one day for
1656 all day events since everything has been fixed in
1657 OCSiCalFieldExtractor.
1659 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1660 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
1661 the end date of all day events of 1 so that they stay on their
1664 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1666 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
1668 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
1670 ([-fetchCoreTasksInfos]): removed method.
1672 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1673 -init]): initialize an instance of SOGoDateFormatter.
1674 ([UIxCalListingActions -eventsListAction]): the display start and
1675 end dates are added to the listing for each event.
1677 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
1679 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1680 -isAllDay]): returns YES if the "hm" url parameter is set to
1682 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
1683 is displayed one day earlier.
1685 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1687 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1688 -_setupContext]): take the range of dates specified by the popup
1691 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
1692 WODirectAction that returns WOResponse objects with the events or
1693 todos satisfying the parameters passed in the url.
1695 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1696 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
1697 "isAllDay" into account and compute the amount of days to pass to
1700 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
1702 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
1703 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
1704 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
1705 new method that returns a json-formatted array of the visible tasks
1706 for the current user.
1708 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1710 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
1711 object must be present in the list of UIDs we delete the object
1712 from. Otherwise Calendar objects having no organizer and no
1713 attendees will remain in their owner's Calendar.
1715 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1716 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
1717 first 3 elements of the path array if the url returned by
1718 baseURLInContext: returns a hostname.
1720 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1721 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
1722 nil, in which case a crash happens when calling hasPrefix:.
1723 ([SOGoMailFolder -_sharesACLs]): same as above.
1724 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
1725 otherUsersFolderName is nil, we return nil.
1726 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
1727 nil from [self otherUsersPathToFolder], we return nil too.
1729 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1731 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1732 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
1733 the result of [self baseURLInContext:] to avoid a double escaping
1734 in the resulting string.
1736 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
1737 the user has the "ObjectReader" role on the parent container, then
1738 he is granted the "ObjectViewer" role on this object. Same for
1739 "ObjectEraser", although this might change later.
1741 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1742 -toolbar]): determine the toolbar filename based on the
1743 permissions declared by the securitymanager. The role mechanism
1744 has been adjusted on a lowerlevel so we can simplify the code.
1746 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1747 -initWithName:newNameinContainer:newContainer]): read the content
1748 directly from here. That way we can determine whether the object
1750 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
1751 the ObjectCreator role is enabled, we also grant the ObjectEditor
1752 role to the current user.
1754 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
1755 changed the method paradigm to only return HTTP code 204. Not test
1756 is done whatsoever since the security manager does it for us.
1758 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
1759 removed method because the same exists in UIxFolderActions.m
1761 * UI/Contacts/UIxContactsUserRightsEditor.m
1762 ([UIxContactsUserRightsEditor
1763 -setUserCanReadObjects:userCanReadObjects]): new method.
1765 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
1766 "FolderEraser" and special permission "Access Object". Removed
1767 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
1768 can be used instead. Removed "FolderReader" since it is useless.
1770 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
1771 -vCard]): directly use the "content" ivar since it is initialized
1772 during object creation.
1774 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1775 ([SOGoContactLDAPFolder -init]): no longer handle the
1776 nameInContainer no the container ivars. They were removed because
1777 this class is a descendant of SOGoObject which already has them.
1778 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
1779 returning "displayName".
1780 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
1783 * SoObjects/Appointments/SOGoCalendarComponent.m
1784 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
1785 ([SOGoCalendarComponent -findParticipant:user]): new name for
1786 method "participant:".
1787 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
1788 findparticipant but taking a uid string as parameter.
1789 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
1790 iCalendar automatically. Instead, this is done only when the user
1791 is a "date and time viewer".
1792 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
1793 (modifier and responder) into account by compiling them with the
1796 * SoObjects/Contacts/SOGoContactFolder.h: removed
1797 "nameInContainer" from the list of required methods.
1799 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1800 -davContentType]): returns "text/calendar".
1802 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1803 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
1804 groupdav resource-type.
1806 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1807 -davContentType]): same as below.
1809 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1810 -initWithName:newNameinContainer:newContainer]): new overriden
1811 method setting the custom owner directly.
1813 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1814 -davContentType]): same as below.
1816 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1817 -davContentType]): same as below.
1819 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
1820 declare "httpd/unix-directory".
1822 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
1823 "UTC" as fallback timezone instead of "Canada/Eastern".
1824 ([-hasEmail:email]): make use of the new NSArray's
1825 containsCaseInsensitiveString: method.
1827 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1828 -davContentType]): declare "message/rfc822" as content type.
1830 * SoObjects/Appointments/SOGoAppointmentFolder.m
1831 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
1833 ([SOGoAppointmentFolder
1834 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
1835 ([-fetchContentObjectNames]): commented out method since it was
1836 usefull only for testing Funambol.
1838 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1839 -containsCaseInsensitiveString:match]): an enhanced version of
1842 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
1844 ([-showMarkDeletedButton]): removed useless method.
1845 ([-showTrashButton]): removed useless method.
1847 * SoObjects/Appointments/iCalEntityObject+SOGo.m
1848 ([iCalEntityObject -userIsParticipant:user]): new proxy method
1849 that invoked isParticipant on self for each possible email
1850 addresses of the user passed as parameter.
1851 ([iCalEntityObject -userIsOrganizer:user]): same as above.
1853 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
1856 * SoObjects/Appointments/SOGoAppointmentObject.m
1857 ([SOGoAppointmentObject
1858 -saveContentString:contentStringbaseVersion:baseVersion]): remove
1859 method since an event may not have an organizer.
1861 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1862 -GETAction:localContext]): clarified method. Added support for
1863 content-type (thanks to Helge Hess).
1864 ([SOGoObject -initWithName:_nameinContainer:_container]):
1865 initialize and retain the owner.
1866 ([SOGoObject -davContentType]): returns "text/plain".
1868 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1870 * UI/Common/UIxObjectActions.m ([UIxObjectActions
1871 -addUserInAclsAction]): send an acl addition mail.
1872 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
1875 * UI/Common/UIxFolderActions.m ([UIxFolderActions
1876 -_realActionWithFolderName:folderDict]): handle the possible
1877 presence of the "mail-invitation" url parameter. If present, the
1878 user will be redirected to the relevant folder.
1880 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
1881 ([SOGoUser -language]): new method that returns the user's
1882 preferred language, or the system's if none has been set yet.
1884 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
1885 that returns the full dav url to self.
1886 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
1887 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
1888 returns the full so url to the base of the SOGo module to which
1889 self belongs, and for the specified user.
1890 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
1891 but for the current user.
1892 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
1893 required by the acl advisory templates and which returns a link
1894 the target user can click to activate its new subscription.
1895 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
1896 but for inclusion of the application/x-sogo-notification part,
1897 which will be handled by the Lightning enhancer plugin.
1899 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
1900 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
1901 do nothing yet since imap folder subscription is not handled yet.
1903 * SoObjects/SOGo/SOGoContentObject.m
1904 ([-hasSupportForDefaultRoles]): removed method.
1906 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
1907 -getFullEmailForUID:uid]): new method that returns the username +
1910 * SoObjects/Appointments/SOGoCalendarComponent.m
1911 ([SOGoCalendarComponent +initialize]): the default language for
1912 mail templates is now set to English.
1914 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
1915 SOGoACLAdvisory implementing the french template for user removal
1918 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
1919 SOGoACLAdvisory implementing the french template for user
1922 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
1923 SOGoACLAdvisory implementing the english template for user removal
1926 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
1927 SOGoACLAdvisory implementing the english template for user
1930 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
1931 supercall of all the acl advistory templates. The model is based
1932 on SOGoAptMailNotification except that the template encapsulates
1933 the message to be sent. Later, we might create a superclass common
1934 to all template-based emails.
1936 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
1937 -addRange:newRange]): new method that store a string
1938 representation of the NSRange passed as parameter.
1939 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
1940 any range contained in self intersect with the one passed as parameter.
1942 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
1943 store ranges in an array to prevent them from intersecting with
1944 each other during the passes.
1946 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1948 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1949 -primaryFetchMailboxInfo]): useless method. Removed.
1951 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1953 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1954 -toManyRelationshipKeys]): invoke [self subfolders].
1955 ([SOGoMailFolder -subfolders]): new method containing what used to
1956 be in toManyRelationshipKeys.
1957 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
1960 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1961 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
1962 named and at the beginning of which we put the predefined folders.
1964 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1965 -emptyTrashAction]): new method inspired by a similar one from
1966 UIxMailListView, to which we added the ability to remove
1969 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
1970 method. Replaced with a similar one in UIxMailFolderActions.
1972 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1973 -renameFolderAction]): implemented method.
1974 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
1975 specified folder. Instead, we put it in the trash folder.
1977 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
1978 method, replaced with a similar method in the new
1979 UIxMailFolderAction class module.
1980 ([-deleteFolderAction]): idem.
1982 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1983 -createFolderAction]): new method implementing subfolder creation.
1984 ([UIxMailFolderActions -renameFolderAction]): new method
1985 implementing subfolder renaming (basic implementation to be
1987 ([UIxMailFolderActions -deleteFolderAction]): new method
1988 implementing folder deletion.
1990 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
1991 web actions related to the handling of imap folder.
1993 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1995 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1996 -ownerInContext:localContext]): overriden method because we are an
1997 IMAP4 client and we need a bit more intelligence to deduce the
1998 owner of the current folder.
1999 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
2000 return an NSException so we need to be careful here to avoid a
2002 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
2003 NSException so we need to be careful here to avoid a crash.
2005 * SoObjects/Mailer/SOGoMailAccounts.m
2006 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
2007 there is no longer any concept of Intranet or Internet connection
2010 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2011 -sharedFolderName]): new method.
2012 ([SOGoMailAccount -otherUsersFolderName]): new method.
2014 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
2015 new javascript code and the new UIxMailAccountActions class.
2017 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
2018 javascript code and the new UIxMailAccountActions class.
2020 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
2021 new javascript code and the new UIxMailAccountActions class.
2023 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2024 -listMailboxesAction]): new method that returns a json-formatted
2025 tree of all the mailboxes available to the current user.
2027 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
2028 web actions related to the handling of mail accounts.
2030 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
2033 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
2034 -jsonRepresentation]): new interface method meant to be overriden
2035 by the primitive classes.
2037 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2039 * UI/MailerUI/UIxMailSplashView.m: removed.
2041 * SoObjects/Appointments/SOGoCalendarComponent.m
2042 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
2043 the uid to the list only when the user email is recognized by the
2046 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2048 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2049 -isDeletionAllowed]): completed method with the new imap acl api.
2051 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
2054 * SoObjects/SOGo/SOGoPermissions.m: added the new role
2055 "SOGoMailRole_MessageEraser".
2057 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
2058 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
2059 "defaultUserID" method into account.
2061 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
2062 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
2063 "defaultUserID" method into account.
2065 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
2066 methods to support the IMAP acls mentionned in the RFC 4314,
2067 removed the ones specific to Cyrus.
2069 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
2070 mandatory method for subclasses. Removed the SOGoDefaultUserID
2073 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
2074 overriden method to return @"<default>".
2076 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2077 -defaultUserID]): overriden method to return @"<default>".
2079 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2080 -aclsForUser:uid]): overriden method.
2081 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
2082 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
2083 ([SOGoMailFolder -defaultUserID]): overriden method.
2084 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
2086 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2088 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2089 -aclUsersForObjectAtPath:objectPathArray]): new method that being
2090 forwarded the calles to aclUsers for the GCS-based subclasses of
2093 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
2094 methods that would have been used to support IMAP acls. Replaced
2095 them with the new protocol for them that has been implemented in
2096 SOGo during the last few weeks.
2098 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2099 -hasSupportForDefaultRoles]): override method by returning "YES".
2101 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2102 -addObjectUniquely:object]): new method with an explicit name.
2104 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
2105 "acl" to "aclUsers". Now designed to return only the uid of the
2106 users involved in an ACL.
2107 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
2108 "NO" by default. To indicate to the acl editor that we don't want
2109 to handle a default user.
2111 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
2112 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
2115 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
2116 provides a view to the IMAP acls.
2118 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
2120 * UI/WebServerResources/MailerUI.js: replaced all invocations of
2121 addEventListener to the use of prototype's Event object. Also,
2122 configured all menus programmatically following descriptions lists
2123 containing their callbacks, or nulls, submenus id or separators.
2125 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2127 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2128 -addUserInAclsAction]): save the previous roles of the user
2129 (unlikely) or the default roles, or None instead of saving the
2130 roles that should appear the first time in the role editor when no
2131 default has been set...
2133 * SoObjects/SOGo/SOGoObject.m: defined a new constant
2134 "SOGoDefaultUserID".
2136 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2137 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
2138 ignore the "AuthorizedSubscriber" role and add the "None" role
2139 when no other role is found.
2141 * UI/Common/UIxAclEditor.m: added a button for the new default
2144 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2145 -_initRights]): don't take the "None" role into account when
2146 initializing the list of current roles.
2148 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
2151 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2153 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2154 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
2155 There is no need to subscract the start from the length if a space
2156 is not found since the range has not changed either. Finally, the
2157 first character before the url might also be a tab or a cr, so we
2158 match it against the "urlAfterEndingChars" custom NSCharacterSet.
2159 ([NSString -stringByDetectingURLs]): modified to handle email
2160 addresses and add a correct "mailto:" link.
2162 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2164 * SoObjects/Appointments/SOGoAppointmentFolder.m
2165 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
2166 method to return the events in the range of 2 weeks ago up to 4
2169 * UI/MailPartViewers/UIxMailPartTextViewer.m
2170 ([UIxMailPartTextViewer -flatContentAsString]): use the new
2171 "stringByDetectingURLs" method to offer clickable urls.
2173 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2174 -stringByDetectingURLs]): this new method replaces passive URLS
2175 with active ones for HTML resolution of the text.
2177 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2179 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2180 -asQPSubjectString:encoding]): simplified method.
2181 The headers indicates "utf-8" again thank to our fix in
2184 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
2187 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2189 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2190 -removeUserFromAclsAction]): implemented this method which was
2191 missing and is required to remove users from ACLs.
2193 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2194 -subscribeAction]): folderDict was not autoreleased, resulting in
2197 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2198 -primaryFetchProfile]): when building with libFoundation, don't
2199 use the "propertyList" method from NSString. Rather, we convert
2200 the string to an NSData instance and passit as parameter to
2201 NSDeserializer. This way, we obtain a mutable dictionary rather
2202 than an immutable one.
2204 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
2205 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
2206 constant string "contentTypeValue".
2207 contentTypeValue is now set back to iso-8859-1 since NGMime
2208 converts extracts the data in that encoding.
2210 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2212 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2213 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
2214 "bindFields" value is present in the user defaults, use the
2215 specified fields to find the dn of the user to bind.
2216 ([LDAPSource -allEntryIDs])
2217 ([LDAPSource -fetchContactsMatching:match])
2218 ([LDAPSource -lookupContactEntry:entryID])
2219 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
2220 bind and unbind the connection on each request.
2222 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
2224 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2225 -contactSearchAction]): simplified method to use the facilities
2226 provided by the LDAPUserManager. No longer takes care of the
2227 "ldap-only" url parameter since all requests are handled by the
2230 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2231 -primaryFetchProfile]): check that the value returned is not null
2232 before interpreting it.
2234 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2235 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
2236 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
2237 system email is already present, remove it before adding it.
2239 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2240 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
2241 loginToCheck is not empty.
2242 ([LDAPSource -fetchContactsMatching:match]): check that match is
2244 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
2246 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
2249 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2251 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
2253 ([SOGoUser -systemEmail]): returns the email formed from the
2254 username and the default mail domain.
2255 ([SOGoUser -hasEmail:email]): test whether the user has the
2256 specified email, in a case-insensitive way.
2258 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2259 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
2260 check login information.
2262 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2263 ([SOGoContactLDAPFolder
2264 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
2265 no longer manage LDAP connections. The requests are forwarded to
2266 the relevant LDAPSource instead.
2268 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2269 -appendSystemSources]): pass LDAPSource objects to
2270 SOGoContactLDAPFolder instances.
2272 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
2273 address of the "from" field before sending the message. Otherwise,
2274 sending the mail won't work.
2276 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
2277 rewrote this method to request all the available email identities
2278 for the current user. Also, the from field also contains the full
2279 name of the user, not just his/her email address.
2281 * SoObjects/Appointments/SOGoCalendarComponent.m
2282 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
2283 from the previous module iCalEntityObject+Agenor.
2284 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
2285 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
2288 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
2289 replacing the SOGoContactLDAPEntry module. It was renamed as such
2290 because it now receives a dictionary instead of an NGLdapEntry.
2291 It thus can now handle data from any source of LDIF data, not
2292 only coming from LDAP.
2294 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
2295 implementing most of what used to be the AgenorUserManager class.
2296 The difference is that users are cached in the forme of
2297 dictionaries and many sources are used. Also, it can be used to
2298 search LDAP contacts.
2300 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
2301 the concept of "ldap source", to be used by all the classes
2302 needing access to LDAP-provided information: addressbooks and the
2303 user manager. Most the method thereing are transcriptions of
2304 methods previously found in SOGoContactLDAPFolder. It also contain
2305 utility methods for user matching and authentification.
2307 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
2308 module, rendered useless by code refactoring.
2310 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
2311 with the freshly written "LDAPUserManager".
2313 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2315 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
2316 SOGOContactLDIFEntry.
2318 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
2319 module, obsoleted by code in SOGo/LDAPSource.[hm].
2321 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2323 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
2324 new method with an explicit name.
2326 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2328 * SoObjects/Appointments/SOGoCalendarComponent.m
2329 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
2330 replacing "isOrganizer:orOwner:" by taking only one instance of
2331 SOGoUser as parameter.
2332 ([SOGoCalendarComponent -participant:user]): new method replacing
2333 the previous "isParticipant" boolean method by returning the first
2334 participant matching the user passed as parameter. This method is
2335 used so that both the regular email address and the "system email
2336 address" of the user are matched against the participants emails.
2338 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2339 -getSystemEMailForUID:uid]): new method that returns the email
2340 formed with the user's uid and the default mail domain.
2342 * SoObjects/Appointments/SOGoCalendarComponent.m
2343 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
2344 was previously commented out.
2346 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
2347 forwared to [AgenorUserManager getSystemEmailForUID:].
2349 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2350 -toolbar]): method replacing the one with the same name in the
2351 task and appointment editor classes. This method makes also use of
2352 the new method "isOrganizerOrOwner:" and "participant:" in
2353 SOGoCalendarComponent.
2355 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2356 -toolbar]): removed method, replaced with a method with the same
2357 name in UIxComponentEditor.
2359 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
2360 method, replaced with a method with the same name in
2363 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2364 -primaryFetchProfile]): the values returned from the database are
2365 converted to a put dictionary first, since the dictionary returned
2366 is actually an immutable one, which can cause a crash afterwards.
2368 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2370 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
2371 and "SOGoRole_ObjectEditor".
2373 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2374 -prepareRightsForm]): this method is no longer mandatory.
2376 * UI/Contacts/UIxContactsUserRightsEditor.m
2377 ([UIxContactsUserRightsEditor
2378 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
2379 module to handle acls related to the address books. Partial
2382 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2383 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
2386 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
2387 specified roles from cache.
2388 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2389 put resulting roles in cache.
2391 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
2392 initWithName:inContainer:. Instead, directly initialize the ivars
2393 as it is supposed to be to avoid an infinite loop whenever one of
2394 those two methods are overriden.
2396 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
2399 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2400 -aclsForUser:uid]): override method so that SOGo won't crash when
2401 loading the contact card.
2403 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2405 * SoObjects/Appointments/SOGoAppointmentFolder.m
2406 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
2407 "freebusy" special user should only require opaque elements.
2409 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2411 * SoObjects/Appointments/SOGoAppointmentFolder.m
2412 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
2413 our double declaration where the resulting XML would be screwed.
2414 There is only one collection per namespace.
2416 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
2417 rfc822DateString]): new method that returns a string conform to
2418 rfc 822 and suitable for email headers.
2420 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
2421 "rfc822DateString" category method on the date we put in the
2424 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2426 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
2427 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
2428 which should never be overriden.
2429 ([UIxUserRightsEditor -appendRight:newRight])
2430 ([UIxUserRightsEditor -removeRight:right])
2431 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
2432 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
2433 methods that can be used by the subclasses.
2434 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
2435 mandatorily be overriden to prepare the elements of the subclassed
2437 ([UIxUserRightsEditor -updateRights]): new method that should
2438 mandatorily be overriden to update the user rights from the
2439 elements of the subclassed form.
2441 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
2442 check if the uid is already listed before adding it to our array.
2443 This is because the acl table can contain more than one record per
2444 user/object relationship.
2446 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2447 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
2448 "roles" parameter is now an NSArray instead of a string. Therefore
2449 we loop throughout the array to populate the table. All the
2450 relevant records are removed prior to the addition of the new
2453 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2454 -aclsForUser:uid]): new override that returns nil until we add
2455 support for IMAP acls.
2457 * SoObjects/Mailer/SOGoMailAccounts.m
2458 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
2460 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2461 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
2463 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2464 -aclsForUser:uid]): override this method which will always return
2467 * SoObjects/SOGo/SOGoPermissions.[hm]: added
2468 [Public,Private,Confidential]
2469 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
2470 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
2471 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
2473 * SoObjects/Appointments/SOGoAppointmentFolder.m
2474 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
2475 that defines default roles for new elements in the acl.
2477 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
2478 module and subclass of UIxUserRightsEditor specific to the
2479 handling of user rights on calendar folders.
2481 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2483 * SoObjects/Appointments/SOGoAppointmentFolder.m
2484 ([SOGoAppointmentFolder -groupDavResourceType]): return both
2485 "vevent-collection" and "vtodo-collection".
2487 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
2488 that implements the detailed editor of user rights per-object.
2490 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2492 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2493 -rolesForObject:objectinContext:context]): no longer query objects
2494 for "roleForUser:". Instead, all objects should implement
2497 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
2498 new method to comply with the new acl "protocol" in SOGoObject.
2499 Uses SOGoFolder's new facilities for ACLS.
2500 ([SOGoContentObject -aclsForUser:uid]): idem.
2501 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
2502 ([SOGoContentObject -removeAclsForUsers:users]): idem.
2504 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2505 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
2506 based folders. This method is derived from the code that was in
2507 UIxAclFolder before its removal.
2508 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2511 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
2513 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
2514 ([SOGoFolder -setRoleForUsers:uidsto:role])
2515 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
2517 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
2518 that requires overriding by subclasses.
2519 ([SOGoObject -aclsForUser:uid]): idem.
2520 ([SOGoObject -defaultAclRoles]): idem.
2521 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
2522 ([SOGoObject -removeAclsForUsers:users]): idem.
2524 * UI/Common/UIxObjectActions.m: new module implementing the web
2525 actions common to SOGoObject and all its subclasses.
2526 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
2527 user with the clientObject defaults user rights to the object's
2530 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
2531 to the point where it will only list the users (and their name)
2532 associated with an object acl.
2534 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
2535 methods have been moved into SOGoObject and SOGoFolder during a
2538 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2539 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
2540 method made useless by the programmatic handling of iCalendar
2542 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
2543 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
2544 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
2546 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
2547 drop on all folder nodes, not just on leaves.
2549 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2550 ([SOGoContactLDAPFolder
2551 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
2553 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2555 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
2556 debugging facilities when the SOGoDebugObjectAllocation user
2559 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2561 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
2562 method that SOGo will need with non-gnustep Foundation
2564 ([NSString -stringByAppendingPathComponent:component]): new method
2565 that SOGo will need when building with libFoundation. Method
2566 removed later since it is available from
2567 Foundation/NSPathUtilities.h.
2569 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
2572 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
2573 every subclass to access [WOApplication context] without having to
2574 invoke it more than once.
2576 * SoObjects/Appointments/SOGoCalendarComponent.m
2577 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
2578 moved method from SOGoTaskObject and SOGoAppointmentObject up to
2581 * UI/Scheduler/UIxCalSelectTab.m: removed module.
2583 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2585 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2586 -vCard]): test the prefix of the card in a case-independent way.
2588 * OGoContentStore/OCSContactFieldExtractor.m
2589 ([OCSContactFieldExtractor
2590 -extractQuickFieldsFromContent:content]): we no longer accept
2591 records in a format other than versit vCard so we can get rid of a
2594 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2596 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2597 -selectorComponentClass]): restored method.
2599 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2601 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
2602 -shouldDisplayCurrentTask]): the current task is not displayed if
2603 it is NOT completed or if the "showCompletedTasks" flag is set.
2604 The logic was inverted in Lightning and is now in SOGo too.
2606 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2608 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
2609 want the "work" url instead of the "home".
2611 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
2612 -_saveSnapshot]): save url values from snapshot.
2613 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
2615 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2616 -calendarList]): new method replacing "availableCalendars".
2618 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
2619 -calendarFolders]): we now take the list of subscribed calendar
2622 * SoObjects/Appointments/SOGoAppointmentFolder.m
2623 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
2624 method derived from and replacing [UIxCalView calendarFolders].
2626 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2628 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2629 -toManyRelationshipKeys]): don't put the predefined folders in the
2630 list if they are returned by the server.
2632 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
2633 longer store the "flattenedBlocks" in a dictionary since the
2634 object will be deleted anyway and we don't need to put the folders
2637 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
2638 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
2639 attachment path into account when computing the part urls.
2641 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2643 * UI/Contacts/UIxContactsListViewContainer.m
2644 ([UIxContactsListViewContainer -additionalFolders]): take the list
2645 of subscribed folders from the new property list used for the user
2646 settings. The value of its key is SubscribedFolders for the
2647 dictionary entry named "Contacts".
2649 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2650 -canAccessContentAction]): new method to override the one from
2651 UIxFoldersActions by taking into account the fact that, this time,
2652 the clientObject is an ldap folder. Removed many method that used
2653 to be related to the handling of the user selector.
2655 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
2656 to make sure they can be removed.
2658 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
2659 populate the calendar entries based on the user settings plist.
2661 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2662 -selectForMailerAction]): restored method.
2664 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
2665 from a simplified version of the old UIxContactEditor (removed).
2667 * UI/Contacts/UIxContactsUserFolders.m: new template module for
2668 selecting users or user folders through an LDAP search of which
2669 the results are displayed as a tree.
2671 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
2672 method "onContactAdd" here since the Mailer is now the only module
2673 to use it when composing emails.
2675 * UI/WebServerResources/generic.js: added code for handling the
2676 new scheme used for describing SOGo folders, common code to handle
2677 folder addition or removal.
2679 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2680 -activateFolderAction]): new method that change the "active"
2681 settings in the folder-related fields in the user settings.
2682 ([UIxFolderActions -deactivateFolderAction]): see above.
2684 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2685 -checkRightsAction]): removed method.
2687 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2688 -updateAdditionalAddressBooksAction]): removed method.
2690 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2691 -updateCalendarsAction]): removed method.
2693 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2695 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2696 -checkRightsAction]): removed method.
2698 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2699 -canAccessContentAction]): new method designed to replace
2700 [UIxCalMainView checkRightsAction] in a more universal way.
2702 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2704 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2705 -roleOfUser:uidinContext:context]): take all the subkeys into
2706 account, not only the "personal" folder.
2708 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2709 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
2710 to the new components.
2712 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
2715 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2716 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
2717 field of the sogo_user_profile table, where the user-customizable
2718 changes will be saved.
2719 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
2720 similar to the one above, using the "settings" field where the
2721 automatic settings will be saved.
2723 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
2724 module to bind the userdefaults to a property list contained in a
2725 specified field of the sogo_user_profile table.
2726 ([AgenorUserDefaults
2727 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
2728 added a "fieldName" parameter.
2730 * UI/Common/UIxFolderActions.m: new module implementing web
2731 actions common to all GCS-based folders.
2733 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2735 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
2736 put a carriage return after the day name.
2738 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2739 -readFreeBusyAction]): restored method.
2741 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2743 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2744 -defaultAction]): remade module to redirect automatically to the
2747 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
2749 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2751 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2752 -deleteAction]): new web method to delete personal addressbook
2755 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2756 -delete]): override method to refuse the deletion of the folder if
2757 its nameInContainer is "personal".
2759 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
2760 that forwards the deletion request to the folder manager.
2762 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2764 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
2765 -zoomList]): new method that returns the list of available zoom factors.
2767 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2768 -changeStatusAction]): rewrote method.
2770 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2771 -_handleAttendeesEdition]): make sure "attendeesNames" has a
2772 length > 0 before computing the attendees. Otherwise there will be
2773 an invalid empty entry.
2774 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
2775 organizer when there are attendees and remove it when the
2776 attendees are removed.
2778 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2780 * UI/Scheduler/UIxAttendeesEditor.m): new component.
2782 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
2783 the task and appointment editors. Now a container component
2784 handling the common elements of tasks and events.
2786 * UI/Scheduler/UIxTaskEditor.m: same as below.
2788 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
2789 a subclass of UIxComponentEditor but a subcomponent of it.
2791 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
2792 toolbar can have the special value "none" to indicate there is
2793 none attached to the window.
2795 * SoObjects/Appointments/SOGoCalendarComponent.m
2796 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
2798 ([SOGoCalendarComponent -isParticipant:email]): new method.
2799 ([SOGoCalendarComponent -calendar:create]): takes one parameter
2800 "create" which is a boolean indicating whether we want to create
2801 the calendar if it does not exist.
2803 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2805 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
2806 of a table, the same way the dayly and weekly views have been for
2809 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
2811 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
2814 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
2815 property to point at the user folder
2817 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2819 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2820 -userInContext:]): returns "SOGoUser".
2822 * SoObjects/Appointments/SOGoCalendarComponent.m
2823 ([SOGoCalendarComponent -contentAsString]): overriden method that
2824 takes the privacy into account and discard the relevant fields if
2825 needed by generating a new content string and caching it.
2826 ([SOGoCalendarComponent
2827 -saveContentString:contentStringbaseVersion:baseVersion]): if the
2828 new method above has cached a content string, release it and set
2829 it to nil so that it will have to be regenerated in the case it is
2831 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
2832 discard the fields that have to be hidden when the card is
2835 * SoObjects/Appointments/SOGoAppointmentFolder.m
2836 ([SOGoAppointmentFolder
2837 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
2838 sure the cards are now handled as instances of
2839 SOGoCalendarComponent instead of SOGoContentObject so that their
2840 content string is taking the privacy classifiction into account.
2841 ([SOGoAppointmentFolder -_privacySqlString]): new method that
2842 generates a query to determine what information can be given and
2843 if the card itself has to be shown.
2845 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
2846 -getICalPersonsFromValue:selectorValue]): removed useless
2847 "isAccessRestricted" method.
2849 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
2850 -setStyle:_style]): test whether the values of orgmail and
2851 partmails are null before manipulating them, otherwise SOGo sends
2852 a "rangeOfString:" message to an NSNull, which makes it crashes.
2854 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2855 -extractQuickFieldsFromEvent:_event]): we now use the new
2856 "symbolicAccessClass" method from iCalEntity to determine the
2857 value of the "classifiction" field.
2858 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
2861 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2863 * SoObjects/Appointments/SOGoAppointmentFolder.m
2864 ([SOGoAppointmentFolder
2865 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
2866 see below, the query is adapted consequently.
2868 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2869 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
2870 renamed to "classification" and can any integer as value.
2871 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
2874 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2876 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
2877 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
2878 don't prepend anything to the class and id named. Instead, we
2879 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
2882 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2884 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2885 -rolesOfUser:logininContext:context]): if object does not exists
2886 (for example when it's being created), the current user has the
2887 same rights on it than he/she has on its parent container.
2889 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2890 -nameExistsInFolder:objectName]): methods that tests if a c_name
2891 corresponding to the name passed as parameter is present in the db
2894 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2896 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2897 -rolesForObject:objectinContext:context]): test for
2898 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
2900 * SoObjects/Appointments/SOGoCalendarComponent.m
2901 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
2902 returns the roles of the user on the container object if the event
2905 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2907 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
2908 alternativeViewer a multipart/related message is being handled.
2910 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
2913 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
2914 text/html component before text/plain.
2916 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2917 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
2918 fetching of HTML parts.
2920 * SoObjects/Appointments/SOGoCalendarComponent.m
2921 ([SOGoCalendarComponent -componentTag]): new template method that
2922 returns the vcalendar tag of the current object.
2923 ([SOGoCalendarComponent -component]): new method that returns the
2924 first object matching [self componentTag] within the current
2925 calendar object. This method replaces 'firstEventInCalendar:' as
2926 well as "firstTaskInCalendar:".
2927 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
2928 moved method from SOGoAppointmentObject.m.
2930 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2932 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
2933 module which shows each selected user's calendar in a different
2934 column instead of mixing their events together.
2936 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
2937 replaced use of [NSString stringByTrimmingWhiteSpaces] with
2938 [NSString stringByTrimmingSpaces].
2940 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
2941 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
2944 * UI/Scheduler/UIxCalDayOverview.m,
2945 UI/Scheduler/UIxCalDayChartview.m,
2946 UI/Scheduler/UIxCalDayListview.m,
2947 UI/Scheduler/UIxCalWeekOverview.m,
2948 UI/Scheduler/UIxCalWeekChartview.m,
2949 UI/Scheduler/UIxCalWeekListview.m,
2950 UI/Scheduler/UIxCalInlineMonthOverview.m,
2951 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
2953 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2955 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2956 -appendPersonalSourcesInContext:context]): release connectoin
2957 channel when everything is done.
2959 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2960 -newAbAction]): new action method to crate a new contact folder
2963 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
2964 that requests the folder manager to create a folder table with the
2965 specified type at the specified path. The type is taken from [self
2968 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2969 -folderType]): implemented.
2971 * SoObjects/Appointments/SOGoAppointmentFolder.m
2972 ([SOGoAppointmentFolder -folderType]): implemented.
2974 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2975 -appendPersonalSourcesInContext:context]): we now fetch all
2976 folders with type "Contact" that belong to the current user.
2977 ([SOGoContactFolders -newFolderWithName:name]): new method to
2978 create a new contact folder.
2980 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
2981 resulting url with [NSString+Utilities hostlessURL] instead of
2982 using NSURL. This is because the url in question sometimes has a
2983 hostname and sometimes not. "hostlessURL" ensure the hostname is
2985 ([UIxComponent -applicationPath]): same as above.
2987 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
2989 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
2990 folders before doing the one on messages.
2992 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2994 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
2995 makeObjectsPerform:withObject:withObject: for GNUstep
2998 * OGoContentStore/GNUmakefile, Protocols/common.make,
2999 SoObjects/common.make, UI/common.make: install in
3000 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
3002 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
3004 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
3007 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3009 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
3010 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
3013 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3014 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
3015 password would be accepted anyway as long as its length was > 0.
3016 This can be the case ONLY when LDAP is disabled otherwise we have
3017 a serious security issue...
3019 * SoObjects/Appointments/SOGoAppointmentObject.m
3020 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
3021 user is not an organizer nor a participant, he is declared as
3022 "Owner" if he owns the calendar the entry where the entry is
3023 contained. Other cases should not be possible.
3025 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3027 * UI/Contacts/UIxContactEditor.m: display and handle the new
3030 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3031 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
3034 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3035 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
3038 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3040 * SoObjects/Appointments/SOGoCalendarComponent.m
3041 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
3042 returns the value of ud "SOGoAppointmentSendEMailNotifications"
3044 ([SOGoCalendarComponent
3045 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
3047 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3049 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3050 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
3051 so that the mailbox cache is refreshed everytime the user presses
3052 on "get mail". I doubt a mailbox cache really is useful in general
3055 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3057 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3058 -userInContext:]): if the lookup is on "freebusy.ifb" and the
3059 username is "anonymous" the user is automatically set to
3062 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3064 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3065 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
3066 user with password "freebusy".
3068 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
3069 -contentAsString]): the default timerange is now 14 days before
3070 currentday and 1 month after.
3072 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3074 * SoObjects/Appointments/SOGoAppointmentFolder.m
3075 ([SOGoAppointmentFolder
3076 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
3077 escape the record string in a way suitable with XML encoding.
3079 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3081 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
3082 calendar view would not be updated properly.
3084 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3086 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3087 -newStartDate]): fix the handling of the component start date
3088 depending on the "hm" and the "day" parameters.
3090 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3091 -roleOfUser:uidinContext:context]): set role of current user to
3092 "Assistant" if the object that is accessed is "freebusy.ifb".
3094 * SoObjects/Appointments/SOGoAppointmentFolder.m
3095 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
3096 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
3097 ([SOGoAppointmentFolder
3098 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
3099 lookupCalendarFolderForUID: method, which doesn't do security
3102 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3104 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
3105 accessor that returns the comma-separated list of users with role
3107 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
3108 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
3109 "checkedUsers". Instead, each user is either classified in the
3110 list of assistants or the list of delegates.
3112 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3114 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
3115 -composeAction]): method imported from removed container modules.
3116 ([UIxMailMainFrame -mailFolderName]): method imported from removed
3119 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
3120 for wrapping UIxMailView with the "popupview" action.
3122 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
3123 since its the component that displays the same splash screen than
3124 the one in Thunderbird/Icedove.
3126 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
3127 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
3128 UI/MailerUI/UIxMailListViewContainer.[hm],
3129 UI/MailerUI/UIxMailViewContainer.[hm]: removed
3131 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3133 * UI/WebServerResources/HTMLElement.js: replaced the functional
3134 selectNode() and deselectNode() functions with select() and
3135 deselect() methods of HTMLElement.
3137 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
3138 events are initialized from here now instead of in the HTML code.
3140 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3141 -checkRightsAction]): new method similar to the one with the same
3142 name in UIxCalMainView.m.
3144 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
3145 code to handle the publishing of freebusy information.
3147 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3149 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3150 -checkRightsAction]): new action method that returns a
3151 comma-separated list of boolean values matching the right of the
3152 current user to "view" (as a permission) each foreign calendar
3153 stored in his preferences.
3155 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
3156 new method that sets a customOwner, which can be returned with
3157 ownerInContext it set.
3159 * SoObjects/Appointments/SOGoAppointmentFolder.m
3160 ([SOGoAppointmentFolder
3161 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
3163 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3165 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
3166 below, but for the Contacts and Calendar collections.
3168 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
3169 new acl facilities method from sope-gdl/GCSFolder.m.
3171 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3172 -roleOfUser:uidinContext:context]): new method that returns
3173 SOGoRole_Assistant when the user is an assistant or a delegate on
3174 the "personal" ab object. This is so that setting roles on the
3175 SOGoContactFolders object is not required.
3177 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3179 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
3181 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
3182 to the handling of the user selection for the acls.
3184 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
3185 values from SoPermissions with ones specific to SOGo.
3187 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
3188 handles the storage for the acls.
3190 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
3191 class for SOGoAppointmentObject and SOGoTaskObject.
3193 * UI/Common/UIxAclEditor.[hm]: new component that provides a
3194 general editor for folder acls.
3196 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
3198 ([NSString -davMethodToObjC]): method that returns the method name
3199 for a DAV property implementation.
3201 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
3203 ([NSArray -stringsWithFormat:format]): new method that returns
3204 formatted occurences of the strings stored in the array.
3206 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
3207 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
3208 subclass module of SoWebDAVValue that supports collections of
3209 properties of the same type.
3211 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3213 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3214 -lookupFolder:ofClassNamed:inContext:]): added the ability to
3215 configure the name of the SOGoDraftFolders with the ud var
3216 "SOGoDraftsFolderName".
3218 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3220 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
3221 -userTimeZone:username]): new method that returns the timezone for
3222 the specified user depending on his preferences and the server
3225 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3226 -stringForData:partInfo:]): take the encoding into account and
3227 translate the text to "normal" before processing the charset data.
3229 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3231 * UI/WebServerResources/generic.js: the progress indicator is on
3232 when loading the page so we turn it off, and we turn it back on
3233 whenever we switch to another module...
3235 * UI/WebServerResources/SchedulerUI.js: make sure the day view
3236 synchronization mechanism works everywhere.
3238 * UI/WebServerResources/generic.js: the log window is not only
3239 visible when UIxDebugEnabled is set.
3241 * UI/WebServerResources/SchedulerUI.js: the month overview's day
3242 cells are now initialized with the DOM event interface methods
3243 instead of with html attributes.
3245 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
3246 headers (should be made configurable at some point)...
3248 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
3249 "not null" constraint on startdate, enddate, isopaque,
3250 participants and partmails.
3252 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3254 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3255 -hoursToDisplay]): prevent a crash by retaining the
3256 "hoursToDisplay" array after it's created.
3257 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
3258 clickable hours DIV.
3260 * UI/WebServerResources/SchedulerUI.js: made the event
3261 participation status modification asynchronous, which also fixes a
3262 bug where the window would sometimes close before the accept or
3263 decline action was completed. Also, adapted the event handling
3264 related to the days or weeks view with the new DIV-based layout.
3266 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
3268 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
3269 DIV-based presentation of the days and weeks.
3271 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
3273 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
3274 might return an exception so we have to handle it if we don't
3277 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3279 * UI/WebServerResources/SchedulerUI.js: updated the list
3280 initialization code to use the new event management scheme, adding
3281 what was missing to be able to delete events and tasks again.
3283 * UI/WebServerResources/MailerUI.js: added code to activate the
3284 "Get mails" button. Fixed a bug which prevented messages to be
3287 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
3288 navigation and focus handling of INPUTs.
3290 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3292 * UI/WebServerResources/MailerUI.js: added code to handle the
3293 possible drag and drop events to manager in the mail module.
3294 Moving messages, opening parent folders, ...
3296 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
3297 the drag and drop manager as well as the interface to HTMLElement
3298 to trigger drag and drop events.
3300 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
3301 action to move the current message to the mailbox named after the
3302 value of parameter "tofolder".
3304 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3305 -moveToFolderNamed:folderNameinContext:]): new method base on
3308 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3310 * UI/WebServerResources/generic.js: added and activated many
3311 "load" handlers to configure generic widgets used across the
3312 modules. More events are now handled in a DOM-fashion way instead
3313 of by setting the relative attributes in the templates.
3315 * UI/Templates/UIxSortableTableHeader.wox: all the events are
3316 declared from the javascript DOM onload handlers.
3318 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
3321 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
3322 declared from the javascript DOM onload handlers.
3324 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
3325 we want everything to be separated from each other, as much as
3328 * UI/WebServerResources/SOGoDragHandles.js: new module containing
3329 the "SOGoDragHandlesInterface", implementing methods that can be
3330 attributed to DIV so that they can be used as drag handles.
3332 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3333 -asQPSubjectString]): initialize the tmp strings with '0' to make
3334 sure they don't contain garbage.
3336 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3338 * UI/WebServerResources/MailerUI.js: register the messageList
3339 table as a dragging source and the leaf of the navigation tree as
3340 dnd destinations to the DNDManager.
3342 * UI/WebServerResources/generic.js: initialize tabs from the
3343 "unload" event listener that is added programmatically instead of
3344 from the template... Also, added the new DNDManager object.
3346 * UI/WebServerResources/HTMLTableElement.js: added code to
3347 simulate XUL drag n drop events. This code will possibly be moved
3348 to HTMLElement.js instead later...
3350 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3351 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
3354 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3355 -_qualifierForFilter:filter]): only search records which starts
3356 with the specified pattern.
3358 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3360 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3361 -asQPSubjectString]): new method that returns the special QP
3362 string with its qp declaration for email subjects.
3363 ([SOGoDraftObject -bodyPartForText])
3364 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
3365 double-encode data in UTF-8.
3367 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3368 -newStartDate]): new method to determine the start date depending
3369 on the URL parameters, the current day and the current time.
3370 ([UIxComponentEditor -toolbar]): new method to determine the
3371 filename of the toolbar that should be drawn depending on the
3372 ownership and the list of attendees of the task/event wrt to the
3375 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3376 -setDayStartHour:aStartHour]): adjust the minutes to the next
3377 quarter of hour, if not already set to a quarter.
3379 * UI/WebServerResources/UIxAppointmentEditor.js,
3380 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
3383 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3385 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3386 -loadValuesFromComponent:component]): handles access class
3387 (privacy) and status.
3389 * UI/Contacts/UIxContactsListViewContainer.m
3390 ([UIxContactsListViewContainer -additionalFolders]): return nil if
3391 [self additionalAddressBooks] returns an empty string.
3393 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3395 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
3396 rangesOf7Days]): enhanced and debugged algorithm to feed the array
3397 with slices where the first day is still in the requested month.
3399 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
3402 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
3403 of events in the day boxes of the calendar's monthly view.
3405 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
3406 -davContentType]): declare "text/calendar".
3408 * SoObjects/Appointments/SOGoAppointmentObject.m
3409 ([SOGoAppointmentObject -davContentType]): declare
3412 * SoObjects/Appointments/SOGoAppointmentFolder.m
3413 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
3414 HTTP methods are handled by SOPE and requires nil to be returned,
3415 this method now invokes the new
3416 "requestNamedIsHandledLater:inContext:" method to check that.
3417 ([SOGoAppointmentFolder
3418 -requestNamedIsHandledLater:nameinContext:context]): new methods
3419 that returns "YES" only for the "OPTIONS" http method (for now...).
3420 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
3421 overloaded method to append the "access-control" and
3422 "calendar-access" DAV abilities to the initial declaration.
3424 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
3425 imitate the look of Sunbird/Lightning's monthly view.
3427 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
3428 UIxCalMonthViewOld.[hm].
3430 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3432 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
3433 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
3435 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
3436 returns an image name based on the participation status of the
3439 * UI/WebServerResources/SchedulerUI.js: same strip down as for
3442 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
3443 ([UIxContactsListViewContainer -additionalFolders])
3444 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
3445 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
3446 methods to handle the external addressbooks a user has subscribed
3447 too, by retriving them from his preferences.
3449 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3450 -updateAdditionalAddressBooksAction]): new method that updates the
3451 user settings with the list of addressbook he has subscribed to.
3453 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
3454 module for the address book selector.
3456 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
3457 a toolbar with two buttons ("add" and "remove") to manage the
3458 additional addressbooks a user might subscribe to.
3460 * UI/WebServerResources/ContactsUI.js: added code to handle
3461 "external addressbooks" from the Javascript point-of-view, by
3462 extending existing methods and adding code for the "add ab" and
3463 "remove ab" buttons.
3465 * UI/WebServerResources/generic.js: moved extensions methods to
3466 DOM elements to separate files for better clarity.
3468 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
3469 new method that returns "pageContent" as class, but also "popup"
3470 for the DIV where the page content lies, so that we can manipulate
3471 the content of popup's with CSS identifiers.
3473 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3475 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3476 -displayStyle]): new method that returns a string containing the
3477 css style relative to the current appointment cell. This code is
3478 currently inactive but might be reused later.
3480 * UI/WebServerResources/SchedulerUI.js: added code to handle the
3481 display of the selected day (the day pointed by the mouse, or the
3482 current day when changing the view).
3484 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3485 -dayCellClasses]): new method that returns a string containing the
3486 css classes applicable to the current cell, depending on the
3487 position of the day in the week, the day of today and the
3490 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
3491 -currentContactAptBorder]): new method that returns the
3492 appropriate border color for the specified user.
3494 * SoObjects/Appointments/SOGoAppointmentObject.m
3495 ([SOGoAppointmentObject
3496 -saveContentString:contentStringbaseVersion:baseVersion]):
3497 overloaded method that parse new events and detects if they have
3498 an organizer or not. If they are new and have no organizer set
3499 (Sunbird/Lightning...), the owner of the event is set as
3502 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
3503 category that provides facility methods and interfaces to the
3506 * SoObjects/Contacts/product.plist: give full access to ANY
3507 authenticated user, not just the owner (to every objects...).
3509 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3511 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
3512 every replica widgets are declared as such to their master
3513 counterpart. Take the days into account when displaying the time
3514 range taken by the appointment.
3516 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3517 -getICalPersonsFromValue:selectorValue]): method taken from
3518 UIxFreeBusyUserSelector, that is shared both by
3519 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
3521 * SoObjects/Appointments/SOGoAppointmentFolder.m
3522 ([SOGoAppointmentFolder
3523 -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.
3525 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
3526 derived and taken as a subset of UIxFreeBusyUserSelector that
3527 implements the table part of the FreeBusy view. Most of the
3528 methods of UIxFreeBusyUserSelector relative to that table were
3529 moved into UIxFreeBusyUserSelectorTable, which can also be used as
3530 a standalone view for AJAX operations.
3532 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3534 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3535 -vCard]): change reverted.
3537 * UI/Contacts/UIxContactEditor.m: check whether the client contact
3538 folder has selector "globallyUniqueObjectId" before calling that
3541 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3542 -vCard]): the "setVClass" NGVCard method really is "setClass"
3545 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3546 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
3547 request the "streetAddress" instead of the "streetaddress".
3548 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
3549 mails that *contain*, and not just *start with* the search
3552 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3553 -vCard]): mark address returned from LDAP as the work address.
3555 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
3556 span covered with the anchor, not only the textual information
3559 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
3560 argument (event or task) to newEvent in the appointmentListMenu.
3561 Make the appointmentsListView display the appointmentsListMenu.
3563 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
3564 12 to 50 before displaying "...".
3565 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
3566 if its length > 0, whether location itself is nil or not...
3567 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
3568 of which the length > 0.
3570 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3572 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
3573 french and ISO dates.
3575 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
3576 from UIxContactSelector to handle contact lists (current and
3577 additional contacts).
3579 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3580 -_freeBusyAsText]): added handling of an "additional"-named query
3581 parameter that describe the number of additional days after
3582 enddate that should be returned.
3584 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3585 -_responseForResults:results]): give priority to results with
3586 "c_uid" fields. If none returned, use the first contact received.
3588 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3589 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
3590 2 and "CANCELLED" to 0.
3592 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3594 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
3595 of start and end dates to short string dates.
3597 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3598 -readFreeBusyAction]): new method that returns an array of numbers
3599 corresponding to the state in the freebusy of each "quarter of an
3600 hour" between the "sday" and "eday" date parameters passed in the
3601 url. This permits to handle the display of the freebusy with Ajax
3603 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
3604 since the free busy displays 2 days ahead.
3606 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3607 -contactSearchAction]): new action that returns the uid and the
3608 username + email of the user whose name contain the value of the
3609 "search" url parameter.
3611 * SoObjects/Appointments/SOGoAppointmentFolder.m
3612 ([SOGoAppointmentFolder
3613 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
3614 useful for the computing of the status of the freebusy.
3616 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
3617 -init]): new component that incarnates a user selector for events
3618 inspired by the new one found in Thunderbird Lightning.
3620 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3622 * UI/WebServerResources/generic.js: added code to enable or
3623 disable anchor visually (following our internal algorithm).
3625 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
3626 added new "url" ivar with its classic accessors.
3627 ([UIxComponentEditor -urlButtonClasses]): new method that returns
3628 the class strings for the url button on the appointment/task
3629 editor (depending on the validity of the url).
3631 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
3632 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
3633 the template to match the Lightning's new task/appointment editor.
3635 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
3637 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
3639 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3641 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3642 ([SOGoContactLDAPFolder
3643 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
3645 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
3646 iCalEntityObject instances instead of just iCalEvent's.
3648 * SoObjects/Appointments/SOGoAppointmentFolder.m
3649 ([SOGoAppointmentFolder
3650 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
3652 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
3653 bad way of handling ownership that way.
3655 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3656 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
3657 on "cn", just like Mozilla.
3659 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3661 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
3662 "to" should be retained, otherwise it will be autoreleased and a
3665 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3666 -writeAction]): updated method to fetch the card before initing
3669 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3670 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
3673 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3674 -iCalStringTemplate]): start and due date are now optional.
3676 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3677 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
3678 appropriate accessors to be settable through the templates.
3680 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
3681 new "isDisabled" ivar with appropriate accessors to be
3682 settable through the templates.
3684 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3685 -availableCalendars]): new method that list the calendars to which
3686 the user has subscribed.
3687 ([UIxComponentEditor -componentOwner]): returns the owner of the
3690 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3691 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
3692 quickentries to null whenever each or all of them are null, by
3693 providing an impossible timestamp from with NSNotFound as value.
3695 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3697 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
3698 that handles the creation of new fields with the new APIs and the
3699 new node structure on the page.
3701 * UI/Scheduler/UIxAppointmentEditor.m,
3702 UI/Scheduler/UIxTaskEditor.m:
3703 refactored to user UIxComponentEditor as parent class.
3705 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
3706 containing the methods common to the UIxTaskEditor and the
3707 UIxAppointmentEditor.
3709 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3711 * SoObjects/Appointments/SOGoAppointmentFolder.m
3712 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
3713 the handling of time-ranges.
3715 * UI/WebServerResources/ContactsUI.js: specify a notification type as
3716 parameters when onConfirmContactSelection in invoked.
3718 * UI/WebServerResources/generic.js: specify a notification type as
3719 parameters when onContactRemove in invoked.
3721 * UI/WebServerResources/SchedulerUI.js: when the user deselects
3722 all calendars, select his entry.
3724 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3726 * UI/WebServerResources/SchedulerUI.js: edit and delete events
3727 with their owner-relative urls. Generate a correct entry in the
3728 css color table when a user is added to the calendars list. Put
3729 the same color next to the user id.
3731 * UI/WebServerResources/generic.js: implemented some new helper
3734 * SoObjects/Appointments/SOGoAppointmentFolder.m
3735 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
3736 entries if their owner is not the current user.
3738 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3739 -displayClasses]): return the correct class for the current event
3740 representation depending on its owner.
3742 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
3743 and associate a color for each user login depending on its
3744 position in the list.
3746 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
3747 -currentRowCSSClass]): return the correct class for the current
3748 row depending on the owner of the event.
3750 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
3751 -setColors:colors]): new method to associate a color table with
3752 each user in the list.
3754 * SoObjects/Appointments/SOGoAppointmentFolder.m
3755 ([SOGoAppointmentFolder
3756 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
3758 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
3759 NSObject to associate an instance with a user.
3761 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3763 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
3766 * UI/WebServerResources/ContactsUI.js: added handling of
3767 notification of changes to contact selectors.
3769 * UI/WebServerResources/generic.js: added handling of notification
3770 of changes to contact selectors.
3772 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3773 -updateCalendarsAction]): proxy method to update the user
3774 preference table with the new selected calendar uids.
3776 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3777 -calendarsContactsAction]): new method.
3779 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
3780 ([UIxContactSelector -setHasCheckBoxes:aBool])
3781 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
3782 permit the drawing of checkboxes instead of card icons.
3784 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
3785 wrap a selector the the "Calendars" tab.
3787 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
3788 new user calendar selector.
3790 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3792 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
3793 may cover hour 0 to hour 23.
3795 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3796 -iCalStringFromQueryParameter:format:]): dates explicitly set to
3799 * UI/WebServerResources/SchedulerUI.js: manage both lists of
3800 objects wrt to the toolbar actions.
3802 * UI/WebServerResources/generic.js: added code to the "String"
3803 class to decode number-encoded char entities.
3805 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3806 -batchDeleteAction]): new method to delete selected entries in the
3809 * SoObjects/Appointments/SOGoAppointmentFolder.m
3810 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
3811 that delete identified entries in batch.
3813 * UI/SOGoUI/UIxComponent.m ([UIxComponent
3814 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
3816 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
3817 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3818 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
3819 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3821 return a UIxJSClose component if everything went fine.
3823 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
3826 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
3827 UIxAppointmentEditor.m.
3829 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
3830 a very light page with javascript code to close a window, by
3831 calling a method on the opener if specified. This component is
3832 designed to work as a response to form postings.
3834 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3836 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
3837 SOGoAppointmentObject adapted for the handling of tasks.
3839 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
3840 extracted from SOGoAppointmentObject.
3842 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3843 -saveUrl]): returns the url needed to POST the new form to.
3844 redirect the user to <aptid>/editAsAppointment instead of /edit,
3845 so that SOGoAppointmentFolder can return the correct object type.
3847 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
3848 -compareAptsAscending:_other]): accept empty start or end dates.
3850 * SoObjects/Appointments/SOGoAppointmentFolder.m
3851 ([SOGoAppointmentFolder
3852 -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.
3853 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
3854 components of type "vtodo" as well as "vevent".
3855 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
3856 url specified ends with AsTask or AsAppointment, returns the
3857 an object of the appropriate class, otherwise deduce it from its
3858 content if the HTTP method is "PUT", otherwise read its type from
3861 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3862 -extractQuickFieldsFromTodo:_task]): extract quick fields from
3865 * UI/Scheduler/UIxCalView.m ([UIxCalView
3866 -fetchCoreAppointmentsInfos]): replacement methods for
3867 fetchCoreInfos but by retrieving object with component "vevent".
3868 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
3871 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
3872 UIxCalAptListView adapted for the handling of tasks.
3874 * UI/Scheduler/UIxTaskProposal.[hm],
3875 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
3876 clones of the UIxAppointment* classes for the handling of tasks.
3878 * UI/WebServerResources/UIxTaskEditor.js: clone of
3879 UIxAppointmentEditor adapted for the handling of tasks.
3881 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
3882 Scroll the daily view to the appropriate hour when an appointment
3883 is selected in the appointments list.
3885 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3887 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3888 -setDayStartHour:aStartHour]): specifies the user timezone on the
3891 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
3894 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
3895 ([NSCalendarDate -driftedDate]): methods made useless by a better
3896 comprehension of the NSTimeZone API...
3898 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3900 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
3901 new methods from the NSCalendarDate methods.
3903 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
3904 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
3906 +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).
3907 ([NSCalendarDate -adjustedDate]): this method returns another
3908 instance set to the correct hour after the original date was set
3909 from a non-GMT timezone. This date can be used for storage.
3910 ([NSCalendarDate -driftedDate]): this method does exactly the
3911 opposite of -adjutedDate, that is, it enables the method
3912 hourOfDay, minuteOfHour etc... to return the values according to
3913 the original date's timezone. This date CANNOT be used for storage.
3915 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
3916 -shortDateString]): new method that will return a "short date
3917 string" (yyyymmdd) from a calendar date object.
3919 * UI/SOGoUI/UIxComponent.m ([UIxComponent
3920 -_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.
3922 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
3923 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
3925 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3927 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
3928 view of the day at the height of hour 8:00.
3930 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
3931 ([UIxCalView -dayEndHour]): returns 24.
3933 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
3934 ([UIxContactFoldersView -newAction]): invoke
3935 _selectActionForApplication: on self with the proper attribute too.
3937 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
3938 we now use the action mechanism in UIxContactsListView to keep the
3939 same view for the contact selectors and the regular contact view.
3941 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
3942 UIxContactsListViewContainerBase.[hm]
3944 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
3946 * UI/WebServerResources/generic.js: generalized emailstring
3947 handling functions. Generalized address book access functions.
3949 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
3950 -isPopup]): return YES if the "popup" query parameter is set.
3952 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3953 -defaultAction]): keep the url parameters when redirecting.
3954 ([UIxContactFoldersView -selectForSchedulerAction])
3955 ([UIxContactFoldersView -selectForMailerAction]): new action
3956 methods for the /scheduler-contacts and /mailer-contacts invocations.
3958 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
3959 newly available NSString+URL category.
3961 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
3962 -asURLParameters]): handle dictionary entries which could be
3963 instances of NSArray rather than NSString.
3965 * SoObjects/SOGo/NSString+URL.m ([NSString
3966 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
3967 ([NSString -urlWithoutParameters]): new method that returns the
3968 url without its parameters.
3970 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
3972 * SoObjects/SOGo/NSDictionary+URL.[hm],
3973 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
3975 * UI/WebServerResources/UIxMailEditor.js: add support for
3976 additions of different types (to, cc, bcc) of recipients from the
3979 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
3982 * UI/Contacts/UIxContactsMailerSelection.m,
3983 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
3984 UI/Contacts/UIxContactsSelectionView.m to provide a different set
3985 of widgets depending on the application invoking the contact list.
3987 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3989 * UI/WebServerResources/ContactsUI.js: hide the current contact
3990 whenever the user changes of contact folder.
3992 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
3993 now provided by the template when loading the page.
3995 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3996 -iCalPersonWithUid:uid]): new method taken from removed module
3999 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4001 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
4002 -categoriesAsString]): same as below.
4004 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
4005 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
4007 * SoObjects/Appointments/SOGoAppointmentObject.m
4008 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
4009 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
4012 * SoObjects/Appointments/SOGoAppointmentFolder.m
4013 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
4014 hackish test to detect whether the request concernes VEVENT's or
4015 anything else. Return events only in the former case.
4016 ([SOGoAppointmentFolder
4017 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
4018 c_name quickfield so that the calendar list can identify the
4019 appointments with their complete "filename".
4021 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
4022 groupsOfClass:fromSource: to parse the given vcalendar.
4024 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
4026 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
4028 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
4031 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
4033 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4035 * SoObjects/Appointments/SOGoAppointmentFolder.m
4036 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
4037 sensitive to the CalDAV method names.
4038 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
4039 "calendar-query" CalDAV method name.
4041 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
4042 code coming originally from MailerUI.js.
4044 * UI/WebServerResources/UIxContactEditor.js: imitate the
4045 Thunderbird address book by completing the display name with the
4046 content of the first and last name fields, until the display name
4047 is modified manually.
4049 * UI/WebServerResources/generic.js: added a "trim" method to the
4052 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4053 -displayName]): new method that returns the display name from "cn"
4054 or from the "displayName" key if found.
4056 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4057 -initSnapshot]): check if "[card n]" returns anything to avoid a
4060 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
4061 that returns an unparsed doctype definition for the pages.
4063 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4064 -vCard]): set the card's fn to attribute "displayName" if found
4067 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4069 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4070 -vCard]): handle the "streetAddress" and "l" fields.
4072 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
4073 header fields by converting the tables to DIVs and SPANs.
4075 * UI/WebServerResources/generic.css: attempted unification of font
4076 families and size across all the elements. changed the
4077 logConsole's "position" from "fixed" to "absolute" to avoid
4080 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4082 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
4083 empty the contact view when the current contact is being deleted.
4085 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
4086 parse the email field and provide the address full name if found
4087 as the "contactFN" parameter.
4089 * UI/WebServerResources/generic.js (openMailTo): do not give a
4090 name to the opened window so that serveral ones can be opened at
4093 * UI/MailPartViewers/UIxMailPartTextViewer.m
4094 ([UIxMailPartTextViewer -flatContentAsString]): override method by
4095 replacing carriage returns with "<br />" in the result string from
4096 super's implementation.
4098 * UI/Contacts/UIxContactView.m ([UIxContactView
4099 -_urlOfType:aType]): don't manage non-mailto urls through
4100 javascript, let the user decide what's best for him.
4102 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4103 -newAction]): transfer all the query parameters by using the
4104 "asURLParameters"'s result string from [self queryParameters].
4106 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4107 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
4108 query parameters and put their values (if any) into the snapshot.
4110 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
4111 carriage-returns to "<br />".
4112 ([UIxContactView -workCompany]): explicitly initialize company to
4113 nil if org is nil or empty.
4115 * UI/WebServerResources/UIxContactEditor.js: updated validation
4116 code after we added and renamed some fields.
4118 * UI/WebServerResources/ContactsUI.js: added code to cache contact
4119 cards and to handle card updates.
4121 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4123 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
4124 test the length of the returned string since they will never be
4127 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
4128 return self if the process went successful, returns an exception
4129 otherwise (and only otherwise...).
4131 * OGoContentStore/OCSContactFieldExtractor.m
4132 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
4133 adapted method to the new VCard api. Since the cards are stored in
4134 vcard format, we no longer deal with a dictionary but with a
4137 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4139 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
4140 return a string with a "mailto" url.
4141 ([UIxContactView -_urlOfType:aType]): generic method to return a
4142 url string with a html anchor pointing to it.
4144 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
4145 since subclass "UIxContactEditor" did nothing. Implemented code to
4146 display and modify the values parsed from the vcards, displayed in
4147 a way similar to the Thunderbird addressbook.
4149 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4150 -save]): new dummy method.
4152 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4153 -save]): made method void.
4155 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4157 * UI/Contacts/UIxContactView.m: added many wrapper methods to
4158 display blocks of data à la Thunderbird Addressbook. If data is
4159 available, those wrappers (around the NGVCard methods) will
4160 enclose the results in a proper HTML output with the correct label
4161 (if present), otherwise it will return an empty string.
4162 ([UIxContactView -vcardAction]): new action to return the contact
4163 as text/vcard (for exporting).
4165 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4166 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
4168 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4169 -vCard]): create a new NGVCard instance when no data is available
4171 ([SOGoContactGCSEntry -save]): save the vCard using the new
4172 "versitString" API method/message.
4174 * UI/Contacts/UIxContactView.h: separated interface from
4177 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
4178 views and display them beneath the list.
4180 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4182 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
4183 the timezone even when it's the server timezone.
4185 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4186 -privateContacts:inContext:]): no long configure the calendar
4187 object with the user's timezone since it's now accessible
4188 application-wide throught the SOGoObject methods.
4190 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
4191 method. Removed the "backendTimeZone" method.
4193 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
4194 instead of SoComponent.
4196 * SoObjects/Appointments/SOGoAppointmentObject.m:
4197 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
4198 [self serverTimeZone] instead of "EST" (which was removed).
4200 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
4201 "timeZone" ivar and its accessors.
4203 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
4204 centralized method returing the timezone configured in the
4205 userdefaults db or "Canada/Eastern" if missing.
4206 ([SOGoObject -userTimeZone]): new centralized method returing the
4207 timezone of the current user or the server timezone if missing
4208 from the user configuration table.
4210 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4212 * UI/WebServerResources/SchedulerUI.js: implemented caching of
4215 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
4216 return a path based on the object's context instead of the first
4217 level in SOGo's object hierarchy...
4219 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4221 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
4224 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
4225 timezone ([self viewTimeZone]) to the WEMonthOverview component to
4226 avoid a confusion with the days.
4228 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
4231 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
4232 imitate Sunbird's synchronization between the 3 visible views.
4234 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
4235 sure the numbers in dateString are formatted so as to take 4 chars
4236 for the year and 2 for the day and the month, otherwise
4237 NSCalendarDate will return a nil date.
4238 ([UIxComponent -applicationPath]): return a path based on the
4239 object's context instead of the second level in SOGo's object
4242 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4244 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
4245 user's timezone abbreviation to the date string passed as parameter to
4246 NSCalendarDate to generate an accurate date instance. Do the same
4247 when no date is specified and today is chosen.
4249 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
4250 form's time values to integers before comparing them.
4252 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
4253 ([UIxCalAptListView -currentEndTime]): initialize the resulting
4254 dates timezone with [self viewTimeZone].
4256 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
4257 "viewTimeZone" ivar destined to hold an instance of the user's
4259 ([UIxComponent -viewTimeZone]): take the timezone from the user's
4262 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4264 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
4265 rearranged the layout.
4267 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
4268 manage showing and hiding appointment details.
4270 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4271 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
4272 timezone by taking the current user's timezone setting.
4274 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
4276 * SoObjects/Appointments/SOGoAppointmentObject.m
4277 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
4278 set default timezone to EST, although this code should be
4279 rewritten to handle a system and a user default value.
4281 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4282 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
4283 take the values from the hour and minute INPUTs when data is
4284 POSTed since we no longer use the UIxTimeSelector component.
4285 ([UIxTimeDateControl -selectableHours])
4286 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
4287 template SELECTs to display reasonable and acceptable values
4288 instead of all the possibilities.
4290 * UI/WebServerResources/generic.js: adapted code for the new
4291 implementation of the UIxContactSelector component (added a
4292 "remove" button, removed the previous INPUT and replaced them with
4293 links of class "button").
4295 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
4296 UIxTimeDateControl.m.
4298 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
4299 ([UIxCalDayTable -currentAppointmentHour]): new methods that
4300 returns correctly formatted values used as attributes for JS code.
4302 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4303 -initialContactsAsString]): renamed implementation of
4304 initialParticipants.
4305 ([UIxContactSelector -currentContactId])
4306 ([UIxContactSelector -currentContactName]): new methods used when
4307 listing the initial contacts in the widget. Currently, both return
4308 the person's cn but the latter should ultimately return a user
4311 * UI/Contacts/UIxContactSelector.h: separated interface from
4312 UIxContactSelector.m.
4314 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
4315 all javascript code is now put in Scheduler.js/generic.js.
4317 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
4318 moved into NSCalendarDate+Scheduler instead.
4320 * SoObjects/Appointments/SOGoAppointmentFolder.m
4321 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
4322 configure the timezone from SOGoUserFolder when the instance is
4324 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
4325 the value of the new "timezone" ivar.
4327 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4329 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
4330 the date selector in the first page and the container of the
4331 future calendar selector in the second page.
4333 * UI/WebServerResources/generic.js: added code for handling tabbed
4336 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
4337 returns the bundle name associated to the current running product.
4339 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4341 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
4342 exception by invoking a timeout on the opener rather than invoking
4343 the list refresh method.
4345 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
4348 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
4349 ([UIxCalWeekView -prevWeekQueryParameters])
4350 ([UIxCalWeekView -nextWeekQueryParameters])
4351 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
4352 that return the dates relatively to the current day.
4353 ([UIxCalWeekView -lastWeekName])
4354 ([UIxCalWeekView -currentWeekName])
4355 ([UIxCalWeekView -nextWeekName])
4356 ([UIxCalWeekView -weekAfterNextWeekName])
4357 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
4358 methods that returns the label for the corresponding weeks.
4360 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
4361 used by UIxCalDayView and UIxCalWeekView to display the events
4362 occuring in one or more days.
4364 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4366 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
4367 entries in the new "monthMenu" and "yearMenu".
4369 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
4370 method to return the current day as a string formatted depending
4371 on the current locale.
4373 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4374 ([UIxCalAptListView -endDate]): "today" is now the default filter
4375 for displayed events.
4376 ([UIxCalAptListView -currentSerialDay]): new method returning the
4377 date of the current enumerated appointment in serial form
4380 * UI/WebServerResources/SchedulerUI.js: added code to select the
4381 relevant day when an appointment is selected. Added code to popup
4382 a month and a year menu whenever the header entries are clicked in
4383 the calendar widget.
4385 * UI/WebServerResources/generic.js: made addClassName and
4386 removeClassName methods of HTMLElement.
4388 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4390 * UI/WebServerResources/MailerUI.js: fixed the contact creation
4391 from email addresses.
4393 * UI/WebServerResources/generic.js: centralized the search-related
4394 functions here since the same code was used across the 3
4397 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4398 ([UIxCalAptListView -endDate]): return the required dates needed
4399 depending on the value given to the "filterpopup" url parameter.
4401 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
4402 code by invoking UIxComponent's labelForKey:.
4404 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
4405 [self pageResourceManager] instead of [self resourceManager].
4407 * UI/Contacts/UIxContactEditorBase.m: invokes
4408 globallyUniqueObjectId on the clientobject's class instead of the
4409 hardcoded "SOGoFolder".
4411 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4412 -newAction]): redirect the "new" action to the personal (default)
4415 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
4416 +objectWithName:inContainer:]): new constructor.
4418 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4419 -lookupContactWithId:recordId]): always create a contact object,
4420 even if it does not exist.
4422 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4424 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
4425 component that lays out the different components of SOGoCalendar.
4426 Only serves as an Objective-C counterpart to its xml template.
4428 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
4431 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
4432 display a widget to handle the information displayed in the
4433 appointments list. Not currently used, lacks implementation.
4435 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
4436 display a calendar as a dynamic widget from where one can select
4437 the current visible day.
4439 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
4440 extracted from UIxCalInlineMonthOverview.m.
4442 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
4443 calendarPageURL methods. The javascript code is handled by .js
4444 files as much as possible...
4446 * UI/WebServerResources/ContactsUI.js,
4447 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
4450 * UI/WebServerResources/SchedulerUI.js: implemented functions to
4451 handle the new widgets. XmlHTTPRequest code taken from
4454 * UI/WebServerResources/generic.js: put some functions related to
4455 element selections as methods to HTMLElement and HTMLTableElement.
4457 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
4458 display the list of appointments (embodies the code-size of
4459 UIxCalAptListView; answers to the "aptlist" method).
4461 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4463 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
4464 -correctURLAction]): new short action method replacing the method
4465 below by taking far less code.
4467 * SoObjects/Appointments/SOGoAppointmentFolder.m
4468 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
4469 with an action in the view-related code.
4471 * UI/Scheduler/UIxAppointmentEditor.m: invoke
4472 "stringByEscapingHTMLString" on the resulting value to avoid
4473 issues with accented characters.
4474 ([-jsCode]): removed method since the javascript code was merged
4475 into SchedulerUI.js.
4477 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4479 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
4480 new class method that returns an iCalPerson based on the UID given
4483 * UI/Contacts/UIxContactsListViewContainerBase.m:
4484 UIxContactsListViewContainer renamed to serve as a base class for
4485 the contact lists in both the contact editor and the contact
4488 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4489 ([SOGoContactLDAPFolder
4490 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
4491 setUserIdentifier:setRootDN:]): an LDAP field specifying the
4492 loginname of the users can now be specified.
4494 * UI/WebServerResources/generic.js: added code to manage contact
4495 lists through the new implementation of the UIxContactSelector.
4497 * UI/Templates: put the templates related to SchedulerUI in its
4500 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4501 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
4502 entry for "uid" with the field name representing the login name of
4503 the user in the corresponding LDAP branch.
4505 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4507 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4508 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
4509 request is a PUT, always create an entry, even if we're not sure
4512 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4514 * UI/WebServerResources/ContactsUI.js: implemented live-search.
4516 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
4517 -appendSystemSourcesInContext:context]): populated method with
4518 code that creates entries mapped to instances SOGoContactFolder,
4519 based on the configuration found in the NSUserDefaults under the
4520 key "SOGoLDAPAddressBooks".
4521 ([SOGoContactFolders
4522 -lookupName:nameinContext:contextacquire:acquire]):
4523 "contactsources" do not exist anymore, SOGoContactFolder was split
4524 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
4525 and one protocol: SOGOContactFolder, instead.
4526 ([SOGoContactFolders -contactFolders]): new accessor used by the
4527 views of SOGoContactXXXFolder to list the possible sources.
4529 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
4530 defines the methods that UIxContactsView, ..Editor and so on...
4533 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
4534 defines the methods that UIxContactsListViewBase expects as well
4535 as the data fields returned in the contact lists.
4537 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
4538 returns entries an LDAP server. Conforms to the new
4539 SOGOContactFolder protocol.
4541 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
4542 returns a vCard based on contact entries from an LDAP server.
4543 Conforms to the new SOGOContactObject protocol.
4545 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
4546 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
4547 entry for the textual representation of the vCard.
4549 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
4552 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
4553 "SOGoContactObject".
4555 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
4556 method that generates a textual representation of the vcard.
4558 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
4560 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
4561 "SOGoContactFolder".
4563 * SoObjects/Contacts/SOGoContactSource.h,
4564 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
4567 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4568 -singleAttributeWithName:key]): new method that returns the first
4569 object associated with an ldap key (where generally one value is
4572 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
4573 map the entry into an NSDictionary for processing by
4574 UIxContactsListViewBase.m with the least possible overhead.
4576 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
4579 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4581 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4582 -privateContacts:inContext:]): now returns an instance of
4585 * UI/Contacts/UIxContactsListViewContainer.m
4586 ([UIxContactsListViewContainer -contactFolderName]): new method to
4587 return the absolute path to the current contact folder, called
4588 from within the template.
4590 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
4591 JS code to initialize the 'currentContactFolder' generic var.
4593 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
4594 +contactFolderWithSource:inContainer:andName:]): new class
4595 method meant to return an instance connected to the specified
4596 source. Currently useless but won't be anymore in the next few
4599 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
4600 the "lookupFreeBusyObject" method since it does not exist.
4602 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
4603 as a "view" for the SOGoContactFolders object. Does nothing but
4604 redirect the browser to the URL of the personal address book of
4605 the user. It does not even have a template.
4607 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
4608 implementing the SOGoContactSource protocol. Does nothing
4609 currently but will be used to implement access to the personal
4610 address book of the user stored in the SOGo database.
4612 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
4613 protocol defining an API common to all possible types of contact
4616 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
4617 serving as the root of the contact folders available to the
4618 current user. Correctly lists the contact sources in webdav.
4620 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4622 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
4623 -composeAction]): new action method that permits external object
4624 to write a message from the default (primary) account.
4626 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4627 -initSnapshot]): new method with code taken from "defaultAction"
4628 but needed for others.
4629 ([UIxContactEditorBase -writeAction]): new action designed to
4630 compose the correct URL needed to obtain the MailerUI's email
4631 editor with the correct "mailto" parameter.
4633 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
4634 Common so that other modules can use it.
4636 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
4637 easier to manage both ajax and non-ajax requests.
4639 * UI/Contacts/UIxContactsFilterPanel.m: clone of
4640 UIxMailFilterPanel, but applicable to contact lists.
4642 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
4643 -vcardContentFromSOGoContactRecord]): use the new standard methods
4644 created for each type of entry. If a line is determined to not
4645 contain information, it will be skipped.
4647 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4648 +initialize]): init defaultMailDomain with the user default
4649 "SOGoDefaultMailDomain".
4651 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4653 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4654 -saveAction]): reorganized methods to only have ONE return point.
4655 Invoke saveRecord: directly on the clientObject instead of
4656 saveContentString, which does the same thing anyway.
4658 * SoObjects/Contacts/NSDictionary+Contact.m
4659 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
4660 method to convert the dictionary returned with the user submission
4661 to a record in VCARD format to be stored in the database.
4663 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4665 * UI/WebServerResources/MailerUI.js: when opening the context menu
4666 of the message list, select the message below the mouse cursor and
4667 deselect the other selected messages temporarily. This mimics the
4668 behaviour of Thunderbird for that matter and was already
4669 implemented for the entries of the folder tree.
4671 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
4672 -iconForMenuItem]): new method that returns the fully qualified
4673 relative URL to the icon representing the mailbox, or the default
4674 mailbox icon if needed.
4676 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4677 -urlForResourceFilename:filename]): automatically return an empty
4678 string whenever the filename passed as argument is nil.
4680 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
4681 "desc" parameter set to 1 so that they are sorted in descending
4682 order by default. Also, added "onHeaderClick()", triggered by
4683 clicking on the message list header elements.
4685 * UI/MailerUI/UIxMailSortableTableHeader.m
4686 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
4688 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
4689 -isSortedDescending]): defaults to "YES" when the sort order is
4692 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4694 * UI/WebServerResources/MailerUI.js:
4695 - message cache: set the max num of cached messages to 20. Limit
4696 the cached message size to 30000 bytes.
4697 - ajax: when a message request is called while one is already
4698 being performed, the latter will be cancelled. Idem when
4699 retrieving the content of a mailbox.
4700 - folder tree: when a mailbox is selected because of the URL
4701 requested (initMailboxSelection), the dtree is expanded throughout
4702 the mailbox entry's parent hierarchy to ensure it is made visible
4703 when the page is being displayed. (new function: expandUpperTree).
4704 - mailbox loading: when loading a mailbox where a message was
4705 previously selected, we invoke its url with the "pageforuid"
4706 parameter correctly specified. During callback processing, we scan
4707 the table for the related row and reselect it.
4708 Also, the message area is set blank before loading any mailbox.
4710 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
4711 -defaultAction]): if the "pageforuid" parameter is passed in the
4712 url, take its value and invoke [self firstMessageOfPageFor:]
4713 consequently to deduce the first message to display. Otherwise,
4714 set it to "idx", otherwise set it to 0.
4715 ([UIxMailListView -firstMessageOfPageFor:]): new method
4716 that determines the first message of the page where the message
4717 passed as parameter is contained.
4719 * UI/WebServerResources/UIxMailListView.js: removed this module,
4720 its code was put in MailerUI.js instead.
4722 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4724 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
4725 which returns the nodes for the parent specified in "parentMenu".
4726 Used to generate the javascript code for the folder dtree.
4728 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
4729 using that container-template are now using UIxMailMainFrame
4730 since UIxMailPanelFrame had no real interest. File removed.
4732 * UI/WebServerResources/dtree.{css,js}: new files to handle
4733 javascript-generated mailbox tree. Modified from original version
4734 by integrating the previous code with the one we are using for
4735 selections and mailbox handling. Minor visual enhancements too...
4737 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4739 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
4740 returned, put it in an NSArray before returning it (fixes
4743 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4745 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
4746 that returns a url string stripped from its "http://hostname"
4749 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
4751 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
4753 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4755 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
4756 -mailDateFormatter]): retrieve the timezone from the user settings
4757 and pass it to the returned dateFormatter. Also, the dateFormatter
4758 is kept in a static variable to avoid useless
4759 creations/destructions.
4761 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
4762 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
4764 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
4765 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
4766 s/Criteria/Text/ to handle the "criteria" form parameter.
4768 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4770 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
4771 to integrate better with the firefox look&feel. Added entries for
4772 the new "menu" DIV class (popup menus).
4774 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
4775 takes any chunk of text as param, detects the user email and the
4776 optional first and last names and return them in a well-formatted
4777 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
4778 namespace conflict. Added "onMenuClick(node, event, menuId)" to
4779 handle popup menus through "onclick" element attributes (node =
4780 this, event = event and menuId = name of the menu DIV id to
4783 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4784 -snapshot]): add an entry for "email" into the snapshot
4785 dictionary if a "contactEmail" URL parameter was detected and if
4786 the entry for "email" is empty.
4788 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
4789 button now invokes the newContact() js function in ContactsUI.js
4790 instead of opening "new" directly. newContact() pops up a window
4791 stripped from its navigation bar.
4793 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
4794 bundle (AddressBook).
4796 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
4797 "menu" and id "addressMenu" have the header email addresses
4798 display it with the new menu code in generic.js.
4800 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
4801 replaced the body tables with a div of class "pageContent"
4802 (standardization across the page templates).
4804 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
4805 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
4806 those are now inherited from UIxPageFrame.
4808 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
4810 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
4811 a "mailto" URL parameter is detected and the "to" array is empty,
4812 initialize "to" with the value of "mailto" before returning it.
4814 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
4815 -composeAction]): rewrote method in a cleaner way and with usage
4816 of the URL extensions to NSString and NSDictionary (see below).
4817 Also, if a "mailto" url parameter is detected, pass it to the
4820 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
4823 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
4824 returns a parameter string to add to a base URL.
4826 * UI/Common/NSString+URL.m ([NSString
4827 -composeURLWithAction:parameters:andHash:useHash]): new method to
4828 compose a complete URL from an object URL with parameters and an
4829 optional '#' character.
4831 * UI/Common/UIxPageFrame.h: separated interface from
4834 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
4836 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
4838 * UI/WebServerResources/generic.js: added code to manage
4839 selections within HTML containers.
4841 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
4842 added method to determine the possible URL for a product-specific
4843 javascript filename of the forme <productname>.js.
4844 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
4845 ([UIxPageFrame -isPopup]): new method to determine whether the
4846 application navigator bar should be displayed (main page) or not
4849 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
4850 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
4851 the user through LDAP.
4853 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4855 * The toolbar code from the MailerUI product was taken, renamed as
4856 "UIxToolBar" and put into UI/Common. Toolbar plists were created
4857 for the Contacts and Scheduler products and put in their respectir
4858 Toolbars/ subdirectories. Finally,
4859 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
4860 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
4861 and an invocation to the UIxToolbar component was put at the top
4862 of UI/Templaces/UIxPageFrame.wox.
4864 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
4865 within the templates whether a separator should be displayed.
4867 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
4868 that returns NO if the toolbar is empty.
4870 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4872 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
4874 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
4875 new toolbar objects.
4877 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
4879 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
4880 linkbanner as a DIV instead of a TABLE.
4882 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
4884 returns 'YES' to request the display of the navigation bar between
4887 2006-06-15 ludovic@inverse.ca
4889 * It's now possible to set the default
4890 domain using for email using the
4891 SOGoDefaultMailDomain preference key.
4893 2006-06-15 ludovic@inverse.ca
4895 * Initial import of SOGo from trunk.